From 7ea9ce2be26022ace385842dd14ef8c21c105fb6 Mon Sep 17 00:00:00 2001 From: Mark Wooding Date: Sun, 6 Mar 2022 16:21:36 +0000 Subject: [PATCH] lib.c, lib.h: Introduce `vmoan_syserr' and `moan_syserr'. This cleans up this little family of functions. There's a behaviour change: `vmoan' now prints a newline which it didn't before, and callers have been adjusted to compensate. --- lib.c | 28 +++++++++++++--------------- lib.h | 2 ++ 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/lib.c b/lib.c index 08616a7..69532e8 100644 --- a/lib.c +++ b/lib.c @@ -6,32 +6,30 @@ void set_prog(const char *p) { const char *q = strrchr(p, '/'); prog = q ? q + 1 : p; } void vmoan(const char *fmt, va_list ap) - { fprintf(stderr, "%s: ", prog); vfprintf(stderr, fmt, ap); } + { vmoan_syserr(0, fmt, ap); } -void moan(const char *fmt, ...) +void vmoan_syserr(int err, const char *fmt, va_list ap) { - va_list ap; - - va_start(ap, fmt); vmoan(fmt, ap); va_end(ap); + fprintf(stderr, "%s: ", prog); + vfprintf(stderr, fmt, ap); + if (err) fprintf(stderr, ": %s", strerror(errno)); fputc('\n', stderr); } -void bail(const char *fmt, ...) -{ - va_list ap; +void moan(const char *fmt, ...) + { va_list ap; va_start(ap, fmt); vmoan(fmt, ap); va_end(ap); } - va_start(ap, fmt); vmoan(fmt, ap); va_end(ap); - fputc('\n', stderr); - exit(2); -} +void moan_syserr(int err, const char *fmt, ...) + { va_list ap; va_start(ap, fmt); vmoan_syserr(err, fmt, ap); va_end(ap); } + +void bail(const char *fmt, ...) + { va_list ap; va_start(ap, fmt); vmoan(fmt, ap); va_end(ap); exit(2); } void bail_syserr(int err, const char *fmt, ...) { va_list ap; - va_start(ap, fmt); vmoan(fmt, ap); va_end(ap); - if (err) fprintf(stderr, ": %s", strerror(errno)); - fputc('\n', stderr); + va_start(ap, fmt); vmoan_syserr(err, fmt, ap); va_end(ap); exit(2); } diff --git a/lib.h b/lib.h index c3ed607..dc8d7de 100644 --- a/lib.h +++ b/lib.h @@ -65,7 +65,9 @@ extern const char *prog; extern void set_prog(const char *p); extern void vmoan(const char *fmt, va_list ap); +extern void vmoan_syserr(int err, const char *fmt, va_list ap); extern PRINTF_LIKE(1, 2) void moan(const char *fmt, ...); +extern PRINTF_LIKE(2, 3) void moan_syserr(int err, const char *fmt, ...); extern PRINTF_LIKE(1, 2) NORETURN void bail(const char *fmt, ...); extern PRINTF_LIKE(2, 3) NORETURN void bail_syserr(int err, const char *fmt, ...); -- 2.11.0