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 FUNCTION
<<strerror>>---convert error number to string <<strerror>>, <<strerror_l>>---convert error number to string
INDEX INDEX
strerror strerror
INDEX
strerror_l
ANSI_SYNOPSIS ANSI_SYNOPSIS
#include <string.h> #include <string.h>
char *strerror(int <[errnum]>); char *strerror(int <[errnum]>);
char *strerror_l(int <[errnum]>, locale_t locale);
char *_strerror_r(struct _reent <[ptr]>, int <[errnum]>, char *_strerror_r(struct _reent <[ptr]>, int <[errnum]>,
int <[internal]>, int *<[error]>); 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 If <<errnum>> is not a known error number, the result points to an
empty string. 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 This implementation of <<strerror>> prints out the following strings
for each of the values defined in `<<errno.h>>': 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 ANSI C requires <<strerror>>, but does not specify the strings used
for each error number. for each error number.
<<strerror_l>> is POSIX-1.2008.
Although this implementation of <<strerror>> is reentrant (depending Although this implementation of <<strerror>> is reentrant (depending
on <<_user_strerror>>), ANSI C declares that subsequent calls to on <<_user_strerror>>), ANSI C declares that subsequent calls to
<<strerror>> may overwrite the result string; therefore portable <<strerror>> may overwrite the result string; therefore portable
@ -893,3 +903,10 @@ _DEFUN(strerror, (int),
{ {
return _strerror_r (_REENT, errnum, 0, NULL); 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 strcspn NOSIGFE
strdup SIGFE strdup SIGFE
strerror SIGFE strerror SIGFE
strerror_l SIGFE
strerror_r SIGFE strerror_r SIGFE
strfmon SIGFE strfmon SIGFE
strfmon_l SIGFE strfmon_l SIGFE

View File

@ -403,6 +403,13 @@ strerror (int errnum)
return result; 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 /* Newlib's <string.h> provides declarations for two strerror_r
variants, according to preprocessor feature macros. However, it variants, according to preprocessor feature macros. However, it
returns "" instead of "Unknown error ...", so we override both returns "" instead of "Unknown error ...", so we override both