/* * 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_ */