lib.c, lib.h: Introduce `vmoan_syserr' and `moan_syserr'.
authorMark Wooding <mdw@distorted.org.uk>
Sun, 6 Mar 2022 16:21:36 +0000 (16:21 +0000)
committerMark Wooding <mdw@distorted.org.uk>
Sun, 6 Mar 2022 16:21:36 +0000 (16:21 +0000)
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
lib.h

diff --git a/lib.c b/lib.c
index 08616a7..69532e8 100644 (file)
--- 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 (file)
--- 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, ...);