[BZ #15736] * locale/categories.def (LC_CTYPE): Add "nonascii-case" element. * string/Makefile (test-strcasecmp-ENV, test-strncasecmp-ENV) (test-strcasecmp-ifunc-ENV, test-strncasecmp-ifunc-ENV): Define. * string/test-strcasecmp.c (test_main): Run tests in several locales. * string/test-strncasecmp.c (test_main): Likewise. Index: glibc-2.17/locale/categories.def =================================================================== --- glibc-2.17.orig/locale/categories.def +++ glibc-2.17/locale/categories.def @@ -133,6 +133,7 @@ DEFINE_CATEGORY DEFINE_ELEMENT (_NL_CTYPE_TRANSLIT_IGNORE_LEN, "ctype-translit-ignore-len", std, word) DEFINE_ELEMENT (_NL_CTYPE_TRANSLIT_IGNORE, "ctype-translit-ignore", std, string) DEFINE_ELEMENT (_NL_CTYPE_MAP_TO_NONASCII, "map-to-nonascii", std, word) + DEFINE_ELEMENT (_NL_CTYPE_NONASCII_CASE, "nonascii-case", std, word) ), _nl_postload_ctype) Index: glibc-2.17/string/Makefile =================================================================== --- glibc-2.17.orig/string/Makefile +++ glibc-2.17/string/Makefile @@ -69,6 +69,10 @@ noinl-tester-ENV = LANGUAGE=C tst-strxfrm-ENV = LOCPATH=$(common-objpfx)localedata tst-strxfrm2-ENV = LOCPATH=$(common-objpfx)localedata bug-strcoll1-ENV = LOCPATH=$(common-objpfx)localedata +test-strcasecmp-ENV = LOCPATH=$(common-objpfx)localedata +test-strncasecmp-ENV = LOCPATH=$(common-objpfx)localedata +test-strcasecmp-ifunc-ENV = LOCPATH=$(common-objpfx)localedata +test-strncasecmp-ifunc-ENV = LOCPATH=$(common-objpfx)localedata CFLAGS-inl-tester.c = -fno-builtin CFLAGS-noinl-tester.c = -fno-builtin CFLAGS-tst-strlen.c = -fno-builtin Index: glibc-2.17/string/test-strcasecmp.c =================================================================== --- glibc-2.17.orig/string/test-strcasecmp.c +++ glibc-2.17/string/test-strcasecmp.c @@ -17,6 +17,7 @@ License along with the GNU C Library; if not, see . */ +#include #include #define TEST_MAIN #define TEST_NAME "strcasecmp" @@ -230,14 +231,18 @@ do_random_tests (void) } } -int -test_main (void) +static void +test_locale (const char *locale) { size_t i; - test_init (); + if (setlocale (LC_CTYPE, locale) == NULL) + { + error (0, 0, "cannot set locale \"%s\"", locale); + ret = 1; + } - printf ("%23s", ""); + printf ("%-23s", locale); FOR_EACH_IMPL (impl, 0) printf ("\t%s", impl->name); putchar ('\n'); @@ -270,6 +275,19 @@ test_main (void) } do_random_tests (); +} + +int +test_main (void) +{ + test_init (); + + test_locale ("C"); + test_locale ("en_US.ISO-8859-1"); + test_locale ("en_US.UTF-8"); + test_locale ("tr_TR.ISO-8859-9"); + test_locale ("tr_TR.UTF-8"); + return ret; } Index: glibc-2.17/string/test-strncasecmp.c =================================================================== --- glibc-2.17.orig/string/test-strncasecmp.c +++ glibc-2.17/string/test-strncasecmp.c @@ -17,6 +17,7 @@ License along with the GNU C Library; if not, see . */ +#include #include #define TEST_MAIN #define TEST_NAME "strncasecmp" @@ -280,17 +281,21 @@ bz14195 (void) check_result (impl, empty_string, "", 5, 0); } -int -test_main (void) +static void +test_locale (const char *locale) { size_t i; - test_init (); + if (setlocale (LC_CTYPE, locale) == NULL) + { + error (0, 0, "cannot set locale \"%s\"", locale); + ret = 1; + } bz12205 (); bz14195 (); - printf ("%23s", ""); + printf ("%23s", locale); FOR_EACH_IMPL (impl, 0) printf ("\t%s", impl->name); putchar ('\n'); @@ -353,6 +358,19 @@ test_main (void) } do_random_tests (); +} + +int +test_main (void) +{ + test_init (); + + test_locale ("C"); + test_locale ("en_US.ISO-8859-1"); + test_locale ("en_US.UTF-8"); + test_locale ("tr_TR.ISO-8859-9"); + test_locale ("tr_TR.UTF-8"); + return ret; }