1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21: #include <langinfo.h>
22: #include <locale.h>
23: #include <errno.h>
24: #include <stddef.h>
25: #include "localeinfo.h"
26:
27:
28:
29:
30: #ifdef USE_IN_EXTENDED_LOCALE_MODEL
31: char *
32: __nl_langinfo_l (item, l)
33: nl_item item;
34: __locale_t l;
35: #else
36: char *
37: nl_langinfo (item)
38: nl_item item;
39: #endif
40: {
41: int category = _NL_ITEM_CATEGORY (item);
42: unsigned int index = _NL_ITEM_INDEX (item);
43: const struct locale_data *data;
44:
45: if (category < 0 || category == LC_ALL || category >= __LC_LAST)
46:
47: return (char *) "";
48:
49:
50:
51: if (index == _NL_ITEM_INDEX (_NL_LOCALE_NAME (category)))
52: {
53: #ifdef USE_IN_EXTENDED_LOCALE_MODEL
54: # define THISLOCALE l
55: #else
56: # define THISLOCALE _NL_CURRENT_LOCALE
57: #endif
58: return (char *) THISLOCALE->__names[category];
59: }
60:
61: #ifdef USE_IN_EXTENDED_LOCALE_MODEL
62: data = l->__locales[category];
63: #elif defined NL_CURRENT_INDIRECT
64:
65:
66: switch (category)
67: {
68: # define DEFINE_CATEGORY(category, category_name, items, a) \
69: case category: data = *_nl_current_##category; break;
70: # include "categories.def"
71: # undef DEFINE_CATEGORY
72: default:
73: return (char *) "";
74: }
75: #else
76: data = _NL_CURRENT_DATA (category);
77: #endif
78:
79: if (index >= data->nstrings)
80:
81: return (char *) "";
82:
83:
84: return (char *) data->values[index].string;
85: }
86: #ifdef USE_IN_EXTENDED_LOCALE_MODEL
87: weak_alias (__nl_langinfo_l, nl_langinfo_l)
88: #else
89: libc_hidden_def (nl_langinfo)
90: #endif