Libevhtp  1.2.13
internal.h
Go to the documentation of this file.
1 
5 #ifndef __EVHTP_INTERNAL_H__
6 #define __EVHTP_INTERNAL_H__
7 
8 #ifdef __cplusplus
9 extern "C" {
10 #endif
11 
12 
13 #if defined __GNUC__ || defined __llvm__
14 # define evhtp_likely(x) __builtin_expect(!!(x), 1)
15 # define evhtp_unlikely(x) __builtin_expect(!!(x), 0)
16 #else
17 # define evhtp_likely(x) (x)
18 # define evhtp_unlikely(x) (x)
19 #endif
20 
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); \
25  (var) = (tvar))
26 #endif
27 
28 #define evhtp_safe_free(_var, _freefn) do { \
29  _freefn((_var)); \
30  (_var) = NULL; \
31 } while (0)
32 
33 
34 #define evhtp_assert(x) \
35  do { \
36  if (evhtp_unlikely(!(x))) { \
37  fprintf(stderr, "Assertion failed: %s (%s:%s:%d)\n", # x, \
38  __func__, __FILE__, __LINE__); \
39  fflush(stderr); \
40  abort(); \
41  } \
42  } while (0)
43 
44 #define evhtp_alloc_assert(x) \
45  do { \
46  if (evhtp_unlikely(!x)) { \
47  fprintf(stderr, "Out of memory (%s:%s:%d)\n", \
48  __func__, __FILE__, __LINE__); \
49  fflush(stderr); \
50  abort(); \
51  } \
52  } while (0)
53 
54 #define evhtp_assert_fmt(x, fmt, ...) \
55  do { \
56  if (evhtp_unlikely(!(x))) { \
57  fprintf(stderr, "Assertion failed: %s (%s:%s:%d) " fmt "\n", \
58  # x, __func__, __FILE__, __LINE__, __VA_ARGS__); \
59  fflush(stderr); \
60  abort(); \
61  } \
62  } while (0)
63 
64 #define evhtp_errno_assert(x) \
65  do { \
66  if (evhtp_unlikely(!(x))) { \
67  fprintf(stderr, "%s [%d] (%s:%s:%d)\n", \
68  strerror(errno), errno, \
69  __func__, __FILE__, __LINE__); \
70  fflush(stderr); \
71  abort(); \
72  } \
73  } while (0)
74 
75 #ifdef __cplusplus
76 }
77 #endif
78 
79 #endif
80