This patch adds error() API implementation for non-glibc system C libs Upstream-Status: Pending Signed-off-by: Khem Raj Index: util-linux-2.27.1/tests/helpers/test_uuidd.c =================================================================== --- util-linux-2.27.1.orig/tests/helpers/test_uuidd.c +++ util-linux-2.27.1/tests/helpers/test_uuidd.c @@ -23,7 +23,6 @@ * * make uuidd uuidgen localstatedir=/var */ -#include #include #include #include @@ -39,6 +38,17 @@ #include "xalloc.h" #include "strutils.h" +#ifdef __GLIBC__ +#include +#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; @@ -257,6 +267,56 @@ static void object_dump(size_t idx, obje 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;