This is the mail archive of the
cygwin-cvs@cygwin.com
mailing list for the Cygwin project.
[newlib-cygwin] Implement missing POSIX-1.2008 function strerror_l
- From: Corinna Vinschen <corinna at sourceware dot org>
- To: cygwin-cvs at sourceware dot org, newlib-cvs at sourceware dot org
- Date: 23 Aug 2016 15:55:57 -0000
- Subject: [newlib-cygwin] Implement missing POSIX-1.2008 function strerror_l
https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=463a8afaa58b80926b0236e14a6171f45c1b784f
commit 463a8afaa58b80926b0236e14a6171f45c1b784f
Author: Corinna Vinschen <corinna@vinschen.de>
Date: Tue Aug 23 17:49:24 2016 +0200
Implement missing POSIX-1.2008 function strerror_l
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
Diff:
---
newlib/libc/string/strerror.c | 19 ++++++++++++++++++-
winsup/cygwin/common.din | 1 +
winsup/cygwin/errno.cc | 7 +++++++
3 files changed, 26 insertions(+), 1 deletion(-)
diff --git a/newlib/libc/string/strerror.c b/newlib/libc/string/strerror.c
index fcef33e..49e5f7e 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 8f7a282..7fce587 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 7e07a61..9168e9b 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