summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Blake <eblake@redhat.com>2017-01-19 14:26:30 -0600
committerEric Blake <eblake@redhat.com>2017-01-20 09:29:39 -0600
commitbb276b416952b938c04d4c5bfa8f48bb00fc1ac1 (patch)
treeaba6979e4410cd82b91524753aed7ff5a490a1d5
parentec01e68672ac3c76c6cfad2479bb9db85214d597 (diff)
downloadgnulib-bb276b416952b938c04d4c5bfa8f48bb00fc1ac1.tar.gz
localename: port to cygwin 2.6
Cygwin 2.6 introduced uselocale() and thread-local locales in general, but lacks any way to get at the name of each portion of a locale_t object short of peeking behind an opaque object. Cygwin has just been patched to add NL_LOCALE_NAME() patterned after glibc's extension of the same name[1], but as that version of Cygwin has not yet been released, we might as well work around it in the meantime. [1] https://sourceware.org/ml/newlib/2017/msg00071.html * lib/localename.c (gl_locale_name_thread_unsafe): Add clause for Cygwin. * modules/localename (Depends-on): Add extensions, since NL_LOCALE_NAME() is not visible without it. Signed-off-by: Eric Blake <eblake@redhat.com>
-rw-r--r--ChangeLog8
-rw-r--r--lib/localename.c13
-rw-r--r--modules/localename1
3 files changed, 22 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index e4339fc948..41fbf4a31d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2017-01-20 Eric Blake <eblake@redhat.com>
+
+ localename: port to cygwin 2.6
+ * lib/localename.c (gl_locale_name_thread_unsafe): Add clause for
+ Cygwin.
+ * modules/localename (Depends-on): Add extensions, since
+ NL_LOCALE_NAME() is not visible without it.
+
2017-01-17 Pádraig Brady <P@draigBrady.com>
parse-datetime: fix dependence on AC_PROG_SED
diff --git a/lib/localename.c b/lib/localename.c
index 33879e9df2..89ce88974f 100644
--- a/lib/localename.c
+++ b/lib/localename.c
@@ -2734,6 +2734,19 @@ gl_locale_name_thread_unsafe (int category, const char *categoryname)
# elif defined __sun && HAVE_GETLOCALENAME_L
/* Solaris >= 12. */
return getlocalename_l (category, thread_locale);
+# elif defined __CYGWIN__
+ /* Cygwin < 2.6 lacks uselocale and thread-local locales altogether.
+ Cygwin <= 2.6.1 lacks NL_LOCALE_NAME, requiring peeking inside
+ an opaque struct. */
+# ifdef NL_LOCALE_NAME
+ return nl_langinfo_l (NL_LOCALE_NAME (category), thread_locale);
+# else
+ /* FIXME: Remove when we can assume new-enough Cygwin. */
+ struct __locale_t {
+ char categories[7][32];
+ };
+ return ((struct __locale_t *) thread_locale)->categories[category];
+# endif
# elif defined __ANDROID__
return MB_CUR_MAX == 4 ? "C.UTF-8" : "C";
# endif
diff --git a/modules/localename b/modules/localename
index 193c7bd754..ec6cd1cc3b 100644
--- a/modules/localename
+++ b/modules/localename
@@ -9,6 +9,7 @@ m4/intlmacosx.m4
m4/lcmessage.m4
Depends-on:
+extensions
flexmember
strdup
lock