summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuillem Jover <guillem@hadrons.org>2019-08-06 15:37:43 +0200
committerGuillem Jover <guillem@hadrons.org>2019-08-08 03:47:05 +0200
commit9628798d7d02e5f93b8dea02677676449a1ccd6c (patch)
tree14257edb56189317ca0f6fb804e24506dc94bf63
parentf34a5f71d92f5625875f16a883790de75dd4477d (diff)
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 <err.h> BSD extensions.
-rw-r--r--COPYING2
-rw-r--r--include/bsd/err.h8
-rw-r--r--src/err.c38
3 files changed, 28 insertions, 20 deletions
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 <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
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 <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
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 <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
@@ -26,8 +26,21 @@
*/
#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);
-}