Go to the documentation of this file.
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); \
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)