Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2016-08-23 18:49:24 +0300
committerCorinna Vinschen <corinna@vinschen.de>2016-08-23 18:51:14 +0300
commit463a8afaa58b80926b0236e14a6171f45c1b784f (patch)
tree6ef3bc150434889e49388b8520ed4ed95095b7cc
parent80e0ad1e77a9365b85ffda62aa1471e5c8768743 (diff)
Implement missing POSIX-1.2008 function strerror_l
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
-rw-r--r--newlib/libc/string/strerror.c19
-rw-r--r--winsup/cygwin/common.din1
-rw-r--r--winsup/cygwin/errno.cc7
3 files changed, 26 insertions, 1 deletions
diff --git a/newlib/libc/string/strerror.c b/newlib/libc/string/strerror.c
index fcef33e0e..49e5f7e64 100644
--- a/newlib/libc/string/strerror.c
+++ b/newlib/libc/string/strerror.c
@@ -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);
+}
diff --git a/winsup/cygwin/common.din b/winsup/cygwin/common.din
index 8f7a282f4..7fce58719 100644
--- a/winsup/cygwin/common.din
+++ b/winsup/cygwin/common.din
@@ -1345,6 +1345,7 @@ strcpy NOSIGFE
strcspn NOSIGFE
strdup SIGFE
strerror SIGFE
+strerror_l SIGFE
strerror_r SIGFE
strfmon SIGFE
strfmon_l SIGFE
diff --git a/winsup/cygwin/errno.cc b/winsup/cygwin/errno.cc
index 7e07a6178..9168e9b4d 100644
--- a/winsup/cygwin/errno.cc
+++ b/winsup/cygwin/errno.cc
@@ -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