@@ -1,3 +1,16 @@
+2014-05-14 Aurelien Jarno <aurelien@aurel32.net>
+
+ [BZ #16915]
+ * locale/nl_langinfo_l.c: Make direct reference to every
+ _nl_current_CATEGORY symbol.
+ * localedata/Makefile (test-srcs): Add tst-langinfo-static.
+ (tests-static): Add tst-langinfo-static.
+ (tests-special): Add tst-langinfo-static.out.
+ ($(objpfx)tst-langinfo.out): Redirect output.
+ ($(objpfx)tst-langinfo-static.out): New.
+ * localedata/tst-langinfo.sh: Send output to stdout.
+ * localedata/tst-langinfo-static.c: New file.
+
2014-05-05 Aurelien Jarno <aurelien@aurel32.net>
* po/fr.po: Fix French translation of inappropriate.
@@ -16,7 +16,8 @@ Version 2.20
16677, 16680, 16683, 16689, 16695, 16701, 16706, 16707, 16712, 16713,
16714, 16731, 16739, 16740, 16743, 16754, 16758, 16759, 16760, 16770,
16786, 16789, 16791, 16799, 16800, 16815, 16823, 16824, 16831, 16838,
- 16854, 16876, 16877, 16885, 16888, 16890, 16912, 16916, 16922, 16932.
+ 16854, 16876, 16877, 16885, 16888, 16890, 16912, 16915, 16916, 16922,
+ 16932.
* The minimum Linux kernel version that this version of the GNU C Library
can be used with is 2.6.32.
@@ -20,6 +20,7 @@
#include <locale.h>
#include <errno.h>
#include <stddef.h>
+#include <stdlib.h>
#include "localeinfo.h"
@@ -43,7 +44,21 @@ __nl_langinfo_l (item, l)
if (index == _NL_ITEM_INDEX (_NL_LOCALE_NAME (category)))
return (char *) l->__names[category];
+#if 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. */
+ abort();
+ }
+#else
data = l->__locales[category];
+#endif
if (index >= data->nstrings)
/* Bogus index for this category: bogus item. */
@@ -35,7 +35,7 @@ vpath %.h tests-mbwc
test-srcs := collate-test xfrm-test tst-fmon tst-rpmatch tst-trans \
tst-mbswcs1 tst-mbswcs2 tst-mbswcs3 tst-mbswcs4 tst-mbswcs5 \
- tst-ctype tst-wctype tst-langinfo tst-numeric
+ tst-ctype tst-wctype tst-langinfo tst-langinfo-static tst-numeric
test-input := de_DE.ISO-8859-1 en_US.ISO-8859-1 da_DK.ISO-8859-1 \
hr_HR.ISO-8859-2 sv_SE.ISO-8859-1 tr_TR.UTF-8 fr_FR.UTF-8 \
si_LK.UTF-8
@@ -95,7 +95,9 @@ tests-special += $(objpfx)sort-test.out $(objpfx)tst-fmon.out \
$(objpfx)tst-locale.out $(objpfx)tst-rpmatch.out \
$(objpfx)tst-trans.out $(objpfx)tst-mbswcs.out \
$(objpfx)tst-ctype.out $(objpfx)tst-wctype.out \
- $(objpfx)tst-langinfo.out $(objpfx)tst-numeric.out
+ $(objpfx)tst-langinfo.out $(objpfx)tst-langinfo-static.out \
+ $(objpfx)tst-numeric.out
+tests-static += tst-langinfo-static
ifeq ($(run-built-tests),yes)
# We have to generate locales
@@ -197,7 +199,12 @@ $(objpfx)tst-wctype.out: tst-wctype.sh $(objpfx)tst-wctype \
$(objpfx)tst-langinfo.out: tst-langinfo.sh $(objpfx)tst-langinfo \
$(objpfx)sort-test.out \
$(addprefix $(objpfx),$(CTYPE_FILES))
- $(SHELL) $< $(common-objpfx) '$(test-program-cmd)'; \
+ $(SHELL) $< $(common-objpfx) '$(test-program-cmd)' > $@; \
+ $(evaluate-test)
+$(objpfx)tst-langinfo-static.out: tst-langinfo.sh $(objpfx)tst-langinfo-static \
+ $(objpfx)sort-test.out \
+ $(addprefix $(objpfx),$(CTYPE_FILES))
+ $(SHELL) $< $(common-objpfx) '$(test-program-cmd)' > $@; \
$(evaluate-test)
$(objpfx)tst-digits.out: $(objpfx)tst-locale.out
$(objpfx)tst-mbswcs6.out: $(addprefix $(objpfx),$(CTYPE_FILES))
new file mode 100644
@@ -0,0 +1 @@
+#include "tst-langinfo.c"
@@ -340,7 +340,6 @@ ja_JP.EUC-JP NOEXPR ^([nN
ja_JP.EUC-JP CODESET EUC-JP
EOF
LOCPATH=${common_objpfx}localedata GCONV_PATH=${common_objpfx}iconvdata \
-LC_ALL=tt_TT ${tst_langinfo} \
- > ${common_objpfx}localedata/tst-langinfo.out
+LC_ALL=tt_TT ${tst_langinfo}
exit $?