5 #ifndef __EVHTP_INTERNAL_H__
6 #define __EVHTP_INTERNAL_H__
13 #if defined __GNUC__ || defined __llvm__
14 # define evhtp_likely(x) __builtin_expect(!!(x), 1)
15 # define evhtp_unlikely(x) __builtin_expect(!!(x), 0)
17 # define evhtp_likely(x) (x)
18 # define evhtp_unlikely(x) (x)
21 #ifndef TAILQ_FOREACH_SAFE
22 #define TAILQ_FOREACH_SAFE(var, head, field, tvar) \
23 for ((var) = TAILQ_FIRST((head)); \
24 (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \
29 #define __FILENAME__ \
30 (strrchr(__FILE__, '/') ? \
31 strrchr(__FILE__, '/') + 1 : __FILE__)
33 #define clean_errno() \
34 (errno == 0 ? "None" : strerror(errno))
36 #define __log_debug_color(X) "[\x1b[1;36m" X "\x1b[0;39m]"
37 #define __log_error_color(X) "[\x1b[1;31m" X "\x1b[0;39m]"
38 #define __log_warn_color(X) "[\x1b[1;33m" X "\x1b[0;39m]"
39 #define __log_info_color(X) "[\x1b[32m" X "\x1b[0;39m]"
40 #define __log_func_color(X) "\x1b[33m" X "\x1b[39m"
41 #define __log_args_color(X) "\x1b[94m" X "\x1b[39m"
42 #define __log_errno_color(X) "\x1b[35m" X "\x1b[39m"
45 #if !defined(EVHTP_DEBUG)
47 #define log_debug(M, ...)
49 #define log_debug(M, ...) \
50 fprintf(stderr, __log_debug_color("DEBUG") " " \
51 __log_func_color("%s/%s:%-9d") \
54 __FILENAME__, __FUNCTION__, __LINE__, ## __VA_ARGS__)
57 #define log_error(M, ...) \
58 fprintf(stderr, __log_error_color("ERROR") " " \
59 __log_func_color("%s:%-9d") \
62 __log_errno_color("(errno: %s)") \
64 __FILENAME__, __LINE__, ## __VA_ARGS__, clean_errno())
67 #define log_warn(M, ...) \
68 fprintf(stderr, __log_warn_color("WARN") " " \
69 __log_func_color("%s:%-9d") \
72 __log_errno_color("(errno: %s)") \
74 __FILENAME__, __LINE__, ## __VA_ARGS__, clean_errno())
76 #define log_info(M, ...) \
77 fprintf(stderr, __log_info_color("INFO") " " \
78 __log_func_color("%4s:%-9d") \
79 __log_args_color(M) "\n", \
80 __FILENAME__, __LINE__, ## __VA_ARGS__)
83 #define evhtp_assert(x) \
85 if (evhtp_unlikely(!(x))) { \
86 fprintf(stderr, "Assertion failed: %s (%s:%s:%d)\n", # x, \
87 __func__, __FILE__, __LINE__); \
93 #define evhtp_alloc_assert(x) \
95 if (evhtp_unlikely(!x)) { \
96 fprintf(stderr, "Out of memory (%s:%s:%d)\n", \
97 __func__, __FILE__, __LINE__); \
103 #define evhtp_assert_fmt(x, fmt, ...) \
105 if (evhtp_unlikely(!(x))) { \
106 fprintf(stderr, "Assertion failed: %s (%s:%s:%d) " fmt "\n", \
107 # x, __func__, __FILE__, __LINE__, __VA_ARGS__); \
113 #define evhtp_errno_assert(x) \
115 if (evhtp_unlikely(!(x))) { \
116 fprintf(stderr, "%s [%d] (%s:%s:%d)\n", \
117 strerror(errno), errno, \
118 __func__, __FILE__, __LINE__); \
124 #define evhtp_assert(x)
125 #define evhtp_alloc_assert(x)
126 #define evhtp_assert_fmt(x)
127 #define evhtp_errno_assert(x)