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_ */