Mercurial > hg > octave-kai > gnulib-hg
changeset 3550:c18604dda2d7
(strerror_r): Do not declare unless !_LIBC.
Do not check for HAVE_DECL_STRERROR_R missing unless STRERROR_R_CHAR_P.
Use strerror_r that is only a macro, even if it is not a function.
(strerror): Check for HAVE_DECL_STRERROR before declaring.
(private_strerror): Use prototypes, not old-style function definition.
(print_errno_message): New function.
Support the POSIX 'int'-flavored strerror_r, as well as the traditional
char*-flavored one.
(error_tail, error, error_at_line): Use it.
author | Jim Meyering <jim@meyering.net> |
---|---|
date | Sun, 21 Oct 2001 07:59:04 +0000 |
parents | a2319cd81db3 |
children | bde8c26243db |
files | lib/error.c |
diffstat | 1 files changed, 51 insertions(+), 48 deletions(-) [+] |
line wrap: on
line diff
--- a/lib/error.c +++ b/lib/error.c @@ -55,13 +55,6 @@ #include "error.h" -#ifndef HAVE_DECL_STRERROR_R -"this configure-time declaration test was not run" -#endif -#if !HAVE_DECL_STRERROR_R -char *strerror_r (); -#endif - #ifndef _ # define _(String) String #endif @@ -102,21 +95,30 @@ #else /* not _LIBC */ +# if !HAVE_DECL_STRERROR_R && STRERROR_R_CHAR_P +# ifndef HAVE_DECL_STRERROR_R +"this configure-time declaration test was not run" +# endif +char *strerror_r (); +# endif + /* The calling program should define program_name and set it to the name of the executing program. */ extern char *program_name; -# ifdef HAVE_STRERROR_R +# if HAVE_STRERROR_R || defined strerror_r # define __strerror_r strerror_r # else # if HAVE_STRERROR -# ifndef strerror /* On some systems, strerror is a macro */ +# ifndef HAVE_DECL_STRERROR +"this configure-time declaration test was not run" +# endif +# if !HAVE_DECL_STRERROR char *strerror (); # endif # else static char * -private_strerror (errnum) - int errnum; +private_strerror (int errnum) { extern char *sys_errlist[]; extern int sys_nerr; @@ -127,9 +129,43 @@ } # define strerror private_strerror # endif /* HAVE_STRERROR */ -# endif /* HAVE_STRERROR_R */ +# endif /* HAVE_STRERROR_R || defined strerror_r */ #endif /* not _LIBC */ +static void +print_errno_message (int errnum) +{ + char const *s; + +#if defined HAVE_STRERROR_R || _LIBC + char errbuf[1024]; +# if STRERROR_R_CHAR_P || _LIBC + s = __strerror_r (errnum, errbuf, sizeof errbuf); +# else + if (__strerror_r (errnum, errbuf, sizeof errbuf) == 0) + s = errbuf; + else + s = 0; +# endif +#else + s = strerror (errnum); +#endif + +#if !_LIBC + if (! s) + s = _("Unknown system error"); +#endif + +#if _LIBC && USE_IN_LIBIO + if (_IO_fwide (stderr, 0) > 0) + { + __fwprintf (stderr, L": %s", s); + return; + } +#endif + + fprintf (stderr, ": %s", s); +} #ifdef VA_START static void @@ -186,20 +222,7 @@ ++error_message_count; if (errnum) - { -# if defined HAVE_STRERROR_R || _LIBC - char errbuf[1024]; - char *s = __strerror_r (errnum, errbuf, sizeof errbuf); -# if _LIBC && USE_IN_LIBIO - if (_IO_fwide (stderr, 0) > 0) - __fwprintf (stderr, L": %s", s); - else -# endif - fprintf (stderr, ": %s", s); -# else - fprintf (stderr, ": %s", strerror (errnum)); -# endif - } + print_errno_message (errnum); # if _LIBC && USE_IN_LIBIO if (_IO_fwide (stderr, 0) > 0) putwc (L'\n', stderr); @@ -261,17 +284,7 @@ ++error_message_count; if (errnum) - { -# if defined HAVE_STRERROR_R || _LIBC - char errbuf[1024]; - /* Don't use __strerror_r's return value because on some systems - (at least DEC UNIX 4.0[A-D]) strerror_r returns `int'. */ - __strerror_r (errnum, errbuf, sizeof errbuf); - fprintf (stderr, ": %s", errbuf); -# else - fprintf (stderr, ": %s", strerror (errnum)); -# endif - } + print_errno_message (errnum); putc ('\n', stderr); fflush (stderr); if (status) @@ -362,17 +375,7 @@ ++error_message_count; if (errnum) - { -# if defined HAVE_STRERROR_R || _LIBC - char errbuf[1024]; - /* Don't use __strerror_r's return value because on some systems - (at least DEC UNIX 4.0[A-D]) strerror_r returns `int'. */ - __strerror_r (errnum, errbuf, sizeof errbuf); - fprintf (stderr, ": %s", errbuf); -# else - fprintf (stderr, ": %s", strerror (errnum)); -# endif - } + print_errno_message (errnum); putc ('\n', stderr); fflush (stderr); if (status)