From: Alan Cox Date: Fri, 2 Jan 2015 22:59:40 +0000 (+0000) Subject: err: Add the extended BSD errc/warnc/verrc/warnc stuff X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=22e16b5c0ca498a97e13d4d7dae940531db19075;p=FUZIX.git err: Add the extended BSD errc/warnc/verrc/warnc stuff --- diff --git a/Library/include/err.h b/Library/include/err.h index 6df96247..d77f95e4 100644 --- a/Library/include/err.h +++ b/Library/include/err.h @@ -5,13 +5,17 @@ /* BSD err functionality */ extern void err(int eval, const char *fmt, ...); +extern void errc(int eval, int code, const char *fmt, ...); extern void errx(int eval, const char *fmt, ...); extern void warn(const char *fmt, ...); +extern void warnc(int code, const char *fmt, ...); extern void warnx(const char *fmt, ...); extern void verr(int eval, const char *fmt, va_list args); +extern void verrc(int eval, int code, const char *fmt, va_list args); extern void verrx(int eval, const char *fmt, va_list args); extern void vwarn(const char *fmt, va_list args); +extern void vwarnc(int code, const char *fmt, va_list args); extern void vwarnx(const char *fmt, va_list args); #endif diff --git a/Library/libs/err.c b/Library/libs/err.c index f631af79..a4359954 100644 --- a/Library/libs/err.c +++ b/Library/libs/err.c @@ -6,44 +6,63 @@ extern char **__argv; -static void _vdo(int flags, const char *fmt, va_list args) +static void _vdo(int err, int flags, const char *fmt, va_list args) { fprintf(stderr, "%s", __argv[0]); if (fmt) { vfprintf(stderr, fmt, args); if (flags & 1) - fprintf(stderr, ": %s", strerror(errno)); + fprintf(stderr, ": %s", strerror(err)); fputc('\n', stderr); } } void verr(int eval, const char *fmt, va_list args) { - _vdo(1, fmt, args); + _vdo(errno, 1, fmt, args); + exit(eval); +} + +void verrc(int err, int eval, const char *fmt, va_list args) +{ + _vdo(err, 1, fmt, args); exit(eval); } void verrx(int eval, const char *fmt, va_list args) { - _vdo(0, fmt, args); + _vdo(errno, 0, fmt, args); exit(eval); } void vwarn(const char *fmt, va_list args) { - _vdo(1, fmt, args); + _vdo(errno, 1, fmt, args); +} + +void vwarnc(int err, const char *fmt, va_list args) +{ + _vdo(err, 1, fmt, args); } void vwarnx(const char *fmt, va_list args) { - _vdo(0, fmt, args); + _vdo(errno, 0, fmt, args); } void err(int eval, const char *fmt, ...) { va_list ptr; va_start(ptr, fmt); - _vdo(1, fmt, ptr); + _vdo(errno, 1, fmt, ptr); + exit(eval); +} + +void errc(int eval, int err, const char *fmt, ...) +{ + va_list ptr; + va_start(ptr, fmt); + _vdo(err, 1, fmt, ptr); exit(eval); } @@ -51,7 +70,7 @@ void errx(int eval, const char *fmt, ...) { va_list ptr; va_start(ptr, fmt); - _vdo(0, fmt, ptr); + _vdo(errno, 0, fmt, ptr); exit(eval); } @@ -59,13 +78,20 @@ void warn(const char *fmt, ...) { va_list ptr; va_start(ptr, fmt); - _vdo(1, fmt, ptr); + _vdo(errno, 1, fmt, ptr); +} + +void warnc(int err, const char *fmt, ...) +{ + va_list ptr; + va_start(ptr, fmt); + _vdo(err, 1, fmt, ptr); } void warnx(const char *fmt, ...) { va_list ptr; va_start(ptr, fmt); - _vdo(0, fmt, ptr); + _vdo(errno, 0, fmt, ptr); }