mirror of
https://sourceware.org/git/glibc.git
synced 2025-08-08 17:42:12 +03:00
2.5-18.1
This commit is contained in:
@@ -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_name,
|
||||
#include "categories.def"
|
||||
#undef DEFINE_CATEGORY
|
||||
}
|
||||
};
|
||||
|
||||
const uint8_t _nl_category_name_idxs[__LC_LAST] attribute_hidden =
|
||||
{
|
||||
#define DEFINE_CATEGORY(category, category_name, items, a) \
|
||||
[category] = category_name,
|
||||
[category] = offsetof (union catnamestr_t, CATNAMEMF (__LINE__)),
|
||||
#include "categories.def"
|
||||
#undef DEFINE_CATEGORY
|
||||
[LC_ALL] = "LC_ALL"
|
||||
#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)
|
||||
@@ -372,7 +383,7 @@ setlocale (int category, const char *locale)
|
||||
/* Critical section left. */
|
||||
__libc_lock_unlock (__libc_setlocale_lock);
|
||||
|
||||
/* Free the resources (the locale path variable. */
|
||||
/* Free the resources (the locale path variable). */
|
||||
free (locale_path);
|
||||
|
||||
return composite;
|
||||
|
Reference in New Issue
Block a user