/* * CORE * Copyright (c)2010-2012 the Boeing Company. * See the LICENSE file included in this distribution. * * author: Tom Goff * * myerr.h * * Custom error printing macros. */ #ifndef _MYERR_H_ #define _MYERR_H_ #include #include #include #include #include #include #include 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_ */