diff --git a/ChangeLog b/ChangeLog index 2dae335e9c..59464a6478 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2014-05-20 Aurelien Jarno + + [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-20 Richard Henderson [BZ #16967] diff --git a/NEWS b/NEWS index 753ee18d2f..d9ce8f9af8 100644 --- a/NEWS +++ b/NEWS @@ -17,7 +17,8 @@ Version 2.20 16712, 16713, 16714, 16731, 16739, 16740, 16743, 16754, 16758, 16759, 16760, 16770, 16786, 16789, 16791, 16799, 16800, 16815, 16823, 16824, 16831, 16838, 16849, 16854, 16876, 16877, 16885, 16888, 16890, 16912, - 16916, 16917, 16922, 16927, 16928, 16932, 16943, 16958, 16966, 16967. + 16915, 16916, 16917, 16922, 16927, 16928, 16932, 16943, 16958, 16966, + 16967. * The minimum Linux kernel version that this version of the GNU C Library can be used with is 2.6.32. diff --git a/locale/nl_langinfo_l.c b/locale/nl_langinfo_l.c index b9d02aa8b8..2490af4f4e 100644 --- a/locale/nl_langinfo_l.c +++ b/locale/nl_langinfo_l.c @@ -20,6 +20,7 @@ #include #include #include +#include #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. */ diff --git a/localedata/Makefile b/localedata/Makefile index 94562be0e2..48ec3de9c9 100644 --- a/localedata/Makefile +++ b/localedata/Makefile @@ -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)) diff --git a/localedata/tst-langinfo-static.c b/localedata/tst-langinfo-static.c new file mode 100644 index 0000000000..46856a0ef9 --- /dev/null +++ b/localedata/tst-langinfo-static.c @@ -0,0 +1 @@ +#include "tst-langinfo.c" diff --git a/localedata/tst-langinfo.sh b/localedata/tst-langinfo.sh index e75d22a618..bd489d024f 100755 --- a/localedata/tst-langinfo.sh +++ b/localedata/tst-langinfo.sh @@ -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 $?