commit b80ac849cae653425979baf8a29c800412ca7aec Author: Isaac Dunham Date: Thu Jun 12 19:44:01 2014 -0700 Implement (v){warn,err}c interfaces. These are a newish BSD addition to allow using error sources other than errno with the err.h interface. diff --git a/include/err.h b/include/err.h index 9f5cb6b..0ae6036 100644 --- a/include/err.h +++ b/include/err.h @@ -12,11 +12,15 @@ void warn(const char *, ...); void vwarn(const char *, va_list); void warnx(const char *, ...); void vwarnx(const char *, va_list); +void warnc(int error, const char *fmt, ...); +void vwarnc(int error, const char *fmt, va_list ap); _Noreturn void err(int, const char *, ...); _Noreturn void verr(int, const char *, va_list); _Noreturn void errx(int, const char *, ...); _Noreturn void verrx(int, const char *, va_list); +_Noreturn void errc(int status, int error, const char *fmt, ...); +_Noreturn void verrc(int status, int error, const char *fmt, va_list ap); #ifdef __cplusplus } diff --git a/src/legacy/errc.c b/src/legacy/errc.c new file mode 100644 index 0000000..084a761 --- /dev/null +++ b/src/legacy/errc.c @@ -0,0 +1,39 @@ +#include +#include +#include +#include +#include + +extern char *__progname; + +void vwarnc(int error, const char *fmt, va_list ap) +{ + fprintf (stderr, "%s: ", __progname); + if (fmt) { + vfprintf(stderr, fmt, ap); + fputs (": ", stderr); + } + fputs(strerror(error), stderr); +} + +void warnc(int error, const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + vwarnc(error, fmt, ap); + va_end(ap); +} + +_Noreturn void verrc(int status, int error, const char *fmt, va_list ap) +{ + vwarnc(error, fmt, ap); + exit(status); +} + +_Noreturn void errc(int status, int error, const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + verrc(status, error, fmt, ap); + va_end(ap); +}