Fix: syscall event rule: emission sites not compared in is_equal
[lttng-tools.git] / src / common / exception.hpp
1 /*
2 * Copyright (C) 2022 Jérémie Galarneau <jeremie.galarneau@efficios.com>
3 *
4 * SPDX-License-Identifier: LGPL-2.1-only
5 *
6 */
7
8 #ifndef LTTNG_EXCEPTION_H_
9 #define LTTNG_EXCEPTION_H_
10
11 #include <lttng/lttng-error.h>
12
13 #include <stdexcept>
14 #include <string>
15 #include <system_error>
16
17 #define LTTNG_THROW_CTL(msg, error_code) \
18 throw lttng::ctl::error(msg, error_code, __FILE__, __func__, __LINE__)
19 #define LTTNG_THROW_POSIX(msg, errno_code) \
20 throw lttng::posix_error(msg, errno_code, __FILE__, __func__, __LINE__)
21 #define LTTNG_THROW_ERROR(msg) throw lttng::runtime_error(msg, __FILE__, __func__, __LINE__)
22 #define LTTNG_THROW_UNSUPPORTED_ERROR(msg) \
23 throw lttng::unsupported_error(msg, __FILE__, __func__, __LINE__)
24 #define LTTNG_THROW_COMMUNICATION_ERROR(msg) \
25 throw lttng::communication_error(msg, __FILE__, __func__, __LINE__)
26 #define LTTNG_THROW_PROTOCOL_ERROR(msg) \
27 throw lttng::protocol_error(msg, __FILE__, __func__, __LINE__)
28 #define LTTNG_THROW_INVALID_ARGUMENT_ERROR(msg) \
29 throw lttng::invalid_argument_error(msg, __FILE__, __func__, __LINE__)
30
31 namespace lttng {
32 class runtime_error : public std::runtime_error {
33 public:
34 explicit runtime_error(const std::string& msg,
35 const char *file_name,
36 const char *function_name,
37 unsigned int line_number);
38 };
39
40 class unsupported_error : public std::runtime_error {
41 public:
42 explicit unsupported_error(const std::string& msg,
43 const char *file_name,
44 const char *function_name,
45 unsigned int line_number);
46 };
47
48 namespace ctl {
49 /* Wrap lttng_error_code errors which may be reported through liblttng-ctl's interface. */
50 class error : public runtime_error {
51 public:
52 explicit error(const std::string& msg,
53 lttng_error_code error_code,
54 const char *file_name,
55 const char *function_name,
56 unsigned int line_number);
57
58 lttng_error_code code() const noexcept
59 {
60 return _error_code;
61 }
62
63 private:
64 const lttng_error_code _error_code;
65 };
66 } /* namespace ctl */
67
68 class posix_error : public std::system_error {
69 public:
70 explicit posix_error(const std::string& msg,
71 int errno_code,
72 const char *file_name,
73 const char *function_name,
74 unsigned int line_number);
75 };
76
77 class communication_error : public runtime_error {
78 public:
79 explicit communication_error(const std::string& msg,
80 const char *file_name,
81 const char *function_name,
82 unsigned int line_number);
83 };
84
85 class protocol_error : public communication_error {
86 public:
87 explicit protocol_error(const std::string& msg,
88 const char *file_name,
89 const char *function_name,
90 unsigned int line_number);
91 };
92
93 class invalid_argument_error : public runtime_error {
94 public:
95 explicit invalid_argument_error(const std::string& msg,
96 const char *file_name,
97 const char *function_name,
98 unsigned int line_number);
99 };
100
101 }; /* namespace lttng */
102
103 #endif /* LTTNG_EXCEPTION_H_ */
This page took 0.031449 seconds and 4 git commands to generate.