From f0df110ba42a6d23cb222069e4c2a4712d48d9f1 Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Sat, 24 Jun 2023 12:47:09 -0400 Subject: bfstd: Add a getprogname() wrapper --- src/bfstd.c | 15 +++++++++++++++ src/bfstd.h | 8 ++++++++ src/diag.c | 12 +----------- 3 files changed, 24 insertions(+), 11 deletions(-) diff --git a/src/bfstd.c b/src/bfstd.c index 0e8ba5f..1f4bbb2 100644 --- a/src/bfstd.c +++ b/src/bfstd.c @@ -143,6 +143,21 @@ char *xgetdelim(FILE *file, char delim) { } } +const char *xgetprogname(void) { + const char *cmd = NULL; +#if __GLIBC__ + cmd = program_invocation_short_name; +#elif BSD + cmd = getprogname(); +#endif + + if (!cmd) { + cmd = BFS_COMMAND; + } + + return cmd; +} + /** Compile and execute a regular expression for xrpmatch(). */ static int xrpregex(nl_item item, const char *response) { const char *pattern = nl_langinfo(item); diff --git a/src/bfstd.h b/src/bfstd.h index cafe28f..ebbcdb9 100644 --- a/src/bfstd.h +++ b/src/bfstd.h @@ -105,6 +105,14 @@ char *xgetdelim(FILE *file, char delim); // #include +/** + * Wrapper for getprogname() or equivalent functionality. + * + * @return + * The basename of the currently running program. + */ +const char *xgetprogname(void); + /** * Process a yes/no prompt. * diff --git a/src/diag.c b/src/diag.c index 99b487a..acea9ad 100644 --- a/src/diag.c +++ b/src/diag.c @@ -14,17 +14,7 @@ #include noreturn void bfs_abortf(const struct bfs_loc *loc, const char *format, ...) { - const char *cmd = NULL; -#if __GLIBC__ - cmd = program_invocation_short_name; -#elif BSD - cmd = getprogname(); -#endif - if (!cmd) { - cmd = BFS_COMMAND; - } - - fprintf(stderr, "%s: %s@%s:%d: ", cmd, loc->func, loc->file, loc->line); + fprintf(stderr, "%s: %s@%s:%d: ", xgetprogname(), loc->func, loc->file, loc->line); va_list args; va_start(args, format); -- cgit v1.2.3