You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
proxysql/include/proxysql_macros.h

74 lines
1.6 KiB

#ifndef PROXYSQL_MACROS_H
#define PROXYSQL_MACROS_H
#define strdup_null(__c) ( __c ? strdup(__c) : __c )
#define char_malloc (char *)malloc
#define free_null(__c) { if(__c) { free(__c); __c=NULL; } }
#define itostr(__s, __i) { __s=char_malloc(32); sprintf(__s, "%lld", __i); }
// fast memory copy forward . Use this instead of memcpy for small buffers
#define MEM_COPY_FWD(dst_p, src_p, bytes) \
do { \
void *__a=dst_p; \
void *__b=src_p; \
size_t __nbytes = (bytes); \
while (__nbytes > 0) { \
char __x = ((char *) __b)[0]; \
__b += 1; \
__nbytes -= 1; \
((char *) __a)[0] = __x; \
__a += 1; \
} \
} while (0)
// copy 1 byte
#define CPY1(x) *((uint8_t *)(x))
// copy 2 bytes
#define CPY2(x) *((uint16_t *)(x))
/*
#define CPY3(x) \
do { \
uchar _cpy3buf[4]; \
memcpy(_cpy3buf, x, 3); \
_cpy3buf[3]=0; \
return *((uint32_t *)cy3buf); \
} while(0)
*/
// copy 4 bytes
#define CPY4(x) *((uint32_t *)x)
// (un)set blocking mode on a file descriptor
#define ioctl_FIONBIO(fd, mode) \
{ \
int ioctl_mode=mode; \
ioctl(fd, FIONBIO, (char *)&ioctl_mode); \
}
// copy 4 bytes
#define Copy4B(x,y) \
do { \
uint32_t *a=(uint32_t *)x; \
*a=*((uint32_t *)y); \
} while(0)
#ifndef PROXYSQL_LIKELY
#ifdef __GNUC__
# define likely(x) __builtin_expect(!!(x), 1)
# define unlikely(x) __builtin_expect(!!(x), 0)
#else
# define likely(x) !!(x)
# define unlikely(x) !!(x)
#endif
#endif /* PROXYSQL_LIKELY */
#ifndef ENABLE_TIMER
#define ENABLE_TIMER false
#endif // ENABLE_TIMER
#endif // PROXYSQL_MACROS_H