diff options
Diffstat (limited to 'test/locale/bug-usesetlocale.c')
-rw-r--r-- | test/locale/bug-usesetlocale.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/test/locale/bug-usesetlocale.c b/test/locale/bug-usesetlocale.c new file mode 100644 index 000000000..0637067de --- /dev/null +++ b/test/locale/bug-usesetlocale.c @@ -0,0 +1,38 @@ +/* Test case for setlocale vs uselocale (LC_GLOBAL_LOCALE) bug. */ + +#define _GNU_SOURCE 1 +#include <locale.h> +#include <stdio.h> +#include <ctype.h> + +static int +do_test (void) +{ + __locale_t loc_new, loc_old; + + int first = !!isalpha(0xE4); + + setlocale (LC_ALL, "de_DE"); + + int global_de = !!isalpha(0xE4); + + loc_new = newlocale (1 << LC_ALL, "C", 0); + loc_old = uselocale (loc_new); + + int used_c = !!isalpha(0xE4); + + uselocale (loc_old); + + int used_global = !!isalpha(0xE4); + + printf ("started %d, after setlocale %d\n", first, global_de); + printf ("after uselocale %d, after LC_GLOBAL_LOCALE %d\n", + used_c, used_global); + + freelocale (loc_new); + return !(used_c == first && used_global == global_de); +} + + +#define TEST_FUNCTION do_test () +#include "test-skeleton.c" |