{ 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);
}
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, ...);