]> git.ipfire.org Git - thirdparty/libbsd.git/commitdiff
err: Rewrite warnc() and errc() family functions to be standalone
authorGuillem Jover <guillem@hadrons.org>
Tue, 6 Aug 2019 13:37:43 +0000 (15:37 +0200)
committerGuillem Jover <guillem@hadrons.org>
Thu, 8 Aug 2019 01:47:05 +0000 (03:47 +0200)
Do not depend on the system vwarn() and verr() functions to implement
the *c() variants, as the system might actually lack any of the <err.h>
BSD extensions.

COPYING
include/bsd/err.h
src/err.c

diff --git a/COPYING b/COPYING
index 3e7c7cc5566ed1c7e661b41952b436f516ff3ecf..333ed406407710754cb290c5fb2c49742740223b 100644 (file)
--- a/COPYING
+++ b/COPYING
@@ -81,7 +81,7 @@ Files:
  src/fgetln.c
  src/progname.c
 Copyright:
- Copyright © 2005, 2008-2012 Guillem Jover <guillem@hadrons.org>
+ Copyright © 2005, 2008-2012, 2019 Guillem Jover <guillem@hadrons.org>
  Copyright © 2005 Hector Garcia Alvarez
  Copyright © 2005 Aurelien Jarno
  Copyright © 2006 Robert Millan
index ff37e5582579494959ca80f8e7a4723d2fb5b8d6..9e83260795598f348581c24c7a0f75c6d5c665b5 100644 (file)
 #include <stdarg.h>
 
 __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
index 4e505105bb5b88cdc8e13b0cdc60cabe131f3526..45f1b61ede620ebd1ae019c6f56a1cd5dd833b91 100644 (file)
--- a/src/err.c
+++ b/src/err.c
@@ -1,6 +1,6 @@
 /*
  * Copyright © 2006 Robert Millan
- * Copyright © 2011 Guillem Jover <guillem@hadrons.org>
+ * Copyright © 2011, 2019 Guillem Jover <guillem@hadrons.org>
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  */
 
 #include <err.h>
-#include <errno.h>
+#include <string.h>
 #include <stdarg.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+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);
-}