summaryrefslogtreecommitdiff
path: root/locale
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2006-05-19 16:04:10 +0000
committerJakub Jelinek <jakub@redhat.com>2006-05-19 16:04:10 +0000
commit4cad81b6e72ed99c7816f28ad6828196b2ac7b65 (patch)
tree418c1c32beba4d79ae71206b90fbb6a8847eca2a /locale
parent3ec0d26c76d6905501034692d05bddbabae64e76 (diff)
Updated to fedora-glibc-20060519T1550cvs/fedora-glibc-2_4_90-8
Diffstat (limited to 'locale')
-rw-r--r--locale/findlocale.c11
-rw-r--r--locale/loadlocale.c4
-rw-r--r--locale/localeinfo.h20
-rw-r--r--locale/newlocale.c5
-rw-r--r--locale/programs/ld-time.c15
-rw-r--r--locale/setlocale.c31
6 files changed, 61 insertions, 25 deletions
diff --git a/locale/findlocale.c b/locale/findlocale.c
index 04b197d266..ea24170df5 100644
--- a/locale/findlocale.c
+++ b/locale/findlocale.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996-2001, 2002, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 1996-2001, 2002, 2003, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
@@ -80,7 +80,8 @@ _nl_find_locale (const char *locale_path, size_t locale_path_len,
variables. */
*name = getenv ("LC_ALL");
if (*name == NULL || (*name)[0] == '\0')
- *name = getenv (_nl_category_names[category]);
+ *name = getenv (_nl_category_names.str
+ + _nl_category_name_idxs[category]);
if (*name == NULL || (*name)[0] == '\0')
*name = getenv ("LANG");
}
@@ -145,7 +146,8 @@ _nl_find_locale (const char *locale_path, size_t locale_path_len,
locale_path, locale_path_len, mask,
language, territory, codeset,
normalized_codeset, modifier,
- _nl_category_names[category], 0);
+ _nl_category_names.str
+ + _nl_category_name_idxs[category], 0);
if (locale_file == NULL)
{
@@ -155,7 +157,8 @@ _nl_find_locale (const char *locale_path, size_t locale_path_len,
locale_path, locale_path_len, mask,
language, territory, codeset,
normalized_codeset, modifier,
- _nl_category_names[category], 1);
+ _nl_category_names.str
+ + _nl_category_name_idxs[category], 1);
if (locale_file == NULL)
/* This means we are out of core. */
return NULL;
diff --git a/locale/loadlocale.c b/locale/loadlocale.c
index 2a5935087c..467dff157a 100644
--- a/locale/loadlocale.c
+++ b/locale/loadlocale.c
@@ -1,5 +1,5 @@
/* Functions to read locale data files.
- Copyright (C) 1996-2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 1996-2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
@@ -198,7 +198,7 @@ _nl_load_locale (struct loaded_l10nfile *file, int category)
+ 5 + _nl_category_name_sizes[category] + 1);
__mempcpy (__mempcpy (__mempcpy (newp, file->filename, filenamelen),
"/SYS_", 5),
- _nl_category_names[category],
+ _nl_category_names.str + _nl_category_name_idxs[category],
_nl_category_name_sizes[category] + 1);
fd = open_not_cancel_2 (newp, O_RDONLY);
diff --git a/locale/localeinfo.h b/locale/localeinfo.h
index 3b0ed4f30b..4f746a298d 100644
--- a/locale/localeinfo.h
+++ b/locale/localeinfo.h
@@ -1,5 +1,5 @@
/* Declarations for internal libc locale interfaces
- Copyright (C) 1995-2001, 2002, 2003, 2005 Free Software Foundation, Inc.
+ Copyright (C) 1995-2003, 2005, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -172,8 +172,22 @@ enum
#define _ISCTYPE(c, desc) \
(((((const uint32_t *) (desc)) - 8)[(c) >> 5] >> ((c) & 0x1f)) & 1)
-extern const char *const _nl_category_names[__LC_LAST] attribute_hidden;
-extern const size_t _nl_category_name_sizes[__LC_LAST] attribute_hidden;
+/* Category name handling variables. */
+#define CATNAMEMF(line) CATNAMEMF1 (line)
+#define CATNAMEMF1(line) str##line
+extern const union catnamestr_t
+{
+ struct
+ {
+#define DEFINE_CATEGORY(category, category_name, items, a) \
+ char CATNAMEMF (__LINE__)[sizeof (category_name)];
+#include "categories.def"
+#undef DEFINE_CATEGORY
+ };
+ char str[0];
+} _nl_category_names attribute_hidden;
+const uint8_t _nl_category_name_idxs[__LC_LAST] attribute_hidden;
+extern const uint8_t _nl_category_name_sizes[__LC_LAST] attribute_hidden;
/* Name of the standard locales. */
extern const char _nl_C_name[] attribute_hidden;
diff --git a/locale/newlocale.c b/locale/newlocale.c
index b3d4b464b1..0c31ba48ae 100644
--- a/locale/newlocale.c
+++ b/locale/newlocale.c
@@ -1,5 +1,5 @@
/* Return a reference to locale information record.
- Copyright (C) 1996, 1997, 1999, 2000, 2001, 2002, 2004, 2005
+ Copyright (C) 1996, 1997, 1999, 2000-2002, 2004, 2005, 2006
Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
@@ -133,7 +133,8 @@ __newlocale (int category_mask, const char *locale, __locale_t base)
for (cnt = 0; cnt < __LC_LAST; ++cnt)
if (cnt != LC_ALL
&& (size_t) (cp - np) == _nl_category_name_sizes[cnt]
- && memcmp (np, _nl_category_names[cnt], cp - np) == 0)
+ && memcmp (np, (_nl_category_names.str
+ + _nl_category_name_idxs[cnt]), cp - np) == 0)
break;
if (cnt == __LC_LAST)
diff --git a/locale/programs/ld-time.c b/locale/programs/ld-time.c
index 78aff7fee6..4f1dcb0ce7 100644
--- a/locale/programs/ld-time.c
+++ b/locale/programs/ld-time.c
@@ -467,15 +467,22 @@ No definition for %s category found"), "LC_TIME"));
wstr = wstr ? wcschr (wstr + 1, L':') : NULL; /* end offset */
wstr = wstr ? wcschr (wstr + 1, L':') : NULL; /* end start */
wstr = wstr ? wcschr (wstr + 1, L':') : NULL; /* end end */
- time->era_entries[idx].wname = (uint32_t *) wstr + 1;
if (wstr != NULL)
{
+ time->era_entries[idx].wname = (uint32_t *) wstr + 1;
wstr = wcschr (wstr + 1, L':'); /* end name */
- *wstr = L'\0';
- time->era_entries[idx].wformat = (uint32_t *) wstr + 1;
+ if (wstr != NULL)
+ {
+ *wstr = L'\0';
+ time->era_entries[idx].wformat = (uint32_t *) wstr + 1;
+ }
+ else
+ time->era_entries[idx].wname =
+ time->era_entries[idx].wformat = (uint32_t *) L"";
}
else
- time->era_entries[idx].wformat = NULL;
+ time->era_entries[idx].wname =
+ time->era_entries[idx].wformat = (uint32_t *) L"";
}
}
diff --git a/locale/setlocale.c b/locale/setlocale.c
index 50bf8e772f..c1b8c3faec 100644
--- a/locale/setlocale.c
+++ b/locale/setlocale.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1992, 1995-2000, 2002, 2003, 2004
+/* Copyright (C) 1991, 1992, 1995-2000, 2002, 2003, 2004, 2006
Free Software Foundation, Inc.
This file is part of the GNU C Library.
@@ -66,18 +66,27 @@ static char *const _nl_current_used[] =
#endif
-/* Define an array of category names (also the environment variable names),
- indexed by integral category. */
-const char *const _nl_category_names[] =
+/* Define an array of category names (also the environment variable names). */
+const union catnamestr_t _nl_category_names attribute_hidden =
{
+ {
#define DEFINE_CATEGORY(category, category_name, items, a) \
- [category] = category_name,
+ category_name,
#include "categories.def"
-#undef DEFINE_CATEGORY
- [LC_ALL] = "LC_ALL"
+#undef DEFINE_CATEGORY
+ }
};
+
+const uint8_t _nl_category_name_idxs[__LC_LAST] attribute_hidden =
+ {
+#define DEFINE_CATEGORY(category, category_name, items, a) \
+ [category] = offsetof (union catnamestr_t, CATNAMEMF (__LINE__)),
+#include "categories.def"
+#undef DEFINE_CATEGORY
+ };
+
/* An array of their lengths, for convenience. */
-const size_t _nl_category_name_sizes[] =
+const uint8_t _nl_category_name_sizes[] attribute_hidden =
{
#define DEFINE_CATEGORY(category, category_name, items, a) \
[category] = sizeof (category_name) - 1,
@@ -173,7 +182,7 @@ new_composite_name (int category, const char *newnames[__LC_LAST])
const char *name = (category == LC_ALL ? newnames[i] :
category == i ? newnames[0] :
_nl_global_locale.__names[i]);
- p = __stpcpy (p, _nl_category_names[i]);
+ p = __stpcpy (p, _nl_category_names.str + _nl_category_name_idxs[i]);
*p++ = '=';
p = __stpcpy (p, name);
*p++ = ';';
@@ -275,7 +284,9 @@ setlocale (int category, const char *locale)
for (cnt = 0; cnt < __LC_LAST; ++cnt)
if (cnt != LC_ALL
&& (size_t) (cp - np) == _nl_category_name_sizes[cnt]
- && memcmp (np, _nl_category_names[cnt], cp - np) == 0)
+ && (memcmp (np, (_nl_category_names.str
+ + _nl_category_name_idxs[cnt]), cp - np)
+ == 0))
break;
if (cnt == __LC_LAST)