Implement missing POSIX-1.2008 function strerror_l

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
Corinna Vinschen 2016-08-23 17:49:24 +02:00
parent 80e0ad1e77
commit 463a8afaa5
3 changed files with 26 additions and 1 deletions

View File

@ -7,14 +7,18 @@
/*
FUNCTION
<<strerror>>---convert error number to string
<<strerror>>, <<strerror_l>>---convert error number to string
INDEX
strerror
INDEX
strerror_l
ANSI_SYNOPSIS
#include <string.h>
char *strerror(int <[errnum]>);
char *strerror_l(int <[errnum]>, locale_t locale);
char *_strerror_r(struct _reent <[ptr]>, int <[errnum]>,
int <[internal]>, int *<[error]>);
@ -29,6 +33,10 @@ string. The value of <[errnum]> is usually a copy of <<errno>>.
If <<errnum>> is not a known error number, the result points to an
empty string.
<<strftime_l>> is like <<strftime>> but creates a string in a format
as expected in locale <[locale]>. If <[locale]> is LC_GLOBAL_LOCALE or
not a valid locale object, the behaviour is undefined.
This implementation of <<strerror>> prints out the following strings
for each of the values defined in `<<errno.h>>':
@ -330,6 +338,8 @@ PORTABILITY
ANSI C requires <<strerror>>, but does not specify the strings used
for each error number.
<<strerror_l>> is POSIX-1.2008.
Although this implementation of <<strerror>> is reentrant (depending
on <<_user_strerror>>), ANSI C declares that subsequent calls to
<<strerror>> may overwrite the result string; therefore portable
@ -893,3 +903,10 @@ _DEFUN(strerror, (int),
{
return _strerror_r (_REENT, errnum, 0, NULL);
}
char *
strerror_l (int errnum, locale_t locale)
{
/* We don't support per-locale error messages. */
return _strerror_r (_REENT, errnum, 0, NULL);
}

View File

@ -1345,6 +1345,7 @@ strcpy NOSIGFE
strcspn NOSIGFE
strdup SIGFE
strerror SIGFE
strerror_l SIGFE
strerror_r SIGFE
strfmon SIGFE
strfmon_l SIGFE

View File

@ -403,6 +403,13 @@ strerror (int errnum)
return result;
}
extern "C" char *
strerror_l (int errnum, locale_t locale)
{
/* We don't provide localized system error messages (yet?). */
return strerror (errnum);
}
/* Newlib's <string.h> provides declarations for two strerror_r
variants, according to preprocessor feature macros. However, it
returns "" instead of "Unknown error ...", so we override both