91 lines
2.6 KiB
C
91 lines
2.6 KiB
C
|
#ifndef DEBUG_H
|
||
|
#define DEBUG_H
|
||
|
|
||
|
#include <stdlib.h>
|
||
|
#include <stdio.h>
|
||
|
|
||
|
#define unlikely(expr) __builtin_expect (expr, 0)
|
||
|
#define likely(expr) __builtin_expect (expr, 1)
|
||
|
|
||
|
#ifdef DEBUG
|
||
|
|
||
|
#define FAILIF(cond, msg...) do { \
|
||
|
if (unlikely(cond)) { \
|
||
|
fprintf(stderr, "%s(%d): ", __FILE__, __LINE__); \
|
||
|
fprintf(stderr, ##msg); \
|
||
|
exit(1); \
|
||
|
} \
|
||
|
} while(0)
|
||
|
|
||
|
/* Debug enabled */
|
||
|
#define ASSERT(x) do { \
|
||
|
if (unlikely(!(x))) { \
|
||
|
fprintf(stderr, \
|
||
|
"ASSERTION FAILURE %s:%d: [%s]\n", \
|
||
|
__FILE__, __LINE__, #x); \
|
||
|
exit(1); \
|
||
|
} \
|
||
|
} while(0)
|
||
|
|
||
|
#else
|
||
|
|
||
|
#define FAILIF(cond, msg...) do { \
|
||
|
if (unlikely(cond)) { \
|
||
|
fprintf(stderr, ##msg); \
|
||
|
exit(1); \
|
||
|
} \
|
||
|
} while(0)
|
||
|
|
||
|
/* No debug */
|
||
|
#define ASSERT(x) do { } while(0)
|
||
|
|
||
|
#endif/* DEBUG */
|
||
|
|
||
|
#define FAILIF_LIBELF(cond, function) \
|
||
|
FAILIF(cond, "%s(): %s\n", #function, elf_errmsg(elf_errno()));
|
||
|
|
||
|
static inline void *MALLOC(unsigned int size) {
|
||
|
void *m = malloc(size);
|
||
|
FAILIF(NULL == m, "malloc(%d) failed!\n", size);
|
||
|
return m;
|
||
|
}
|
||
|
|
||
|
static inline void *CALLOC(unsigned int num_entries, unsigned int entry_size) {
|
||
|
void *m = calloc(num_entries, entry_size);
|
||
|
FAILIF(NULL == m, "calloc(%d, %d) failed!\n", num_entries, entry_size);
|
||
|
return m;
|
||
|
}
|
||
|
|
||
|
static inline void *REALLOC(void *ptr, unsigned int size) {
|
||
|
void *m = realloc(ptr, size);
|
||
|
FAILIF(NULL == m, "realloc(%p, %d) failed!\n", ptr, size);
|
||
|
return m;
|
||
|
}
|
||
|
|
||
|
static inline void FREE(void *ptr) {
|
||
|
free(ptr);
|
||
|
}
|
||
|
|
||
|
static inline void FREEIF(void *ptr) {
|
||
|
if (ptr) FREE(ptr);
|
||
|
}
|
||
|
|
||
|
#define PRINT(x...) do { \
|
||
|
extern int quiet_flag; \
|
||
|
if(likely(!quiet_flag)) \
|
||
|
fprintf(stdout, ##x); \
|
||
|
} while(0)
|
||
|
|
||
|
#define ERROR PRINT
|
||
|
|
||
|
#define INFO(x...) do { \
|
||
|
extern int verbose_flag; \
|
||
|
if(unlikely(verbose_flag)) \
|
||
|
fprintf(stdout, ##x); \
|
||
|
} while(0)
|
||
|
|
||
|
/* Prints a hex and ASCII dump of the selected buffer to the selected stream. */
|
||
|
int dump_hex_buffer(FILE *s, void *b, size_t l, size_t elsize);
|
||
|
|
||
|
#endif/*DEBUG_H*/
|