Make fatal() a bit nicer.

This commit is contained in:
Kris Maglione 2007-07-16 22:16:58 -04:00
parent 460ac864a1
commit f5da49e266

View File

@ -9,30 +9,37 @@
#include <util.h> #include <util.h>
#include <fmt.h> #include <fmt.h>
typedef struct VFmt VFmt;
struct VFmt {
const char *fmt;
va_list args;
};
#ifdef VARARGCK
# pragma varargck type "V" VFmt*
#endif
static int static int
Vfmt(Fmt *f) { Vfmt(Fmt *f) {
char *fmt; VFmt *vf;
va_list ap;
int i; int i;
fmt = va_arg(f->args, char*); vf = va_arg(f->args, VFmt*);
va_copy(ap, va_arg(f->args, va_list)); i = fmtvprint(f, vf->fmt, vf->args);
i = fmtvprint(f, fmt, ap);
va_end(ap);
return i; return i;
} }
void void
fatal(const char *fmt, ...) { fatal(const char *fmt, ...) {
va_list ap; VFmt fp;
fmtinstall('V', Vfmt); fmtinstall('V', Vfmt);
fmtinstall('\001', Vfmt); fmtinstall('\001', Vfmt);
va_start(ap, fmt); fp.fmt = fmt;
fprint(2, "%s: fatal: %V\n", argv0, fmt, ap); va_start(fp.args, fmt);
va_end(ap); fprint(2, "%s: fatal: %V\n", argv0, &fp);
va_end(fp.args);
exit(1); exit(1);
} }