Module Name:    src
Committed By:   joerg
Date:           Sun Aug 18 20:03:48 UTC 2013

Modified Files:
        src/lib/libc/citrus: citrus_lc_ctype.c
        src/lib/libc/locale: Makefile.inc global_locale.c multibyte.h
            multibyte_amd1.c multibyte_c90.c nb_lc_messages_misc.h
            nb_lc_monetary_misc.h nb_lc_numeric_misc.h nb_lc_template.h
            nb_lc_template_decl.h nb_lc_time_misc.h runetable.c
            runetype_local.h
        src/sys/sys: localedef.h
Removed Files:
        src/lib/libc/locale: _def_messages.c _def_monetary.c _def_numeric.c
            _def_time.c

Log Message:
Rename fixup to update_global to better reflect the purpose.
Remove the various Current pointers, they are implementation internals
that shouldn't be leaked. Remove _CATEGORY_DEFAULT related handling and
directly pick the implemenation pointer from the C locale.
Merge the C locale data into global_locale.c with the exception of
_DefaultRuneLocale. Mark that one hidden. Move _RUNE_LOCALE and
_CITRUS_CTYPE into multibyte.h and pick up the correct rl_citrus_ctype
for non-default locales.


To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 src/lib/libc/citrus/citrus_lc_ctype.c
cvs rdiff -u -r1.63 -r1.64 src/lib/libc/locale/Makefile.inc
cvs rdiff -u -r1.6 -r0 src/lib/libc/locale/_def_messages.c \
    src/lib/libc/locale/_def_numeric.c
cvs rdiff -u -r1.8 -r0 src/lib/libc/locale/_def_monetary.c
cvs rdiff -u -r1.11 -r0 src/lib/libc/locale/_def_time.c
cvs rdiff -u -r1.17 -r1.18 src/lib/libc/locale/global_locale.c
cvs rdiff -u -r1.5 -r1.6 src/lib/libc/locale/multibyte.h
cvs rdiff -u -r1.13 -r1.14 src/lib/libc/locale/multibyte_amd1.c \
    src/lib/libc/locale/runetype_local.h
cvs rdiff -u -r1.11 -r1.12 src/lib/libc/locale/multibyte_c90.c
cvs rdiff -u -r1.3 -r1.4 src/lib/libc/locale/nb_lc_messages_misc.h \
    src/lib/libc/locale/nb_lc_monetary_misc.h \
    src/lib/libc/locale/nb_lc_numeric_misc.h
cvs rdiff -u -r1.6 -r1.7 src/lib/libc/locale/nb_lc_template.h
cvs rdiff -u -r1.2 -r1.3 src/lib/libc/locale/nb_lc_template_decl.h
cvs rdiff -u -r1.4 -r1.5 src/lib/libc/locale/nb_lc_time_misc.h
cvs rdiff -u -r1.28 -r1.29 src/lib/libc/locale/runetable.c
cvs rdiff -u -r1.9 -r1.10 src/sys/sys/localedef.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/lib/libc/citrus/citrus_lc_ctype.c
diff -u src/lib/libc/citrus/citrus_lc_ctype.c:1.11 src/lib/libc/citrus/citrus_lc_ctype.c:1.12
--- src/lib/libc/citrus/citrus_lc_ctype.c:1.11	Sat Apr 13 10:21:20 2013
+++ src/lib/libc/citrus/citrus_lc_ctype.c	Sun Aug 18 20:03:48 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: citrus_lc_ctype.c,v 1.11 2013/04/13 10:21:20 joerg Exp $ */
+/* $NetBSD: citrus_lc_ctype.c,v 1.12 2013/08/18 20:03:48 joerg Exp $ */
 
 /*-
  * Copyright (c)2008 Citrus Project,
@@ -28,7 +28,7 @@
 
 #include <sys/cdefs.h>
 #if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: citrus_lc_ctype.c,v 1.11 2013/04/13 10:21:20 joerg Exp $");
+__RCSID("$NetBSD: citrus_lc_ctype.c,v 1.12 2013/08/18 20:03:48 joerg Exp $");
 #endif /* LIBC_SCCS and not lint */
 
 #include "reentrant.h"
@@ -115,7 +115,7 @@ _PREFIX(build_cache)(struct _locale_cach
 }
 
 static __inline void
-_PREFIX(fixup)(_RuneLocale *data)
+_PREFIX(update_global)(_RuneLocale *data)
 {
 	_DIAGASSERT(data != NULL);
 
@@ -123,7 +123,6 @@ _PREFIX(fixup)(_RuneLocale *data)
 	_ctype_tab_ = data->rl_ctype_tab;
 	_tolower_tab_ = data->rl_tolower_tab;
 	_toupper_tab_ = data->rl_toupper_tab;
-	_CurrentRuneLocale = data;
 
 #ifdef __BUILD_LEGACY
 	_ctype_ = data->rl_compat_bsdctype;
@@ -135,6 +134,5 @@ _PREFIX(fixup)(_RuneLocale *data)
  */
 #define _CATEGORY_ID		LC_CTYPE
 #define _CATEGORY_NAME		"LC_CTYPE"
-#define _CATEGORY_DEFAULT	_DefaultRuneLocale
 
 #include "nb_lc_template.h"

Index: src/lib/libc/locale/Makefile.inc
diff -u src/lib/libc/locale/Makefile.inc:1.63 src/lib/libc/locale/Makefile.inc:1.64
--- src/lib/libc/locale/Makefile.inc:1.63	Fri May 17 12:55:57 2013
+++ src/lib/libc/locale/Makefile.inc	Sun Aug 18 20:03:48 2013
@@ -1,11 +1,10 @@
 #	from: @(#)Makefile.inc	5.1 (Berkeley) 2/18/91
-#	$NetBSD: Makefile.inc,v 1.63 2013/05/17 12:55:57 joerg Exp $
+#	$NetBSD: Makefile.inc,v 1.64 2013/08/18 20:03:48 joerg Exp $
 
 # locale sources
 .PATH: ${ARCHDIR}/locale ${.CURDIR}/locale
 
-SRCS+=	_def_messages.c _def_monetary.c _def_numeric.c _def_time.c \
-	setlocale.c __mb_cur_max.c \
+SRCS+=	setlocale.c __mb_cur_max.c \
 	duplocale.c global_locale.c fix_grouping.c \
 	freelocale.c localeconv.c newlocale.c nl_langinfo.c \
 	generic_lc_all.c dummy_lc_collate.c \

Index: src/lib/libc/locale/global_locale.c
diff -u src/lib/libc/locale/global_locale.c:1.17 src/lib/libc/locale/global_locale.c:1.18
--- src/lib/libc/locale/global_locale.c:1.17	Fri May 17 12:55:57 2013
+++ src/lib/libc/locale/global_locale.c	Sun Aug 18 20:03:48 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: global_locale.c,v 1.17 2013/05/17 12:55:57 joerg Exp $ */
+/* $NetBSD: global_locale.c,v 1.18 2013/08/18 20:03:48 joerg Exp $ */
 
 /*-
  * Copyright (c)2008 Citrus Project,
@@ -28,7 +28,7 @@
 
 #include <sys/cdefs.h>
 #if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: global_locale.c,v 1.17 2013/05/17 12:55:57 joerg Exp $");
+__RCSID("$NetBSD: global_locale.c,v 1.18 2013/08/18 20:03:48 joerg Exp $");
 #endif /* LIBC_SCCS and not lint */
 
 #include <sys/types.h>
@@ -47,6 +47,69 @@ __RCSID("$NetBSD: global_locale.c,v 1.17
 #define NBCHAR_MAX (char)CHAR_MAX
 #endif
 
+static const _MessagesLocale _DefaultMessagesLocale = {
+	"^[Yy]",
+	"^[Nn]",
+	"yes",
+	"no"
+};
+
+static const _MonetaryLocale _DefaultMonetaryLocale = {
+	"",
+	"",
+	"",
+	"",
+	"",
+	"",
+	"",
+	(char)CHAR_MAX,
+	(char)CHAR_MAX,
+	(char)CHAR_MAX,
+	(char)CHAR_MAX,
+	(char)CHAR_MAX,
+	(char)CHAR_MAX,
+	(char)CHAR_MAX,
+	(char)CHAR_MAX,
+	(char)CHAR_MAX,
+	(char)CHAR_MAX,
+	(char)CHAR_MAX,
+	(char)CHAR_MAX,
+	(char)CHAR_MAX,
+	(char)CHAR_MAX
+};
+
+static const _NumericLocale _DefaultNumericLocale = {
+	".",
+	"",
+	""
+};
+
+static const _TimeLocale _DefaultTimeLocale = 
+{
+	{
+		"Sun","Mon","Tue","Wed","Thu","Fri","Sat",
+	},
+	{
+		"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday",
+		"Friday", "Saturday"
+	},
+	{
+		"Jan", "Feb", "Mar", "Apr", "May", "Jun",
+		"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
+	},
+	{
+		"January", "February", "March", "April", "May", "June", "July",
+		"August", "September", "October", "November", "December"
+	},
+	{
+		"AM", "PM"
+	},
+	"%a %b %e %H:%M:%S %Y",
+	"%m/%d/%y",
+	"%H:%M:%S",
+	"%I:%M:%S %p"
+};
+
 static const struct lconv _C_ldata = {
 	.decimal_point		= __UNCONST("."),
 	.thousands_sep		= __UNCONST(""),

Index: src/lib/libc/locale/multibyte.h
diff -u src/lib/libc/locale/multibyte.h:1.5 src/lib/libc/locale/multibyte.h:1.6
--- src/lib/libc/locale/multibyte.h:1.5	Sun Jan 11 02:46:28 2009
+++ src/lib/libc/locale/multibyte.h	Sun Aug 18 20:03:48 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: multibyte.h,v 1.5 2009/01/11 02:46:28 christos Exp $	*/
+/*	$NetBSD: multibyte.h,v 1.6 2013/08/18 20:03:48 joerg Exp $	*/
 
 /*-
  * Copyright (c)2002 Citrus Project,
@@ -49,14 +49,13 @@ typedef union _RuneState {
 } _RuneState;
 #define _PRIVSIZE	(sizeof(mbstate_t)-offsetof(_RuneStatePriv, __private))
 
+#define _RUNE_LOCALE(loc) \
+    ((_RuneLocale *)((loc)->part_impl[(size_t)LC_CTYPE]))
 
-/* */
+#define _CITRUS_CTYPE(loc) \
+    (((_RuneLocale *)((loc)->part_impl[(size_t)LC_CTYPE]))->rl_citrus_ctype)
 
-static __inline _citrus_ctype_t
-_to_cur_ctype(void)
-{
-	return (_CurrentRuneLocale->rl_citrus_ctype);
-}
+/* */
 
 static __inline _RuneState *
 _ps_to_runestate(mbstate_t *ps)
@@ -77,10 +76,10 @@ _ps_to_runelocale(mbstate_t const *ps)
 }
 
 static __inline _citrus_ctype_t
-_ps_to_ctype(mbstate_t const *ps)
+_ps_to_ctype(mbstate_t const *ps, locale_t loc)
 {
 	if (!ps)
-		return _to_cur_ctype();
+		return _CITRUS_CTYPE(loc);
 
 	_DIAGASSERT(_ps_to_runelocale(ps) != NULL);
 

Index: src/lib/libc/locale/multibyte_amd1.c
diff -u src/lib/libc/locale/multibyte_amd1.c:1.13 src/lib/libc/locale/multibyte_amd1.c:1.14
--- src/lib/libc/locale/multibyte_amd1.c:1.13	Tue May 28 16:57:56 2013
+++ src/lib/libc/locale/multibyte_amd1.c	Sun Aug 18 20:03:48 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: multibyte_amd1.c,v 1.13 2013/05/28 16:57:56 joerg Exp $	*/
+/*	$NetBSD: multibyte_amd1.c,v 1.14 2013/08/18 20:03:48 joerg Exp $	*/
 
 /*-
  * Copyright (c)2002, 2008 Citrus Project,
@@ -28,7 +28,7 @@
 
 #include <sys/cdefs.h>
 #if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: multibyte_amd1.c,v 1.13 2013/05/28 16:57:56 joerg Exp $");
+__RCSID("$NetBSD: multibyte_amd1.c,v 1.14 2013/08/18 20:03:48 joerg Exp $");
 #endif /* LIBC_SCCS and not lint */
 
 #include <sys/types.h>
@@ -47,12 +47,6 @@ __RCSID("$NetBSD: multibyte_amd1.c,v 1.1
 #include "runetype_local.h"
 #include "multibyte.h"
 
-#define _RUNE_LOCALE(loc) \
-    ((_RuneLocale *)((loc)->part_impl[(size_t)LC_CTYPE]))
-
-#define _CITRUS_CTYPE(loc) \
-    (_RUNE_LOCALE(loc)->rl_citrus_ctype)
-
 size_t
 mbrlen_l(const char *s, size_t n, mbstate_t *ps, locale_t loc)
 {
@@ -61,7 +55,7 @@ mbrlen_l(const char *s, size_t n, mbstat
 
 	_fixup_ps(_RUNE_LOCALE(loc), ps, s == NULL);
 
-	err0 = _citrus_ctype_mbrlen(_ps_to_ctype(ps), s, n,
+	err0 = _citrus_ctype_mbrlen(_ps_to_ctype(ps, loc), s, n,
 				     _ps_to_private(ps), &ret);
 	if (err0)
 		errno = err0;
@@ -113,7 +107,7 @@ mbrtowc_l(wchar_t *pwc, const char *s, s
 
 	_fixup_ps(_RUNE_LOCALE(loc), ps, s == NULL);
 
-	err0 = _citrus_ctype_mbrtowc(_ps_to_ctype(ps), pwc, s, n,
+	err0 = _citrus_ctype_mbrtowc(_ps_to_ctype(ps, loc), pwc, s, n,
 				      _ps_to_private(ps), &ret);
 	if (err0)
 		errno = err0;
@@ -136,7 +130,7 @@ mbsrtowcs_l(wchar_t *pwcs, const char **
 
 	_fixup_ps(_RUNE_LOCALE(loc), ps, s == NULL);
 
-	err0 = _citrus_ctype_mbsrtowcs(_ps_to_ctype(ps), pwcs, s, n,
+	err0 = _citrus_ctype_mbsrtowcs(_ps_to_ctype(ps, loc), pwcs, s, n,
 					_ps_to_private(ps), &ret);
 	if (err0)
 		errno = err0;
@@ -159,7 +153,7 @@ mbsnrtowcs_l(wchar_t *pwcs, const char *
 
 	_fixup_ps(_RUNE_LOCALE(loc), ps, s == NULL);
 
-	err0 = _citrus_ctype_mbsnrtowcs(_ps_to_ctype(ps), pwcs, s, in, n,
+	err0 = _citrus_ctype_mbsnrtowcs(_ps_to_ctype(ps, loc), pwcs, s, in, n,
 					_ps_to_private(ps), &ret);
 	if (err0)
 		errno = err0;
@@ -181,7 +175,7 @@ wcrtomb_l(char *s, wchar_t wc, mbstate_t
 
 	_fixup_ps(_RUNE_LOCALE(loc), ps, s == NULL);
 
-	err0 = _citrus_ctype_wcrtomb(_ps_to_ctype(ps), s, wc,
+	err0 = _citrus_ctype_wcrtomb(_ps_to_ctype(ps, loc), s, wc,
 				       _ps_to_private(ps), &ret);
 	if (err0)
 		errno = err0;
@@ -204,7 +198,7 @@ wcsrtombs_l(char *s, const wchar_t **ppw
 
 	_fixup_ps(_RUNE_LOCALE(loc), ps, s == NULL);
 
-	err0 = _citrus_ctype_wcsrtombs(_ps_to_ctype(ps), s, ppwcs, n,
+	err0 = _citrus_ctype_wcsrtombs(_ps_to_ctype(ps, loc), s, ppwcs, n,
 					_ps_to_private(ps), &ret);
 	if (err0)
 		errno = err0;
Index: src/lib/libc/locale/runetype_local.h
diff -u src/lib/libc/locale/runetype_local.h:1.13 src/lib/libc/locale/runetype_local.h:1.14
--- src/lib/libc/locale/runetype_local.h:1.13	Sat Apr 13 10:21:21 2013
+++ src/lib/libc/locale/runetype_local.h	Sun Aug 18 20:03:48 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: runetype_local.h,v 1.13 2013/04/13 10:21:21 joerg Exp $	*/
+/*	$NetBSD: runetype_local.h,v 1.14 2013/08/18 20:03:48 joerg Exp $	*/
 
 /*-
  * Copyright (c) 1993
@@ -136,8 +136,7 @@ typedef struct _RuneLocale {
 /*
  * global variables
  */
-extern const _RuneLocale _DefaultRuneLocale;
-extern const _RuneLocale *_CurrentRuneLocale;
+extern __dso_hidden const _RuneLocale _DefaultRuneLocale;
 
 __BEGIN_DECLS
 int _rune_load(const char * __restrict, size_t, _RuneLocale ** __restrict);

Index: src/lib/libc/locale/multibyte_c90.c
diff -u src/lib/libc/locale/multibyte_c90.c:1.11 src/lib/libc/locale/multibyte_c90.c:1.12
--- src/lib/libc/locale/multibyte_c90.c:1.11	Tue May 28 16:57:56 2013
+++ src/lib/libc/locale/multibyte_c90.c	Sun Aug 18 20:03:48 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: multibyte_c90.c,v 1.11 2013/05/28 16:57:56 joerg Exp $	*/
+/*	$NetBSD: multibyte_c90.c,v 1.12 2013/08/18 20:03:48 joerg Exp $	*/
 
 /*-
  * Copyright (c)2002, 2008 Citrus Project,
@@ -28,7 +28,7 @@
 
 #include <sys/cdefs.h>
 #if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: multibyte_c90.c,v 1.11 2013/05/28 16:57:56 joerg Exp $");
+__RCSID("$NetBSD: multibyte_c90.c,v 1.12 2013/08/18 20:03:48 joerg Exp $");
 #endif /* LIBC_SCCS and not lint */
 
 #include <sys/types.h>
@@ -47,12 +47,6 @@ __RCSID("$NetBSD: multibyte_c90.c,v 1.11
 #include "runetype_local.h"
 #include "multibyte.h"
 
-#define _RUNE_LOCALE(loc) \
-    ((_RuneLocale *)((loc)->part_impl[(size_t)LC_CTYPE]))
-
-#define _CITRUS_CTYPE(loc) \
-    (((_RuneLocale *)((loc)->part_impl[(size_t)LC_CTYPE]))->rl_citrus_ctype)
-
 int
 mblen_l(const char *s, size_t n, locale_t loc)
 {
@@ -139,7 +133,7 @@ wcsnrtombs_l(char *s, const wchar_t **pp
 
 	_fixup_ps(_RUNE_LOCALE(loc), ps, s == NULL);
 
-	err0 = _citrus_ctype_wcsnrtombs(_ps_to_ctype(ps), s, ppwcs, in, n,
+	err0 = _citrus_ctype_wcsnrtombs(_ps_to_ctype(ps, loc), s, ppwcs, in, n,
 					_ps_to_private(ps), &ret);
 	if (err0)
 		errno = err0;

Index: src/lib/libc/locale/nb_lc_messages_misc.h
diff -u src/lib/libc/locale/nb_lc_messages_misc.h:1.3 src/lib/libc/locale/nb_lc_messages_misc.h:1.4
--- src/lib/libc/locale/nb_lc_messages_misc.h:1.3	Sat Mar 27 15:25:22 2010
+++ src/lib/libc/locale/nb_lc_messages_misc.h	Sun Aug 18 20:03:48 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: nb_lc_messages_misc.h,v 1.3 2010/03/27 15:25:22 tnozaki Exp $ */
+/* $NetBSD: nb_lc_messages_misc.h,v 1.4 2013/08/18 20:03:48 joerg Exp $ */
 
 /*-
  * Copyright (c)2008 Citrus Project,
@@ -49,11 +49,8 @@ _PREFIX(build_cache)(struct _locale_cach
 }
 
 static __inline void
-_PREFIX(fixup)(_MessagesLocale *data)
+_PREFIX(update_global)(_MessagesLocale *data)
 {
-	_DIAGASSERT(data != NULL);
-
-	_CurrentMessagesLocale = data;
 }
 
 /*
@@ -61,6 +58,5 @@ _PREFIX(fixup)(_MessagesLocale *data)
  */
 #define _CATEGORY_ID		LC_MESSAGES
 #define _CATEGORY_NAME		"LC_MESSAGES"
-#define _CATEGORY_DEFAULT	_DefaultMessagesLocale
 
 #endif /*_NB_LC_MESSAGES_MISC_H_*/
Index: src/lib/libc/locale/nb_lc_monetary_misc.h
diff -u src/lib/libc/locale/nb_lc_monetary_misc.h:1.3 src/lib/libc/locale/nb_lc_monetary_misc.h:1.4
--- src/lib/libc/locale/nb_lc_monetary_misc.h:1.3	Sat Mar 27 15:25:22 2010
+++ src/lib/libc/locale/nb_lc_monetary_misc.h	Sun Aug 18 20:03:48 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: nb_lc_monetary_misc.h,v 1.3 2010/03/27 15:25:22 tnozaki Exp $ */
+/* $NetBSD: nb_lc_monetary_misc.h,v 1.4 2013/08/18 20:03:48 joerg Exp $ */
 
 /*-
  * Copyright (c)2008 Citrus Project,
@@ -73,11 +73,8 @@ _PREFIX(build_cache)(struct _locale_cach
 }
 
 static __inline void
-_PREFIX(fixup)(_MonetaryLocale *data)
+_PREFIX(update_global)(_MonetaryLocale *data)
 {
-	_DIAGASSERT(data != NULL);
-
-	_CurrentMonetaryLocale = data;
 }
 
 /*
@@ -85,6 +82,5 @@ _PREFIX(fixup)(_MonetaryLocale *data)
  */
 #define _CATEGORY_ID		LC_MONETARY
 #define _CATEGORY_NAME		"LC_MONETARY"
-#define _CATEGORY_DEFAULT	_DefaultMonetaryLocale
 
 #endif /*_RUNE_LC_MONETARY_MISC_H_*/
Index: src/lib/libc/locale/nb_lc_numeric_misc.h
diff -u src/lib/libc/locale/nb_lc_numeric_misc.h:1.3 src/lib/libc/locale/nb_lc_numeric_misc.h:1.4
--- src/lib/libc/locale/nb_lc_numeric_misc.h:1.3	Sat Mar 27 15:25:22 2010
+++ src/lib/libc/locale/nb_lc_numeric_misc.h	Sun Aug 18 20:03:48 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: nb_lc_numeric_misc.h,v 1.3 2010/03/27 15:25:22 tnozaki Exp $ */
+/* $NetBSD: nb_lc_numeric_misc.h,v 1.4 2013/08/18 20:03:48 joerg Exp $ */
 
 /*-
  * Copyright (c)2008 Citrus Project,
@@ -55,11 +55,8 @@ _PREFIX(build_cache)(struct _locale_cach
 }
 
 static __inline void
-_PREFIX(fixup)(_NumericLocale *data)
+_PREFIX(update_global)(_NumericLocale *data)
 {
-	_DIAGASSERT(data != NULL);
-
-	_CurrentNumericLocale = data;
 }
 
 /*
@@ -67,6 +64,5 @@ _PREFIX(fixup)(_NumericLocale *data)
  */
 #define _CATEGORY_ID		LC_NUMERIC
 #define _CATEGORY_NAME		"LC_NUMERIC"
-#define _CATEGORY_DEFAULT	_DefaultNumericLocale
 
 #endif /*_NB_LC_NUMERIC_MISC_H_*/

Index: src/lib/libc/locale/nb_lc_template.h
diff -u src/lib/libc/locale/nb_lc_template.h:1.6 src/lib/libc/locale/nb_lc_template.h:1.7
--- src/lib/libc/locale/nb_lc_template.h:1.6	Fri May 17 12:55:57 2013
+++ src/lib/libc/locale/nb_lc_template.h	Sun Aug 18 20:03:48 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: nb_lc_template.h,v 1.6 2013/05/17 12:55:57 joerg Exp $ */
+/* $NetBSD: nb_lc_template.h,v 1.7 2013/08/18 20:03:48 joerg Exp $ */
 
 /*-
  * Copyright (c)1999, 2008 Citrus Project,
@@ -92,8 +92,6 @@
 
 #define _nb_part_t		_PREFIX(part_t)
 #define _nb_part_cache		_PREFIX(part_cache)
-#define _nb_default_c		_PREFIX(default_c)
-#define _nb_default_posix	_PREFIX(default_posix)
 #define _nb_mutex		_PREFIX(mutex)
 
 typedef struct _nb_part_t {
@@ -105,46 +103,43 @@ typedef struct _nb_part_t {
 static SIMPLEQ_HEAD(, _nb_part_t) _nb_part_cache =
     SIMPLEQ_HEAD_INITIALIZER(_nb_part_cache);
 
-static const _nb_part_t _nb_default_c = {
-    _C_LOCALE,
-    __UNCONST(&_CATEGORY_DEFAULT),
-    { NULL },
-};
-
-static const _nb_part_t _nb_default_posix = {
-    _POSIX_LOCALE,
-    __UNCONST(&_CATEGORY_DEFAULT),
-    { NULL },
-};
-
 #ifdef _REENTRANT
 static mutex_t _nb_mutex = MUTEX_INITIALIZER;
 #endif
 
 static int
 _PREFIX(load_sub)(const char * __restrict name, const char * __restrict real,
-    _nb_part_t ** __restrict part, int force)
+    const char ** __restrict out_name, _CATEGORY_TYPE ** __restrict out_impl,
+    int force)
 {
-	_nb_part_t *p, *q;
+	const char *cached_name;
+	_CATEGORY_TYPE *cached_impl;
+	_nb_part_t *p;
 	int ret;
 
 	_DIAGASSERT(name != NULL);
-	_DIAGASSERT(part != NULL);
+	_DIAGASSERT(out_name != NULL);
+	_DIAGASSERT(out_impl != NULL);
 
 	if (!strcmp(_C_LOCALE, name)) {
-		p = __UNCONST(&_nb_default_c);
+		cached_name = _lc_C_locale.part_name[_CATEGORY_ID];
+		cached_impl = _lc_C_locale.part_impl[_CATEGORY_ID];
 	} else if (!strcmp(_POSIX_LOCALE, name)) {
-		p = __UNCONST(&_nb_default_posix);
+		cached_name = _POSIX_LOCALE;
+		cached_impl = _lc_C_locale.part_impl[_CATEGORY_ID];
 	} else {
 		SIMPLEQ_FOREACH(p, &_nb_part_cache, entry) {
-			if (!strcmp((const char *)&p->name[0], name))
+			if (!strcmp((const char *)&p->name[0], name)) {
+				cached_name = p->name;
+				cached_impl = p->impl;
 				goto found;
+			}
 		}
 		p = malloc(sizeof(*p));
 		if (p == NULL)
 			return ENOMEM;
 		if (force) {
-			p->impl = __UNCONST(&_CATEGORY_DEFAULT);
+			p->impl = _lc_C_locale.part_impl[_CATEGORY_ID];
 		} else {
 			_DIAGASSERT(_PathLocale != NULL);
 			ret = _PREFIX(create_impl)((const char *)_PathLocale,
@@ -156,24 +151,27 @@ _PREFIX(load_sub)(const char * __restric
 		}
 		strlcpy(&p->name[0], name, sizeof(p->name));
 		SIMPLEQ_INSERT_TAIL(&_nb_part_cache, p, entry);
+		cached_name = p->name;
+		cached_impl = p->impl;
 	}
 found:
 	if (real != NULL) {
-		q = malloc(sizeof(*q));
-		if (q == NULL)
+		p = malloc(sizeof(*p));
+		if (p == NULL)
 			return ENOMEM;
-		strlcpy(&q->name[0], real, sizeof(p->name));
-		q->impl = p->impl;
-		SIMPLEQ_INSERT_TAIL(&_nb_part_cache, q, entry);
-		p = q;
+		strlcpy(&p->name[0], real, sizeof(p->name));
+		cached_name = p->name;
+		p->impl = cached_impl;
+		SIMPLEQ_INSERT_TAIL(&_nb_part_cache, p, entry);
 	}
-	*part = p;
+	*out_name = cached_name;
+	*out_impl = cached_impl;
 	return 0;
 }
 
 static __inline int
 _PREFIX(load)(const char * __restrict name,
-    _nb_part_t ** __restrict part)
+    const char ** __restrict out_name, _CATEGORY_TYPE ** __restrict out_impl)
 {
 	int ret, force;
 	char path[PATH_MAX + 1], loccat[PATH_MAX + 1], buf[PATH_MAX + 1];
@@ -184,8 +182,10 @@ do {									\
 	alias = __unaliasname(aliaspath, key, &buf[0], sizeof(buf));	\
 	if (alias != NULL) {						\
 		ret = (force = !__isforcemapping(alias))		\
-		    ? _PREFIX(load_sub)(name, NULL, part, force)	\
-		    : _PREFIX(load_sub)(alias, name, part, force);	\
+		    ? _PREFIX(load_sub)(name, NULL, out_name, out_impl, \
+				        force)	\
+		    : _PREFIX(load_sub)(alias, name, out_name, out_impl, \
+				        force);	\
 		_DIAGASSERT(!ret || !force);				\
 		goto done;						\
 	}								\
@@ -193,7 +193,7 @@ do {									\
 
 	/* (1) non-aliased file */
 	mutex_lock(&_nb_mutex);
-	ret = _PREFIX(load_sub)(name, NULL, part, 0);
+	ret = _PREFIX(load_sub)(name, NULL, out_name, out_impl, 0);
 	if (ret != ENOENT)
 		goto done;
 
@@ -218,7 +218,8 @@ const char *
 _PREFIX(setlocale)(const char * __restrict name,
     struct _locale * __restrict locale)
 {
-	_nb_part_t *part;
+	const char *loaded_name;
+	_CATEGORY_TYPE *loaded_impl;
 
 	/* name may be NULL */
 	_DIAGASSERT(locale != NULL);
@@ -229,15 +230,13 @@ _PREFIX(setlocale)(const char * __restri
 		_DIAGASSERT(name != NULL);
 		_DIAGASSERT(locale->part_name[(size_t)_CATEGORY_ID] != NULL);
 		if (strcmp(name, locale->part_name[(size_t)_CATEGORY_ID])) {
-			if (_PREFIX(load)(name, &part))
+			if (_PREFIX(load)(name, &loaded_name, &loaded_impl))
 				return NULL;
-			locale->part_name[(size_t)_CATEGORY_ID]
-			    = &part->name[0];
-			locale->part_impl[(size_t)_CATEGORY_ID]
-			    = part->impl;
-			_PREFIX(build_cache)(locale->cache, part->impl);
+			locale->part_name[(size_t)_CATEGORY_ID] = loaded_name;
+			locale->part_impl[(size_t)_CATEGORY_ID] = loaded_impl;
+			_PREFIX(build_cache)(locale->cache, loaded_impl);
 			if (locale == &_lc_global_locale)
-				_PREFIX(fixup)(part->impl);
+				_PREFIX(update_global)(loaded_impl);
 		}
 	}
 	return locale->part_name[(size_t)_CATEGORY_ID];

Index: src/lib/libc/locale/nb_lc_template_decl.h
diff -u src/lib/libc/locale/nb_lc_template_decl.h:1.2 src/lib/libc/locale/nb_lc_template_decl.h:1.3
--- src/lib/libc/locale/nb_lc_template_decl.h:1.2	Sun Jan 11 02:46:29 2009
+++ src/lib/libc/locale/nb_lc_template_decl.h	Sun Aug 18 20:03:48 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: nb_lc_template_decl.h,v 1.2 2009/01/11 02:46:29 christos Exp $ */
+/* $NetBSD: nb_lc_template_decl.h,v 1.3 2013/08/18 20:03:48 joerg Exp $ */
 
 /*-
  * Copyright (c)2008 Citrus Project,
@@ -40,6 +40,6 @@ _PREFIX(build_cache)(struct _locale_cach
     _CATEGORY_TYPE * __restrict);
 
 static __inline void
-_PREFIX(fixup)(_CATEGORY_TYPE *);
+_PREFIX(update_global)(_CATEGORY_TYPE *);
 
 #endif /*_NB_LC_TEMPLATE_DECL_H_*/

Index: src/lib/libc/locale/nb_lc_time_misc.h
diff -u src/lib/libc/locale/nb_lc_time_misc.h:1.4 src/lib/libc/locale/nb_lc_time_misc.h:1.5
--- src/lib/libc/locale/nb_lc_time_misc.h:1.4	Sun Apr 21 17:45:46 2013
+++ src/lib/libc/locale/nb_lc_time_misc.h	Sun Aug 18 20:03:48 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: nb_lc_time_misc.h,v 1.4 2013/04/21 17:45:46 joerg Exp $ */
+/* $NetBSD: nb_lc_time_misc.h,v 1.5 2013/08/18 20:03:48 joerg Exp $ */
 
 /*-
  * Copyright (c)2008 Citrus Project,
@@ -75,9 +75,8 @@ _PREFIX(build_cache)(struct _locale_cach
 }
 
 static __inline void
-_PREFIX(fixup)(_TimeLocale *data)
+_PREFIX(update_global)(_TimeLocale *data)
 {
-	_DIAGASSERT(data != NULL);
 }
 
 /*
@@ -85,6 +84,5 @@ _PREFIX(fixup)(_TimeLocale *data)
  */
 #define _CATEGORY_ID		LC_TIME
 #define _CATEGORY_NAME		"LC_TIME"
-#define _CATEGORY_DEFAULT	_DefaultTimeLocale
 
 #endif /*_NB_LC_TIME_MISC_H_*/

Index: src/lib/libc/locale/runetable.c
diff -u src/lib/libc/locale/runetable.c:1.28 src/lib/libc/locale/runetable.c:1.29
--- src/lib/libc/locale/runetable.c:1.28	Sat Apr 13 10:21:21 2013
+++ src/lib/libc/locale/runetable.c	Sun Aug 18 20:03:48 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: runetable.c,v 1.28 2013/04/13 10:21:21 joerg Exp $	*/
+/*	$NetBSD: runetable.c,v 1.29 2013/08/18 20:03:48 joerg Exp $	*/
 
 /*-
  * Copyright (c) 1993
@@ -39,7 +39,7 @@
 #if 0
 static char sccsid[] = "@(#)table.c	8.1 (Berkeley) 6/27/93";
 #else
-__RCSID("$NetBSD: runetable.c,v 1.28 2013/04/13 10:21:21 joerg Exp $");
+__RCSID("$NetBSD: runetable.c,v 1.29 2013/08/18 20:03:48 joerg Exp $");
 #endif
 #endif /* LIBC_SCCS and not lint */
 
@@ -51,7 +51,7 @@ __RCSID("$NetBSD: runetable.c,v 1.28 201
 #include "citrus_ctype.h"
 #include "runetype_local.h"
 
-const _RuneLocale _DefaultRuneLocale = {
+__dso_hidden const _RuneLocale _DefaultRuneLocale = {
     {	/*00*/	_RUNETYPE_C,
 		_RUNETYPE_C,
 		_RUNETYPE_C,
@@ -351,5 +351,3 @@ const _RuneLocale _DefaultRuneLocale = {
     _C_compat_bsdctype,
 #endif
 };
-
-const _RuneLocale *_CurrentRuneLocale = &_DefaultRuneLocale;

Index: src/sys/sys/localedef.h
diff -u src/sys/sys/localedef.h:1.9 src/sys/sys/localedef.h:1.10
--- src/sys/sys/localedef.h:1.9	Sat May 17 03:49:54 2008
+++ src/sys/sys/localedef.h	Sun Aug 18 20:03:48 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: localedef.h,v 1.9 2008/05/17 03:49:54 ginsbach Exp $	*/
+/*	$NetBSD: localedef.h,v 1.10 2013/08/18 20:03:48 joerg Exp $	*/
 
 /*
  * Copyright (c) 1994 Winning Strategies, Inc.
@@ -40,10 +40,6 @@ typedef struct {
 	const char *nostr;
 } _MessagesLocale;
 
-extern const _MessagesLocale *_CurrentMessagesLocale;
-extern const _MessagesLocale  _DefaultMessagesLocale;
-
-
 typedef struct {
 	const char *int_curr_symbol;
 	const char *currency_symbol;
@@ -68,20 +64,12 @@ typedef struct {
 	char int_n_sign_posn;
 } _MonetaryLocale;
 
-extern const _MonetaryLocale *_CurrentMonetaryLocale;
-extern const _MonetaryLocale  _DefaultMonetaryLocale;
-
-
 typedef struct {
 	const char *decimal_point;
 	const char *thousands_sep;
 	const char *grouping;
 } _NumericLocale;
 
-extern const _NumericLocale *_CurrentNumericLocale;
-extern const _NumericLocale  _DefaultNumericLocale;
-
-
 typedef struct {
 	const char *abday[7];
 	const char *day[7];
@@ -94,7 +82,4 @@ typedef struct {
 	const char *t_fmt_ampm;
 } _TimeLocale;
 
-extern const _TimeLocale *_CurrentTimeLocale;
-extern const _TimeLocale  _DefaultTimeLocale;
-
 #endif /* !_SYS_LOCALEDEF_H_ */

Reply via email to