From: Guillem Jover Date: Tue, 6 Aug 2019 13:37:43 +0000 (+0200) Subject: err: Rewrite warnc() and errc() family functions to be standalone X-Git-Tag: 0.10.0~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9628798d7d02e5f93b8dea02677676449a1ccd6c;p=thirdparty%2Flibbsd.git err: Rewrite warnc() and errc() family functions to be standalone Do not depend on the system vwarn() and verr() functions to implement the *c() variants, as the system might actually lack any of the BSD extensions. --- diff --git a/COPYING b/COPYING index 3e7c7cc..333ed40 100644 --- a/COPYING +++ b/COPYING @@ -81,7 +81,7 @@ Files: src/fgetln.c src/progname.c Copyright: - Copyright © 2005, 2008-2012 Guillem Jover + Copyright © 2005, 2008-2012, 2019 Guillem Jover Copyright © 2005 Hector Garcia Alvarez Copyright © 2005 Aurelien Jarno Copyright © 2006 Robert Millan diff --git a/include/bsd/err.h b/include/bsd/err.h index ff37e55..9e83260 100644 --- a/include/bsd/err.h +++ b/include/bsd/err.h @@ -43,15 +43,15 @@ #include __BEGIN_DECLS -void warnc(int code, const char *format, ...) - __printflike(2, 3); void vwarnc(int code, const char *format, va_list ap) __printflike(2, 0); +void warnc(int code, const char *format, ...) + __printflike(2, 3); -void errc(int status, int code, const char *format, ...) - __printflike(3, 4) __dead2; void verrc(int status, int code, const char *format, va_list ap) __printflike(3, 0) __dead2; +void errc(int status, int code, const char *format, ...) + __printflike(3, 4) __dead2; __END_DECLS #endif diff --git a/src/err.c b/src/err.c index 4e50510..45f1b61 100644 --- a/src/err.c +++ b/src/err.c @@ -1,6 +1,6 @@ /* * Copyright © 2006 Robert Millan - * Copyright © 2011 Guillem Jover + * Copyright © 2011, 2019 Guillem Jover * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -26,8 +26,21 @@ */ #include -#include +#include #include +#include +#include + +void +vwarnc(int code, const char *format, va_list ap) +{ + fprintf(stderr, "%s: ", getprogname()); + if (format) { + vfprintf(stderr, format, ap); + fprintf(stderr, ": "); + } + fprintf(stderr, "%s\n", strerror(code)); +} void warnc(int code, const char *format, ...) @@ -40,13 +53,15 @@ warnc(int code, const char *format, ...) } void -vwarnc(int code, const char *format, va_list ap) +verrc(int status, int code, const char *format, va_list ap) { - int tmp = errno; - - errno = code; - vwarn(format, ap); - errno = tmp; + fprintf(stderr, "%s: ", getprogname()); + if (format) { + vfprintf(stderr, format, ap); + fprintf(stderr, ": "); + } + fprintf(stderr, "%s\n", strerror(code)); + exit(status); } void @@ -58,10 +73,3 @@ errc(int status, int code, const char *format, ...) verrc(status, code, format, ap); va_end(ap); } - -void -verrc(int status, int code, const char *format, va_list ap) -{ - errno = code; - verr(status, format, ap); -}