changeset 12567:ceb1562f60a5

regcomp: sync from glibc; always use nl_langinfo * lib/regcomp.c (init_dfa) [!LIBC]: Always use nl_langinfo (CODESET), now that gnulib provides it. Recognize UTF8 as well as UTF-8. * lib/regex_internal.h: Always include <langinfo.h>, now. * modules/regex (Depends-on): Add nl_langinfo.
author Jim Meyering <meyering@redhat.com>
date Mon, 04 Jan 2010 09:07:52 +0100
parents 88db63e00b06
children c97a23e70cb7
files ChangeLog lib/regcomp.c lib/regex_internal.h modules/regex
diffstat 4 files changed, 16 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2010-01-04  Jim Meyering  <meyering@redhat.com>
+
+	regcomp: sync from glibc; always use nl_langinfo
+	* lib/regcomp.c (init_dfa) [!LIBC]: Always use nl_langinfo (CODESET),
+	now that gnulib provides it.  Recognize UTF8 as well as UTF-8.
+	* modules/regex (Depends-on): Add nl_langinfo.
+
 2010-01-04  Eric Blake  <ebb9@byu.net>
 
 	fdopendir: fix configure test
--- a/lib/regcomp.c
+++ b/lib/regcomp.c
@@ -850,6 +850,9 @@
 init_dfa (re_dfa_t *dfa, size_t pat_len)
 {
   __re_size_t table_size;
+#ifndef _LIBC
+  char *codeset_name;
+#endif
 #ifdef RE_ENABLE_I18N
   size_t max_i18n_object_size = MAX (sizeof (wchar_t), sizeof (wctype_t));
 #else
@@ -893,7 +896,9 @@
   dfa->map_notascii = (_NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_MAP_TO_NONASCII)
 		       != 0);
 #else
-  if (strcmp (locale_charset (), "UTF-8") == 0)
+  codeset_name = nl_langinfo (CODESET);
+  if (strcasecmp (codeset_name, "UTF-8") == 0
+      || strcasecmp (codeset_name, "UTF8") == 0)
     dfa->is_utf8 = 1;
 
   /* We check exhaustively in the loop below if this charset is a
--- a/lib/regex_internal.h
+++ b/lib/regex_internal.h
@@ -28,9 +28,8 @@
 #include <stdlib.h>
 #include <string.h>
 
-#ifdef _LIBC
-# include <langinfo.h>
-#else
+#include <langinfo.h>
+#ifndef _LIBC
 # include "localcharset.h"
 #endif
 #if defined HAVE_LOCALE_H || defined _LIBC
--- a/modules/regex
+++ b/modules/regex
@@ -22,6 +22,7 @@
 memmove
 mbrtowc
 mbsinit
+nl_langinfo
 stdbool
 stdint
 ssize_t