81 lines
1.6 KiB
C
81 lines
1.6 KiB
C
|
/*
|
||
|
* 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_ */
|