err: Add the extended BSD errc/warnc/verrc/warnc stuff
authorAlan Cox <alan@linux.intel.com>
Fri, 2 Jan 2015 22:59:40 +0000 (22:59 +0000)
committerAlan Cox <alan@linux.intel.com>
Fri, 2 Jan 2015 22:59:40 +0000 (22:59 +0000)
Library/include/err.h
Library/libs/err.c

index 6df9624..d77f95e 100644 (file)
@@ -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
index f631af7..a435995 100644 (file)
@@ -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);
 }