diff options
author | Tavian Barnes <tavianator@tavianator.com> | 2024-02-29 13:16:14 -0500 |
---|---|---|
committer | Tavian Barnes <tavianator@tavianator.com> | 2024-02-29 13:25:24 -0500 |
commit | a228788769d7e3c71154606609a13eafb03a5fc2 (patch) | |
tree | d78e7495df29767f5cf3a044bbe4271eaf0a6af7 /src | |
parent | e6d80d04d6928c452b48eae717373bf6a943e355 (diff) | |
download | bfs-a228788769d7e3c71154606609a13eafb03a5fc2.tar.xz |
diag: New bfs_diag() macro
Diffstat (limited to 'src')
-rw-r--r-- | src/diag.c | 17 | ||||
-rw-r--r-- | src/diag.h | 13 |
2 files changed, 27 insertions, 3 deletions
@@ -14,15 +14,26 @@ #include <stdlib.h> #include <string.h> -noreturn void bfs_abortf(const struct bfs_loc *loc, const char *format, ...) { +/** bfs_diagf() implementation. */ +attr(printf(2, 0)) +static void bfs_vdiagf(const struct bfs_loc *loc, const char *format, va_list args) { fprintf(stderr, "%s: %s@%s:%d: ", xgetprogname(), loc->func, loc->file, loc->line); + vfprintf(stderr, format, args); + fprintf(stderr, "\n"); +} +void bfs_diagf(const struct bfs_loc *loc, const char *format, ...) { va_list args; va_start(args, format); - vfprintf(stderr, format, args); + bfs_vdiagf(loc, format, args); va_end(args); +} - fprintf(stderr, "\n"); +noreturn void bfs_abortf(const struct bfs_loc *loc, const char *format, ...) { + va_list args; + va_start(args, format); + bfs_vdiagf(loc, format, args); + va_end(args); abort(); } @@ -42,6 +42,19 @@ struct bfs_loc { #endif /** + * Print a low-level diagnostic message to standard error, formatted like + * + * bfs: func@src/file.c:0: Message + */ +attr(printf(2, 3)) +void bfs_diagf(const struct bfs_loc *loc, const char *format, ...); + +/** + * Unconditional diagnostic message. + */ +#define bfs_diag(...) bfs_diagf(bfs_location(), __VA_ARGS__) + +/** * Print a message to standard error and abort. */ attr(cold, printf(2, 3)) |