diff options
Diffstat (limited to 'libc/misc')
| -rw-r--r-- | libc/misc/error/Makefile | 2 | ||||
| -rw-r--r-- | libc/misc/error/err.c | 110 | ||||
| -rw-r--r-- | libc/misc/error/error.c | 75 | 
3 files changed, 111 insertions, 76 deletions
diff --git a/libc/misc/error/Makefile b/libc/misc/error/Makefile index 754010688..880fd58df 100644 --- a/libc/misc/error/Makefile +++ b/libc/misc/error/Makefile @@ -19,7 +19,7 @@  TOPDIR=../../../  include $(TOPDIR)Rules.mak -CSRC=error.c +CSRC=error.c err.c  COBJS=$(patsubst %.c,%.o, $(CSRC))  OBJS=$(COBJS) diff --git a/libc/misc/error/err.c b/libc/misc/error/err.c new file mode 100644 index 000000000..5c53e545f --- /dev/null +++ b/libc/misc/error/err.c @@ -0,0 +1,110 @@ +/* Copyright (C) 2004       Manuel Novoa III    <mjn3@codepoet.org> + * + * GNU Library General Public License (LGPL) version 2 or later. + * + * Dedicated to Toni.  See uClibc/DEDICATION.mjn3 for details. + */ + +#define _GNU_SOURCE +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <stdarg.h> +#include <errno.h> +#include <err.h> +#ifdef __UCLIBC_HAS_THREADS__ +#include <pthread.h> +#endif + +#ifdef __UCLIBC_MJN3_ONLY__ +#warning REMINDER: Need a centralized __progname prototype. +#warning REMINDER: Deal with wide oriented stderr case. +#endif +extern const char *__progname; + +static void vwarn_work(const char *format, va_list args, int showerr) +{ +	/*                         0123 45678 9 a b*/ +	static const char fmt[] = "%s: \0: %s\n\0\n"; +	const char *f; +	char buf[64]; +	__STDIO_AUTO_THREADLOCK_VAR; + +	/* Do this first, in case something below changes errno. */ +	f = fmt + 11;				/* At 11. */ +	if (showerr) { +		f -= 4;					/* At 7. */ +		_susv3_strerror_r(errno, buf, sizeof(buf)); +	} + +	__STDIO_AUTO_THREADLOCK(stderr); + +	fprintf(stderr, fmt, __progname); +	if (format) { +		vfprintf(stderr, format, args); +		f -= 2;					/* At 5 (showerr) or 9. */ +	} +	fprintf(stderr, f, buf); + +	__STDIO_AUTO_THREADUNLOCK(stderr); +} + +extern void warn(const char *format, ...) +{ +	va_list args; + +	va_start(args, format); +	vwarn(format, args); +	va_end(args); +} + +extern void vwarn(const char *format, va_list args) +{ +	vwarn_work(format, args, 1); +} + +extern void warnx(const char *format, ...) +{ +	va_list args; + +	va_start(args, format); +	vwarnx(format, args); +	va_end(args); +} + +extern void vwarnx(const char *format, va_list args) +{ +	vwarn_work(format, args, 0); +} + +extern void err(int status, const char *format, ...) +{ +	va_list args; + +	va_start(args, format); +	verr(status, format, args); +	/* This should get optimized away.  We'll leave it now for safety. */ +	va_end(args); +} + +extern void verr(int status, const char *format, va_list args) +{ +	vwarn(format, args); +	exit(status); +} + +extern void errx(int status, const char *format, ...) +{ +	va_list args; + +	va_start(args, format); +	verrx(status, format, args); +	/* This should get optimized away.  We'll leave it now for safety. */ +	va_end(args); +} + +extern void verrx(int status, const char *format, va_list args) +{ +	vwarnx(format, args); +	exit(status); +} diff --git a/libc/misc/error/error.c b/libc/misc/error/error.c index 60a9d8af8..eddf24587 100644 --- a/libc/misc/error/error.c +++ b/libc/misc/error/error.c @@ -99,78 +99,3 @@ void __error_at_line (int status, int errnum, const char *file_name,  #undef error_at_line  weak_alias (__error, error)  weak_alias (__error_at_line, error_at_line) - - -     -#include "err.h" -#include "errno.h" - -/* NORETURN */ -void verr (int status, const char *message, va_list args) -{ -    fflush (stdout); - -    vfprintf (stderr, message, args); -    if (errno) { -        fprintf (stderr, ": %s", strerror (errno)); -    } -    putc ('\n', stderr); -    if (status) -        exit (status); -} - -/* NORETURN */ -void verrx (int status, const char *message, va_list args) -{ -    fflush (stdout); - -    vfprintf (stderr, message, args); -    if (status) -        exit (status); -} - -void vwarn (const char *message, va_list args) -{ -    verr (0, message, args); -} - -void vwarnx (const char *message, va_list args) -{ -    verrx (0, message, args); -} - -void err (int status, const char *message, ...) -{ -    va_list args; - -    va_start (args, message); -    verr (status, message, args); -    va_end (args); -} - -void errx (int status, const char *message, ...) -{ -    va_list args; - -    va_start (args, message); -    verrx (status, message, args); -    va_end (args); -} - -void warn (const char *message, ...) -{ -    va_list args; - -    va_start (args, message); -    verr (0, message, args); -    va_end (args); -} - -void warnx (const char *message, ...) -{ -    va_list args; - -    va_start (args, message); -    verrx (0, message, args); -    va_end (args); -}  | 
