mirror of
https://github.com/0intro/wmii
synced 2025-02-08 10:25:09 +03:00
Make fatal() a bit nicer.
This commit is contained in:
parent
460ac864a1
commit
f5da49e266
29
cmd/util.c
29
cmd/util.c
@ -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);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user