diff options
author | Bruno Haible <bruno@clisp.org> | 2011-02-12 18:16:10 +0100 |
---|---|---|
committer | Bruno Haible <bruno@clisp.org> | 2011-02-12 18:16:10 +0100 |
commit | 94c9eb9cdefca1ca06c5159be5ed52491e27535b (patch) | |
tree | b7973d3c8ba2e7e0912bf1e089448ac4f0d6a789 /tests/test-setlocale2.c | |
parent | a8184d2038fcd3620daa6ef37f910b4e2853e4cc (diff) | |
download | gnulib-94c9eb9cdefca1ca06c5159be5ed52491e27535b.tar.gz |
setlocale: Workaround native Windows bug.
* lib/setlocale.c (rpl_setlocale): On native Windows, when setlocale
succeeds but sets LC_CTYPE to "C", report a failure.
* tests/test-setlocale2.sh: New file.
* tests/test-setlocale2.c: New file.
* modules/setlocale-tests (Files): Add the new files.
(Makefile.am): Enable test-setlocale2.sh test.
* doc/posix-functions/setlocale.texi: Mention workaround.
Diffstat (limited to 'tests/test-setlocale2.c')
-rw-r--r-- | tests/test-setlocale2.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/tests/test-setlocale2.c b/tests/test-setlocale2.c new file mode 100644 index 0000000000..7bfc42abee --- /dev/null +++ b/tests/test-setlocale2.c @@ -0,0 +1,55 @@ +/* Test of setting the current locale. + Copyright (C) 2011 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include <config.h> + +#include <locale.h> + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +int +main () +{ + /* Try to set the locale by implicitly looking at the LC_ALL environment + variable. */ + if (setlocale (LC_ALL, "") != NULL) + /* It was successful. Check whether LC_CTYPE is non-trivial. */ + if (strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) + { + fprintf (stderr, "setlocale did not fail for implicit %s\n", + getenv ("LC_ALL")); + return 1; + } + + /* Reset the locale. */ + if (setlocale (LC_ALL, "C") == NULL) + return 1; + + /* Try to set the locale by explicitly looking at the LC_ALL environment + variable. */ + if (setlocale (LC_ALL, getenv ("LC_ALL")) != NULL) + /* It was successful. Check whether LC_CTYPE is non-trivial. */ + if (strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) + { + fprintf (stderr, "setlocale did not fail for explicit %s\n", + getenv ("LC_ALL")); + return 1; + } + + return 0; +} |