2002-08-03 Roland McGrath <roland@redhat.com>
authorroland <roland>
Sun, 4 Aug 2002 01:41:44 +0000 (01:41 +0000)
committerroland <roland>
Sun, 4 Aug 2002 01:41:44 +0000 (01:41 +0000)
* locale/localeinfo.h [SHARED]
(_NL_CURRENT_LOCALE): New macro, defined to fetch a tsd value.
(_NL_CURRENT_DATA): Define using that.
(_NL_CURRENT, _NL_CURRENT_WSTR, _NL_CURRENT_WORD): Define using that.
(_NL_CURRENT_DEFINE): Define to empty.
[! SHARED]: Decls of _nl_current_CATEGORY and _nl_current
conditionalized on this.
* locale/xlocale.c (NL_C_INTIIALIZER): New macro,
taking initializer of _nl_C_locobj.
[SHARED] (_nl_global_locale): New variable, using that initializer.
(_nl_C_locobj): Use new macro for initialzier.
* locale/setlocale.c [! SHARED] (_nl_current): Conditionalize on this.
[! SHARED] (CATEGORY_USED): New macro.
[SHARED] (CATEGORY_USED, _nl_C): New macros.
(setdata, setlocale): Use that macro instead of examining _nl_current.
(setdata): Set the slot in _nl_global_locale.
Conditionalize setting of _nl_current on [! SHARED].
* locale/findlocale.c [SHARED] (_nl_C): Define as a macro instead of
declaration as an extern.
* locale/newlocale.c (__newlocale): Use _nl_C_locobj instead of _nl_C.

locale/findlocale.c
locale/xlocale.c

index 004f93b..75784ba 100644 (file)
 #include "../iconv/gconv_charset.h"
 
 
+#ifndef SHARED
 /* Constant data defined in setlocale.c.  */
 extern struct locale_data *const _nl_C[] attribute_hidden;
+#else
+# define _nl_C         (_nl_C_locobj.__locales)
+#endif
 
 
 /* For each category we keep a list of records for the locale files
index 79ec548..daea563 100644 (file)
@@ -32,24 +32,39 @@ extern const char _nl_C_LC_CTYPE_toupper[] attribute_hidden;
 extern const char _nl_C_LC_CTYPE_tolower[] attribute_hidden;
 
 
-struct __locale_struct _nl_C_locobj attribute_hidden =
-  {
-    .__locales =
-    {
-      [LC_CTYPE] = &_nl_C_LC_CTYPE,
-      [LC_NUMERIC] = &_nl_C_LC_NUMERIC,
-      [LC_TIME] = &_nl_C_LC_TIME,
-      [LC_COLLATE] = &_nl_C_LC_COLLATE,
-      [LC_MONETARY] = &_nl_C_LC_MONETARY,
-      [LC_MESSAGES] = &_nl_C_LC_MESSAGES,
-      [LC_PAPER] = &_nl_C_LC_PAPER,
-      [LC_NAME] = &_nl_C_LC_NAME,
-      [LC_ADDRESS] = &_nl_C_LC_ADDRESS,
-      [LC_TELEPHONE] = &_nl_C_LC_TELEPHONE,
-      [LC_MEASUREMENT] = &_nl_C_LC_MEASUREMENT,
-      [LC_IDENTIFICATION] = &_nl_C_LC_IDENTIFICATION
-    },
-    .__ctype_b = (const unsigned short int *) _nl_C_LC_CTYPE_class + 128,
-    .__ctype_tolower = (const int *) _nl_C_LC_CTYPE_tolower + 128,
-    .__ctype_toupper = (const int *) _nl_C_LC_CTYPE_toupper + 128
-  };
+#define NL_C_INITIALIZER                                                     \
+  {                                                                          \
+    .__locales =                                                             \
+    {                                                                        \
+      [LC_CTYPE] = &_nl_C_LC_CTYPE,                                          \
+      [LC_NUMERIC] = &_nl_C_LC_NUMERIC,                                              \
+      [LC_TIME] = &_nl_C_LC_TIME,                                            \
+      [LC_COLLATE] = &_nl_C_LC_COLLATE,                                              \
+      [LC_MONETARY] = &_nl_C_LC_MONETARY,                                    \
+      [LC_MESSAGES] = &_nl_C_LC_MESSAGES,                                    \
+      [LC_PAPER] = &_nl_C_LC_PAPER,                                          \
+      [LC_NAME] = &_nl_C_LC_NAME,                                            \
+      [LC_ADDRESS] = &_nl_C_LC_ADDRESS,                                              \
+      [LC_TELEPHONE] = &_nl_C_LC_TELEPHONE,                                  \
+      [LC_MEASUREMENT] = &_nl_C_LC_MEASUREMENT,                                      \
+      [LC_IDENTIFICATION] = &_nl_C_LC_IDENTIFICATION                         \
+    },                                                                       \
+    .__ctype_b = (const unsigned short int *) _nl_C_LC_CTYPE_class + 128,     \
+    .__ctype_tolower = (const int *) _nl_C_LC_CTYPE_tolower + 128,           \
+    .__ctype_toupper = (const int *) _nl_C_LC_CTYPE_toupper + 128            \
+  }
+
+struct __locale_struct _nl_C_locobj attribute_hidden = NL_C_INITIALIZER;
+
+#ifdef SHARED
+struct __locale_struct _nl_global_locale attribute_hidden = NL_C_INITIALIZER;
+
+# if USE_TLS && HAVE___THREAD
+/* The tsd macros don't permit an initializer.  */
+__thread void *__libc_tsd_LOCALE = &_nl_global_locale;
+# else
+__libc_tsd_define (, LOCALE)
+void *__libc_tsd_LOCALE_data = &_nl_global_locale;
+# endif
+
+#endif