core-extra/netns/myerr.h

81 lines
1.6 KiB
C
Raw Normal View History

/*
* CORE
* Copyright (c)2010-2012 the Boeing Company.
* See the LICENSE file included in this distribution.
*
* author: Tom Goff <thomas.goff@boeing.com>
*
* myerr.h
*
* Custom error printing macros.
*/
#ifndef _MYERR_H_
#define _MYERR_H_
#include <stdarg.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <time.h>
#include <unistd.h>
#include <sys/time.h>
static void __myerrprintf(const char *func, const char *file, const int line,
FILE *stream, const char *fmt, ...)
{
extern const char *__progname;
va_list ap;
pid_t pid;
struct timeval tv;
va_start(ap, fmt);
pid = getpid();
if (gettimeofday(&tv, NULL))
{
fprintf(stream, "%s[%u]: %s[%s:%d]: ", __progname, pid, func, file, line);
}
else
{
char timestr[9];
strftime(timestr, sizeof(timestr), "%H:%M:%S", localtime(&tv.tv_sec));
fprintf(stream, "%s[%u]: %s.%06ld %s[%s:%d]: ",
__progname, pid, timestr, tv.tv_usec, func, file, line);
}
vfprintf(stream, fmt, ap);
fputs("\n", stream);
va_end(ap);
return;
}
#define INFO(fmt, args...) \
__myerrprintf(__func__, __FILE__, __LINE__, \
stdout, fmt, ##args)
#define WARNX(fmt, args...) \
__myerrprintf(__func__, __FILE__, __LINE__, \
stderr, fmt, ##args)
#define WARN(fmt, args...) \
__myerrprintf(__func__, __FILE__, __LINE__, \
stderr, fmt ": %s", ##args, strerror(errno))
#define ERRX(eval, fmt, args...) \
do { \
WARNX(fmt, ##args); \
exit(eval); \
} while (0)
#define ERR(eval, fmt, args...) \
do { \
WARN(fmt, ##args); \
exit(eval); \
} while (0)
#endif /* _MYERR_H_ */