extern int lttng_opt_mi;
/* Error type. */
-#define PRINT_ERR 0x1
-#define PRINT_WARN 0x2
-#define PRINT_BUG 0x3
-#define PRINT_MSG 0x4
-#define PRINT_DBG 0x10
-#define PRINT_DBG2 0x20
-#define PRINT_DBG3 0x30
+#define PRINT_ERR (1 << 0)
+#define PRINT_WARN (1 << 1)
+#define PRINT_BUG (1 << 2)
+#define PRINT_MSG (1 << 3)
+#define PRINT_DBG (1 << 4)
+#define PRINT_DBG2 (1 << 5)
+#define PRINT_DBG3 (1 << 6)
/*
* Macro for printing message depending on command line option and verbosity.
*/
#define __lttng_print(type, fmt, args...) \
do { \
- if (!lttng_opt_quiet&& !lttng_opt_mi && \
- type == PRINT_MSG) { \
+ if (!lttng_opt_quiet && !lttng_opt_mi && \
+ (type) == PRINT_MSG) { \
fprintf(stdout, fmt, ## args); \
} else if (!lttng_opt_quiet && !lttng_opt_mi && \
- (((type & PRINT_DBG) && lttng_opt_verbose == 1) || \
- ((type & (PRINT_DBG | PRINT_DBG2)) && \
+ ((((type) & PRINT_DBG) && lttng_opt_verbose == 1) || \
+ (((type) & (PRINT_DBG | PRINT_DBG2)) && \
lttng_opt_verbose == 2) || \
- ((type & (PRINT_DBG | PRINT_DBG2 | PRINT_DBG3)) && \
+ (((type) & (PRINT_DBG | PRINT_DBG2 | PRINT_DBG3)) && \
lttng_opt_verbose == 3))) { \
fprintf(stderr, fmt, ## args); \
} else if (!lttng_opt_quiet && \
- (type & (PRINT_WARN | PRINT_ERR | PRINT_BUG))) { \
+ ((type) & (PRINT_WARN | PRINT_ERR | PRINT_BUG))) { \
fprintf(stderr, fmt, ## args); \
} \
+ if ((type) & (PRINT_ERR | PRINT_BUG)) { \
+ lttng_abort_on_error(); \
+ } \
} while (0);
/* Three level of debug. Use -v, -vv or -vvv for the levels */
#define ERR(fmt, args...) \
__lttng_print(PRINT_ERR, "Error: " fmt "\n", ## args)
#define WARN(fmt, args...) \
- __lttng_print(PRINT_ERR, "Warning: " fmt "\n", ## args)
+ __lttng_print(PRINT_WARN, "Warning: " fmt "\n", ## args)
#define BUG(fmt, args...) _ERRMSG("BUG", PRINT_BUG, fmt, ## args)
*/
const char *log_add_time();
+void lttng_abort_on_error(void);
+
#endif /* _ERROR_H */