/* See LICENSE file for copyright and license details. */ #include "common.h" struct warning_class_data warning_classes[] = { #define X(ENUM, NAME, ACTION) {NAME, ACTION}, LIST_WARNING_CLASSES(X) #undef X {NULL, 0} }; static void vxprintwarningf(enum warning_class class, int severity, const char *fmt, va_list ap) { if (warning_classes[class].action != IGNORE) { fprintf(stderr, "[%s] ", warning_classes[class].action == INFORM ? "info" : warning_classes[class].action == WARN_STYLE ? "style" : "warning"); vfprintf(stderr, fmt, ap); fprintf(stderr, " (-w%s)\n", warning_classes[class].name); if (warning_classes[class].action != INFORM) exit_status = MAX(exit_status, severity); } } void xprintwarningf(enum warning_class class, int severity, const char *fmt, ...) { va_list ap; va_start(ap, fmt); vxprintwarningf(class, severity, fmt, ap); va_end(ap); } void printinfof(enum warning_class class, const char *fmt, ...) { va_list ap; if (warning_classes[class].action != IGNORE) { va_start(ap, fmt); fprintf(stderr, "[info] "); vfprintf(stderr, fmt, ap); fprintf(stderr, "\n"); va_end(ap); } } void printerrorf(const char *fmt, ...) { va_list ap; va_start(ap, fmt); fprintf(stderr, "%s: [error] ", argv0); vfprintf(stderr, fmt, ap); fprintf(stderr, "\n"); va_end(ap); exit(EXIT_CRITICAL); } void printtipf(enum warning_class class, const char *fmt, ...) { va_list ap; if (warning_classes[class].action != IGNORE) { va_start(ap, fmt); fprintf(stderr, "[tip] "); vfprintf(stderr, fmt, ap); fprintf(stderr, "\n"); va_end(ap); } }