#include <stdio.h> | |
#include <stdlib.h> | |
#include <string.h> | |
#include <stdarg.h> | |
#include <errno.h> | |
#define __weak __attribute__((weak)) | |
void __vdie(const char *fmt, va_list ap) | |
{ | |
int ret = errno; | |
if (errno) | |
perror("trace-cmd"); | |
else | |
ret = -1; | |
fprintf(stderr, " "); | |
vfprintf(stderr, fmt, ap); | |
fprintf(stderr, "\n"); | |
exit(ret); | |
} | |
void __die(const char *fmt, ...) | |
{ | |
va_list ap; | |
va_start(ap, fmt); | |
__vdie(fmt, ap); | |
va_end(ap); | |
} | |
void __weak die(const char *fmt, ...) | |
{ | |
va_list ap; | |
va_start(ap, fmt); | |
__vdie(fmt, ap); | |
va_end(ap); | |
} | |
void __vwarning(const char *fmt, va_list ap) | |
{ | |
if (errno) | |
perror("trace-cmd"); | |
errno = 0; | |
fprintf(stderr, " "); | |
vfprintf(stderr, fmt, ap); | |
fprintf(stderr, "\n"); | |
} | |
void __warning(const char *fmt, ...) | |
{ | |
va_list ap; | |
va_start(ap, fmt); | |
__vwarning(fmt, ap); | |
va_end(ap); | |
} | |
void __weak warning(const char *fmt, ...) | |
{ | |
va_list ap; | |
va_start(ap, fmt); | |
__vwarning(fmt, ap); | |
va_end(ap); | |
} | |
void __vpr_stat(const char *fmt, va_list ap) | |
{ | |
vprintf(fmt, ap); | |
printf("\n"); | |
} | |
void __pr_stat(const char *fmt, ...) | |
{ | |
va_list ap; | |
va_start(ap, fmt); | |
__vpr_stat(fmt, ap); | |
va_end(ap); | |
} | |
void __weak vpr_stat(const char *fmt, va_list ap) | |
{ | |
__vpr_stat(fmt, ap); | |
} | |
void __weak pr_stat(const char *fmt, ...) | |
{ | |
va_list ap; | |
va_start(ap, fmt); | |
__vpr_stat(fmt, ap); | |
va_end(ap); | |
} | |
void __weak *malloc_or_die(unsigned int size) | |
{ | |
void *data; | |
data = malloc(size); | |
if (!data) | |
die("malloc"); | |
return data; | |
} |