X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fcommon%2Fexception.hpp;h=a3b0a83e210a5246b35e949112eef5a315c79f73;hb=0038180de36c422cfaeade1145fa9fbc9436b8ad;hp=b223799151508c5a5a51d37628db093aca9bc6d6;hpb=aeeb48c6a7dd4bcc092b3105439489fc393f6425;p=lttng-tools.git diff --git a/src/common/exception.hpp b/src/common/exception.hpp index b22379915..a3b0a83e2 100644 --- a/src/common/exception.hpp +++ b/src/common/exception.hpp @@ -14,45 +14,88 @@ #include -#define LTTNG_THROW_CTL(error_code) \ +#define LTTNG_THROW_CTL(msg, error_code) \ throw lttng::ctl::error(msg, error_code, __FILE__, __func__, __LINE__) #define LTTNG_THROW_POSIX(msg, errno_code) \ throw lttng::posix_error(msg, errno_code, __FILE__, __func__, __LINE__) -#define LTTNG_THROW_ERROR(msg) \ +#define LTTNG_THROW_ERROR(msg) throw lttng::runtime_error(msg, __FILE__, __func__, __LINE__) +#define LTTNG_THROW_UNSUPPORTED_ERROR(msg) \ throw lttng::runtime_error(msg, __FILE__, __func__, __LINE__) +#define LTTNG_THROW_COMMUNICATION_ERROR(msg) \ + throw lttng::communication_error(msg, __FILE__, __func__, __LINE__) +#define LTTNG_THROW_PROTOCOL_ERROR(msg) \ + throw lttng::protocol_error(msg, __FILE__, __func__, __LINE__) +#define LTTNG_THROW_INVALID_ARGUMENT_ERROR(msg) \ + throw lttng::invalid_argument_error(msg, __FILE__, __func__, __LINE__) namespace lttng { +class runtime_error : public std::runtime_error { +public: + explicit runtime_error(const std::string& msg, + const char *file_name, + const char *function_name, + unsigned int line_number); +}; + +class unsupported_error : public std::runtime_error { +public: + explicit unsupported_error(const std::string& msg, + const char *file_name, + const char *function_name, + unsigned int line_number); +}; namespace ctl { /* Wrap lttng_error_code errors which may be reported through liblttng-ctl's interface. */ -class error : public std::runtime_error { +class error : public runtime_error { public: - explicit error(lttng_error_code error_code, - const char *file_name, - const char *function_name, - unsigned int line_number); - lttng_error_code get_code() const; + explicit error(const std::string& msg, + lttng_error_code error_code, + const char *file_name, + const char *function_name, + unsigned int line_number); + + lttng_error_code code() const noexcept + { + return _error_code; + } private: - lttng_error_code _error_code; + const lttng_error_code _error_code; }; } /* namespace ctl */ class posix_error : public std::system_error { public: - explicit posix_error(const std::string &msg, - int errno_code, - const char *file_name, - const char *function_name, - unsigned int line_number); + explicit posix_error(const std::string& msg, + int errno_code, + const char *file_name, + const char *function_name, + unsigned int line_number); }; -class runtime_error : public std::runtime_error { +class communication_error : public runtime_error { +public: + explicit communication_error(const std::string& msg, + const char *file_name, + const char *function_name, + unsigned int line_number); +}; + +class protocol_error : public communication_error { +public: + explicit protocol_error(const std::string& msg, + const char *file_name, + const char *function_name, + unsigned int line_number); +}; + +class invalid_argument_error : public runtime_error { public: - explicit runtime_error(const std::string &msg, - const char *file_name, - const char *function_name, - unsigned int line_number); + explicit invalid_argument_error(const std::string& msg, + const char *file_name, + const char *function_name, + unsigned int line_number); }; }; /* namespace lttng */