diff options
Diffstat (limited to 'locale')
-rw-r--r-- | locale/nl_langinfo.c | 56 | ||||
-rw-r--r-- | locale/nl_langinfo_l.c | 43 |
2 files changed, 41 insertions, 58 deletions
diff --git a/locale/nl_langinfo.c b/locale/nl_langinfo.c index c5fbf19e15..b873545caa 100644 --- a/locale/nl_langinfo.c +++ b/locale/nl_langinfo.c @@ -27,64 +27,10 @@ /* Return a string with the data for locale-dependent parameter ITEM. */ -#ifdef USE_IN_EXTENDED_LOCALE_MODEL -char * -__nl_langinfo_l (item, l) - nl_item item; - __locale_t l; -#else char * nl_langinfo (item) nl_item item; -#endif { - int category = _NL_ITEM_CATEGORY (item); - unsigned int index = _NL_ITEM_INDEX (item); - const struct locale_data *data; - - if (category < 0 || category == LC_ALL || category >= __LC_LAST) - /* Bogus category: bogus item. */ - return (char *) ""; - - /* Special case value for NL_LOCALE_NAME (category). - This is not a real item index in the string table. */ - if (index == _NL_ITEM_INDEX (_NL_LOCALE_NAME (category))) - { -#ifdef USE_IN_EXTENDED_LOCALE_MODEL -# define THISLOCALE l -#else -# define THISLOCALE _NL_CURRENT_LOCALE -#endif - return (char *) THISLOCALE->__names[category]; - } - -#ifdef USE_IN_EXTENDED_LOCALE_MODEL - data = l->__locales[category]; -#elif defined NL_CURRENT_INDIRECT - /* Make direct reference to every _nl_current_CATEGORY symbol, - since we know only at runtime which categories are used. */ - switch (category) - { -# define DEFINE_CATEGORY(category, category_name, items, a) \ - case category: data = *_nl_current_##category; break; -# include "categories.def" -# undef DEFINE_CATEGORY - default: /* Should be impossible. */ - return (char *) ""; - } -#else - data = _NL_CURRENT_DATA (category); -#endif - - if (index >= data->nstrings) - /* Bogus index for this category: bogus item. */ - return (char *) ""; - - /* Return the string for the specified item. */ - return (char *) data->values[index].string; + return __nl_langinfo_l (item, _NL_CURRENT_LOCALE); } -#ifdef USE_IN_EXTENDED_LOCALE_MODEL -weak_alias (__nl_langinfo_l, nl_langinfo_l) -#else libc_hidden_def (nl_langinfo) -#endif diff --git a/locale/nl_langinfo_l.c b/locale/nl_langinfo_l.c index ef7b7a1a6a..08e1534a8b 100644 --- a/locale/nl_langinfo_l.c +++ b/locale/nl_langinfo_l.c @@ -1,4 +1,5 @@ -/* Copyright (C) 2000 Free Software Foundation, Inc. +/* User interface for extracting locale-dependent parameters. + Copyright (C) 1995-1997,1999-2002,2005,2007 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 @@ -16,5 +17,41 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#define USE_IN_EXTENDED_LOCALE_MODEL 1 -#include <nl_langinfo.c> +#include <langinfo.h> +#include <locale.h> +#include <errno.h> +#include <stddef.h> +#include "localeinfo.h" + + +/* Return a string with the data for locale-dependent parameter ITEM. */ + +char * +__nl_langinfo_l (item, l) + nl_item item; + __locale_t l; +{ + int category = _NL_ITEM_CATEGORY (item); + unsigned int index = _NL_ITEM_INDEX (item); + const struct locale_data *data; + + if (category < 0 || category == LC_ALL || category >= __LC_LAST) + /* Bogus category: bogus item. */ + return (char *) ""; + + /* Special case value for NL_LOCALE_NAME (category). + This is not a real item index in the string table. */ + if (index == _NL_ITEM_INDEX (_NL_LOCALE_NAME (category))) + return (char *) l->__names[category]; + + data = l->__locales[category]; + + if (index >= data->nstrings) + /* Bogus index for this category: bogus item. */ + return (char *) ""; + + /* Return the string for the specified item. */ + return (char *) data->values[index].string; +} +libc_hidden_def (__nl_langinfo_l) +weak_alias (__nl_langinfo_l, nl_langinfo_l) |