100 lines
2.3 KiB
Diff
100 lines
2.3 KiB
Diff
This patch adds error() API implementation for non-glibc system C libs
|
|
|
|
Upstream-Status: Pending
|
|
Signed-off-by: Khem Raj <raj.khem@gmail.com>
|
|
|
|
---
|
|
misc-utils/test_uuidd.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++-
|
|
1 file changed, 61 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/misc-utils/test_uuidd.c b/misc-utils/test_uuidd.c
|
|
index 36f3b3d..7d579ce 100644
|
|
--- a/misc-utils/test_uuidd.c
|
|
+++ b/misc-utils/test_uuidd.c
|
|
@@ -23,7 +23,6 @@
|
|
*
|
|
* make uuidd uuidgen localstatedir=/var
|
|
*/
|
|
-#include <error.h>
|
|
#include <pthread.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
@@ -38,6 +37,17 @@
|
|
#include "xalloc.h"
|
|
#include "strutils.h"
|
|
|
|
+#ifdef __GLIBC__
|
|
+#include <error.h>
|
|
+#else
|
|
+extern void (*error_print_progname)(void);
|
|
+extern unsigned int error_message_count;
|
|
+extern int error_one_per_line;
|
|
+
|
|
+void error(int, int, const char *, ...);
|
|
+void error_at_line(int, int, const char *, unsigned int, const char *, ...);
|
|
+#endif
|
|
+
|
|
#define LOG(level,args) if (loglev >= level) { fprintf args; }
|
|
|
|
size_t nprocesses = 4;
|
|
@@ -256,6 +266,56 @@ static void object_dump(size_t idx, object_t *obj)
|
|
fprintf(stderr, "}\n");
|
|
}
|
|
|
|
+#ifndef __GLIBC__
|
|
+extern char *__progname;
|
|
+
|
|
+void (*error_print_progname)(void) = 0;
|
|
+unsigned int error_message_count = 0;
|
|
+int error_one_per_line = 0;
|
|
+
|
|
+static void eprint(int status, int e, const char *file, unsigned int line, const char *fmt, va_list ap)
|
|
+{
|
|
+ if (file && error_one_per_line) {
|
|
+ static const char *oldfile;
|
|
+ static unsigned int oldline;
|
|
+ if (line == oldline && strcmp(file, oldfile) == 0)
|
|
+ return;
|
|
+ oldfile = file;
|
|
+ oldline = line;
|
|
+ }
|
|
+ if (error_print_progname)
|
|
+ error_print_progname();
|
|
+ else
|
|
+ fprintf(stderr, "%s: ", __progname);
|
|
+ if (file)
|
|
+ fprintf(stderr, "%s:%u: ", file, line);
|
|
+ vfprintf(stderr, fmt, ap);
|
|
+ if (e)
|
|
+ fprintf(stderr, ": %s", strerror(e));
|
|
+ putc('\n', stderr);
|
|
+ fflush(stderr);
|
|
+ error_message_count++;
|
|
+ if (status)
|
|
+ exit(status);
|
|
+}
|
|
+
|
|
+void error(int status, int e, const char *fmt, ...)
|
|
+{
|
|
+ va_list ap;
|
|
+ va_start(ap,fmt);
|
|
+ eprint(status, e, 0, 0, fmt, ap);
|
|
+ va_end(ap);
|
|
+}
|
|
+
|
|
+void error_at_line(int status, int e, const char *file, unsigned int line, const char *fmt, ...)
|
|
+{
|
|
+ va_list ap;
|
|
+ va_start(ap,fmt);
|
|
+ eprint(status, e, file, line, fmt, ap);
|
|
+ va_end(ap);
|
|
+}
|
|
+#endif /* __GLIBC__ */
|
|
+
|
|
int main(int argc, char *argv[])
|
|
{
|
|
size_t i, nfailed = 0, nignored = 0;
|
|
--
|
|
2.8.3
|
|
|