|
Packit |
709fb3 |
/* Test of gl_locale_name function and its variants.
|
|
Packit |
709fb3 |
Copyright (C) 2007-2017 Free Software Foundation, Inc.
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
This program is free software: you can redistribute it and/or modify
|
|
Packit |
709fb3 |
it under the terms of the GNU General Public License as published by
|
|
Packit |
709fb3 |
the Free Software Foundation; either version 3 of the License, or
|
|
Packit |
709fb3 |
(at your option) any later version.
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
This program is distributed in the hope that it will be useful,
|
|
Packit |
709fb3 |
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
709fb3 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
Packit |
709fb3 |
GNU General Public License for more details.
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
You should have received a copy of the GNU General Public License
|
|
Packit |
709fb3 |
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
/* Written by Bruno Haible <bruno@clisp.org>, 2007. */
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
#include <config.h>
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
#include "localename.h"
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
#include <locale.h>
|
|
Packit |
709fb3 |
#include <stdlib.h>
|
|
Packit |
709fb3 |
#include <string.h>
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
#include "macros.h"
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
#if HAVE_NEWLOCALE && HAVE_USELOCALE
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
static struct { int cat; int mask; const char *string; } const categories[] =
|
|
Packit |
709fb3 |
{
|
|
Packit |
709fb3 |
{ LC_CTYPE, LC_CTYPE_MASK, "LC_CTYPE" },
|
|
Packit |
709fb3 |
{ LC_NUMERIC, LC_NUMERIC_MASK, "LC_NUMERIC" },
|
|
Packit |
709fb3 |
{ LC_TIME, LC_TIME_MASK, "LC_TIME" },
|
|
Packit |
709fb3 |
{ LC_COLLATE, LC_COLLATE_MASK, "LC_COLLATE" },
|
|
Packit |
709fb3 |
{ LC_MONETARY, LC_MONETARY_MASK, "LC_MONETARY" },
|
|
Packit |
709fb3 |
{ LC_MESSAGES, LC_MESSAGES_MASK, "LC_MESSAGES" }
|
|
Packit |
709fb3 |
# ifdef LC_PAPER
|
|
Packit |
709fb3 |
, { LC_PAPER, LC_PAPER_MASK, "LC_PAPER" }
|
|
Packit |
709fb3 |
# endif
|
|
Packit |
709fb3 |
# ifdef LC_NAME
|
|
Packit |
709fb3 |
, { LC_NAME, LC_NAME_MASK, "LC_NAME" }
|
|
Packit |
709fb3 |
# endif
|
|
Packit |
709fb3 |
# ifdef LC_ADDRESS
|
|
Packit |
709fb3 |
, { LC_ADDRESS, LC_ADDRESS_MASK, "LC_ADDRESS" }
|
|
Packit |
709fb3 |
# endif
|
|
Packit |
709fb3 |
# ifdef LC_TELEPHONE
|
|
Packit |
709fb3 |
, { LC_TELEPHONE, LC_TELEPHONE_MASK, "LC_TELEPHONE" }
|
|
Packit |
709fb3 |
# endif
|
|
Packit |
709fb3 |
# ifdef LC_MEASUREMENT
|
|
Packit |
709fb3 |
, { LC_MEASUREMENT, LC_MEASUREMENT_MASK, "LC_MEASUREMENT" }
|
|
Packit |
709fb3 |
# endif
|
|
Packit |
709fb3 |
# ifdef LC_IDENTIFICATION
|
|
Packit |
709fb3 |
, { LC_IDENTIFICATION, LC_IDENTIFICATION_MASK, "LC_IDENTIFICATION" }
|
|
Packit |
709fb3 |
# endif
|
|
Packit |
709fb3 |
};
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
#endif
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
/* Test the gl_locale_name() function. */
|
|
Packit |
709fb3 |
static void
|
|
Packit |
709fb3 |
test_locale_name (void)
|
|
Packit |
709fb3 |
{
|
|
Packit |
709fb3 |
const char *name;
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
/* Check that gl_locale_name returns non-NULL. */
|
|
Packit |
709fb3 |
ASSERT (gl_locale_name (LC_MESSAGES, "LC_MESSAGES") != NULL);
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
/* Get into a defined state, */
|
|
Packit |
709fb3 |
setlocale (LC_ALL, "en_US.UTF-8");
|
|
Packit |
709fb3 |
#if HAVE_NEWLOCALE && HAVE_USELOCALE
|
|
Packit |
709fb3 |
uselocale (LC_GLOBAL_LOCALE);
|
|
Packit |
709fb3 |
#endif
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
/* Check that when all environment variables are unset,
|
|
Packit |
709fb3 |
gl_locale_name returns the default locale. */
|
|
Packit |
709fb3 |
unsetenv ("LC_ALL");
|
|
Packit |
709fb3 |
unsetenv ("LC_CTYPE");
|
|
Packit |
709fb3 |
unsetenv ("LC_MESSAGES");
|
|
Packit |
709fb3 |
unsetenv ("LC_NUMERIC");
|
|
Packit |
709fb3 |
unsetenv ("LANG");
|
|
Packit |
709fb3 |
setlocale (LC_ALL, "");
|
|
Packit |
709fb3 |
ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"),
|
|
Packit |
709fb3 |
gl_locale_name_default ()) == 0);
|
|
Packit |
709fb3 |
ASSERT (strcmp (gl_locale_name (LC_NUMERIC, "LC_NUMERIC"),
|
|
Packit |
709fb3 |
gl_locale_name_default ()) == 0);
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
/* Check that an empty environment variable is treated like an unset
|
|
Packit |
709fb3 |
environment variable. */
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
setenv ("LC_ALL", "", 1);
|
|
Packit |
709fb3 |
unsetenv ("LC_CTYPE");
|
|
Packit |
709fb3 |
unsetenv ("LC_MESSAGES");
|
|
Packit |
709fb3 |
unsetenv ("LANG");
|
|
Packit |
709fb3 |
setlocale (LC_ALL, "");
|
|
Packit |
709fb3 |
ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"),
|
|
Packit |
709fb3 |
gl_locale_name_default ()) == 0);
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
unsetenv ("LC_ALL");
|
|
Packit |
709fb3 |
setenv ("LC_CTYPE", "", 1);
|
|
Packit |
709fb3 |
unsetenv ("LC_MESSAGES");
|
|
Packit |
709fb3 |
unsetenv ("LANG");
|
|
Packit |
709fb3 |
setlocale (LC_ALL, "");
|
|
Packit |
709fb3 |
ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"),
|
|
Packit |
709fb3 |
gl_locale_name_default ()) == 0);
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
unsetenv ("LC_ALL");
|
|
Packit |
709fb3 |
unsetenv ("LC_CTYPE");
|
|
Packit |
709fb3 |
setenv ("LC_MESSAGES", "", 1);
|
|
Packit |
709fb3 |
unsetenv ("LANG");
|
|
Packit |
709fb3 |
setlocale (LC_ALL, "");
|
|
Packit |
709fb3 |
ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"),
|
|
Packit |
709fb3 |
gl_locale_name_default ()) == 0);
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
unsetenv ("LC_ALL");
|
|
Packit |
709fb3 |
unsetenv ("LC_CTYPE");
|
|
Packit |
709fb3 |
unsetenv ("LC_MESSAGES");
|
|
Packit |
709fb3 |
setenv ("LANG", "", 1);
|
|
Packit |
709fb3 |
setlocale (LC_ALL, "");
|
|
Packit |
709fb3 |
ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"),
|
|
Packit |
709fb3 |
gl_locale_name_default ()) == 0);
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
/* Check that LC_ALL overrides the others, and LANG is overridden by the
|
|
Packit |
709fb3 |
others. */
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
setenv ("LC_ALL", "C", 1);
|
|
Packit |
709fb3 |
unsetenv ("LC_CTYPE");
|
|
Packit |
709fb3 |
unsetenv ("LC_MESSAGES");
|
|
Packit |
709fb3 |
unsetenv ("LANG");
|
|
Packit |
709fb3 |
setlocale (LC_ALL, "");
|
|
Packit |
709fb3 |
ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), "C") == 0);
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
unsetenv ("LC_ALL");
|
|
Packit |
709fb3 |
setenv ("LC_CTYPE", "C", 1);
|
|
Packit |
709fb3 |
setenv ("LC_MESSAGES", "C", 1);
|
|
Packit |
709fb3 |
unsetenv ("LANG");
|
|
Packit |
709fb3 |
setlocale (LC_ALL, "");
|
|
Packit |
709fb3 |
ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), "C") == 0);
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
unsetenv ("LC_ALL");
|
|
Packit |
709fb3 |
unsetenv ("LC_CTYPE");
|
|
Packit |
709fb3 |
unsetenv ("LC_MESSAGES");
|
|
Packit |
709fb3 |
setenv ("LANG", "C", 1);
|
|
Packit |
709fb3 |
setlocale (LC_ALL, "");
|
|
Packit |
709fb3 |
ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), "C") == 0);
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
/* Check mixed situations. */
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
unsetenv ("LC_ALL");
|
|
Packit |
709fb3 |
unsetenv ("LC_CTYPE");
|
|
Packit |
709fb3 |
setenv ("LC_MESSAGES", "fr_FR.UTF-8", 1);
|
|
Packit |
709fb3 |
setenv ("LANG", "de_DE.UTF-8", 1);
|
|
Packit |
709fb3 |
if (setlocale (LC_ALL, "") != NULL)
|
|
Packit |
709fb3 |
{
|
|
Packit |
709fb3 |
name = gl_locale_name (LC_CTYPE, "LC_CTYPE");
|
|
Packit |
709fb3 |
ASSERT (strcmp (name, "de_DE.UTF-8") == 0);
|
|
Packit |
709fb3 |
name = gl_locale_name (LC_MESSAGES, "LC_MESSAGES");
|
|
Packit |
709fb3 |
ASSERT (strcmp (name, "fr_FR.UTF-8") == 0);
|
|
Packit |
709fb3 |
}
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
unsetenv ("LC_ALL");
|
|
Packit |
709fb3 |
unsetenv ("LC_CTYPE");
|
|
Packit |
709fb3 |
setenv ("LC_MESSAGES", "fr_FR.UTF-8", 1);
|
|
Packit |
709fb3 |
unsetenv ("LANG");
|
|
Packit |
709fb3 |
if (setlocale (LC_ALL, "") != NULL)
|
|
Packit |
709fb3 |
{
|
|
Packit |
709fb3 |
name = gl_locale_name (LC_CTYPE, "LC_CTYPE");
|
|
Packit |
709fb3 |
ASSERT (strcmp (name, gl_locale_name_default ()) == 0);
|
|
Packit |
709fb3 |
name = gl_locale_name (LC_MESSAGES, "LC_MESSAGES");
|
|
Packit |
709fb3 |
ASSERT (strcmp (name, "fr_FR.UTF-8") == 0);
|
|
Packit |
709fb3 |
}
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
#if HAVE_NEWLOCALE && HAVE_USELOCALE
|
|
Packit |
709fb3 |
/* Check that gl_locale_name considers the thread locale. */
|
|
Packit |
709fb3 |
{
|
|
Packit |
709fb3 |
locale_t locale = newlocale (LC_ALL_MASK, "fr_FR.UTF-8", NULL);
|
|
Packit |
709fb3 |
if (locale != NULL)
|
|
Packit |
709fb3 |
{
|
|
Packit |
709fb3 |
uselocale (locale);
|
|
Packit |
709fb3 |
name = gl_locale_name (LC_CTYPE, "LC_CTYPE");
|
|
Packit |
709fb3 |
ASSERT (strcmp (name, "fr_FR.UTF-8") == 0);
|
|
Packit |
709fb3 |
name = gl_locale_name (LC_MESSAGES, "LC_MESSAGES");
|
|
Packit |
709fb3 |
ASSERT (strcmp (name, "fr_FR.UTF-8") == 0);
|
|
Packit |
709fb3 |
uselocale (LC_GLOBAL_LOCALE);
|
|
Packit |
709fb3 |
freelocale (locale);
|
|
Packit |
709fb3 |
}
|
|
Packit |
709fb3 |
}
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
/* Check that gl_locale_name distinguishes different categories of the
|
|
Packit |
709fb3 |
thread locale, and that the name is the right one for each. */
|
|
Packit |
709fb3 |
{
|
|
Packit |
709fb3 |
unsigned int i;
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
for (i = 0; i < SIZEOF (categories); i++)
|
|
Packit |
709fb3 |
{
|
|
Packit |
709fb3 |
int category_mask = categories[i].mask;
|
|
Packit |
709fb3 |
locale_t loc = newlocale (LC_ALL_MASK, "fr_FR.UTF-8", NULL);
|
|
Packit |
709fb3 |
if (loc != NULL)
|
|
Packit |
709fb3 |
{
|
|
Packit |
709fb3 |
locale_t locale = newlocale (category_mask, "de_DE.UTF-8", loc);
|
|
Packit |
709fb3 |
if (locale == NULL)
|
|
Packit |
709fb3 |
freelocale (loc);
|
|
Packit |
709fb3 |
else
|
|
Packit |
709fb3 |
{
|
|
Packit |
709fb3 |
unsigned int j;
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
uselocale (locale);
|
|
Packit |
709fb3 |
for (j = 0; j < SIZEOF (categories); j++)
|
|
Packit |
709fb3 |
{
|
|
Packit |
709fb3 |
const char *name_j =
|
|
Packit |
709fb3 |
gl_locale_name (categories[j].cat, categories[j].string);
|
|
Packit |
709fb3 |
if (j == i)
|
|
Packit |
709fb3 |
ASSERT (strcmp (name_j, "de_DE.UTF-8") == 0);
|
|
Packit |
709fb3 |
else
|
|
Packit |
709fb3 |
ASSERT (strcmp (name_j, "fr_FR.UTF-8") == 0);
|
|
Packit |
709fb3 |
}
|
|
Packit |
709fb3 |
uselocale (LC_GLOBAL_LOCALE);
|
|
Packit |
709fb3 |
freelocale (locale);
|
|
Packit |
709fb3 |
}
|
|
Packit |
709fb3 |
}
|
|
Packit |
709fb3 |
}
|
|
Packit |
709fb3 |
}
|
|
Packit |
709fb3 |
#endif
|
|
Packit |
709fb3 |
}
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
/* Test the gl_locale_name_thread() function. */
|
|
Packit |
709fb3 |
static void
|
|
Packit |
709fb3 |
test_locale_name_thread (void)
|
|
Packit |
709fb3 |
{
|
|
Packit |
709fb3 |
/* Get into a defined state, */
|
|
Packit |
709fb3 |
setlocale (LC_ALL, "en_US.UTF-8");
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
#if HAVE_NEWLOCALE && HAVE_USELOCALE
|
|
Packit |
709fb3 |
/* Check that gl_locale_name_thread returns NULL when no thread locale is
|
|
Packit |
709fb3 |
set. */
|
|
Packit |
709fb3 |
uselocale (LC_GLOBAL_LOCALE);
|
|
Packit |
709fb3 |
ASSERT (gl_locale_name_thread (LC_CTYPE, "LC_CTYPE") == NULL);
|
|
Packit |
709fb3 |
ASSERT (gl_locale_name_thread (LC_MESSAGES, "LC_MESSAGES") == NULL);
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
/* Check that gl_locale_name_thread considers the thread locale. */
|
|
Packit |
709fb3 |
{
|
|
Packit |
709fb3 |
locale_t locale = newlocale (LC_ALL_MASK, "fr_FR.UTF-8", NULL);
|
|
Packit |
709fb3 |
if (locale != NULL)
|
|
Packit |
709fb3 |
{
|
|
Packit |
709fb3 |
const char *name;
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
uselocale (locale);
|
|
Packit |
709fb3 |
name = gl_locale_name_thread (LC_CTYPE, "LC_CTYPE");
|
|
Packit |
709fb3 |
ASSERT (strcmp (name, "fr_FR.UTF-8") == 0);
|
|
Packit |
709fb3 |
name = gl_locale_name_thread (LC_MESSAGES, "LC_MESSAGES");
|
|
Packit |
709fb3 |
ASSERT (strcmp (name, "fr_FR.UTF-8") == 0);
|
|
Packit |
709fb3 |
uselocale (LC_GLOBAL_LOCALE);
|
|
Packit |
709fb3 |
freelocale (locale);
|
|
Packit |
709fb3 |
}
|
|
Packit |
709fb3 |
}
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
/* Check that gl_locale_name_thread distinguishes different categories of the
|
|
Packit |
709fb3 |
thread locale, and that the name is the right one for each. */
|
|
Packit |
709fb3 |
{
|
|
Packit |
709fb3 |
unsigned int i;
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
for (i = 0; i < SIZEOF (categories); i++)
|
|
Packit |
709fb3 |
{
|
|
Packit |
709fb3 |
int category_mask = categories[i].mask;
|
|
Packit |
709fb3 |
locale_t loc = newlocale (LC_ALL_MASK, "fr_FR.UTF-8", NULL);
|
|
Packit |
709fb3 |
if (loc != NULL)
|
|
Packit |
709fb3 |
{
|
|
Packit |
709fb3 |
locale_t locale = newlocale (category_mask, "de_DE.UTF-8", loc);
|
|
Packit |
709fb3 |
if (locale == NULL)
|
|
Packit |
709fb3 |
freelocale (loc);
|
|
Packit |
709fb3 |
else
|
|
Packit |
709fb3 |
{
|
|
Packit |
709fb3 |
unsigned int j;
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
uselocale (locale);
|
|
Packit |
709fb3 |
for (j = 0; j < SIZEOF (categories); j++)
|
|
Packit |
709fb3 |
{
|
|
Packit |
709fb3 |
const char *name_j =
|
|
Packit |
709fb3 |
gl_locale_name_thread (categories[j].cat,
|
|
Packit |
709fb3 |
categories[j].string);
|
|
Packit |
709fb3 |
if (j == i)
|
|
Packit |
709fb3 |
ASSERT (strcmp (name_j, "de_DE.UTF-8") == 0);
|
|
Packit |
709fb3 |
else
|
|
Packit |
709fb3 |
ASSERT (strcmp (name_j, "fr_FR.UTF-8") == 0);
|
|
Packit |
709fb3 |
}
|
|
Packit |
709fb3 |
uselocale (LC_GLOBAL_LOCALE);
|
|
Packit |
709fb3 |
freelocale (locale);
|
|
Packit |
709fb3 |
}
|
|
Packit |
709fb3 |
}
|
|
Packit |
709fb3 |
}
|
|
Packit |
709fb3 |
}
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
/* Check that gl_locale_name_thread returns a string that is allocated with
|
|
Packit |
709fb3 |
indefinite extent. */
|
|
Packit |
709fb3 |
{
|
|
Packit |
709fb3 |
/* Try many locale names in turn, in order to defeat possible caches. */
|
|
Packit |
709fb3 |
static const char * const choices[] =
|
|
Packit |
709fb3 |
{
|
|
Packit |
709fb3 |
"C",
|
|
Packit |
709fb3 |
"POSIX",
|
|
Packit |
709fb3 |
"af_ZA",
|
|
Packit |
709fb3 |
"af_ZA.UTF-8",
|
|
Packit |
709fb3 |
"am_ET",
|
|
Packit |
709fb3 |
"am_ET.UTF-8",
|
|
Packit |
709fb3 |
"be_BY",
|
|
Packit |
709fb3 |
"be_BY.UTF-8",
|
|
Packit |
709fb3 |
"bg_BG",
|
|
Packit |
709fb3 |
"bg_BG.UTF-8",
|
|
Packit |
709fb3 |
"ca_ES",
|
|
Packit |
709fb3 |
"ca_ES.UTF-8",
|
|
Packit |
709fb3 |
"cs_CZ",
|
|
Packit |
709fb3 |
"cs_CZ.UTF-8",
|
|
Packit |
709fb3 |
"da_DK",
|
|
Packit |
709fb3 |
"da_DK.UTF-8",
|
|
Packit |
709fb3 |
"de_AT",
|
|
Packit |
709fb3 |
"de_AT.UTF-8",
|
|
Packit |
709fb3 |
"de_CH",
|
|
Packit |
709fb3 |
"de_CH.UTF-8",
|
|
Packit |
709fb3 |
"de_DE",
|
|
Packit |
709fb3 |
"de_DE.UTF-8",
|
|
Packit |
709fb3 |
"el_GR",
|
|
Packit |
709fb3 |
"el_GR.UTF-8",
|
|
Packit |
709fb3 |
"en_AU",
|
|
Packit |
709fb3 |
"en_AU.UTF-8",
|
|
Packit |
709fb3 |
"en_CA",
|
|
Packit |
709fb3 |
"en_CA.UTF-8",
|
|
Packit |
709fb3 |
"en_GB",
|
|
Packit |
709fb3 |
"en_GB.UTF-8",
|
|
Packit |
709fb3 |
"en_IE",
|
|
Packit |
709fb3 |
"en_IE.UTF-8",
|
|
Packit |
709fb3 |
"en_NZ",
|
|
Packit |
709fb3 |
"en_NZ.UTF-8",
|
|
Packit |
709fb3 |
"en_US",
|
|
Packit |
709fb3 |
"en_US.UTF-8",
|
|
Packit |
709fb3 |
"es_ES",
|
|
Packit |
709fb3 |
"es_ES.UTF-8",
|
|
Packit |
709fb3 |
"et_EE",
|
|
Packit |
709fb3 |
"et_EE.UTF-8",
|
|
Packit |
709fb3 |
"eu_ES",
|
|
Packit |
709fb3 |
"eu_ES.UTF-8",
|
|
Packit |
709fb3 |
"fi_FI",
|
|
Packit |
709fb3 |
"fi_FI.UTF-8",
|
|
Packit |
709fb3 |
"fr_BE",
|
|
Packit |
709fb3 |
"fr_BE.UTF-8",
|
|
Packit |
709fb3 |
"fr_CA",
|
|
Packit |
709fb3 |
"fr_CA.UTF-8",
|
|
Packit |
709fb3 |
"fr_CH",
|
|
Packit |
709fb3 |
"fr_CH.UTF-8",
|
|
Packit |
709fb3 |
"fr_FR",
|
|
Packit |
709fb3 |
"fr_FR.UTF-8",
|
|
Packit |
709fb3 |
"he_IL",
|
|
Packit |
709fb3 |
"he_IL.UTF-8",
|
|
Packit |
709fb3 |
"hr_HR",
|
|
Packit |
709fb3 |
"hr_HR.UTF-8",
|
|
Packit |
709fb3 |
"hu_HU",
|
|
Packit |
709fb3 |
"hu_HU.UTF-8",
|
|
Packit |
709fb3 |
"hy_AM",
|
|
Packit |
709fb3 |
"is_IS",
|
|
Packit |
709fb3 |
"is_IS.UTF-8",
|
|
Packit |
709fb3 |
"it_CH",
|
|
Packit |
709fb3 |
"it_CH.UTF-8",
|
|
Packit |
709fb3 |
"it_IT",
|
|
Packit |
709fb3 |
"it_IT.UTF-8",
|
|
Packit |
709fb3 |
"ja_JP.UTF-8",
|
|
Packit |
709fb3 |
"kk_KZ",
|
|
Packit |
709fb3 |
"kk_KZ.UTF-8",
|
|
Packit |
709fb3 |
"ko_KR.UTF-8",
|
|
Packit |
709fb3 |
"lt_LT",
|
|
Packit |
709fb3 |
"lt_LT.UTF-8",
|
|
Packit |
709fb3 |
"nl_BE",
|
|
Packit |
709fb3 |
"nl_BE.UTF-8",
|
|
Packit |
709fb3 |
"nl_NL",
|
|
Packit |
709fb3 |
"nl_NL.UTF-8",
|
|
Packit |
709fb3 |
"no_NO",
|
|
Packit |
709fb3 |
"no_NO.UTF-8",
|
|
Packit |
709fb3 |
"pl_PL",
|
|
Packit |
709fb3 |
"pl_PL.UTF-8",
|
|
Packit |
709fb3 |
"pt_BR",
|
|
Packit |
709fb3 |
"pt_BR.UTF-8",
|
|
Packit |
709fb3 |
"pt_PT",
|
|
Packit |
709fb3 |
"pt_PT.UTF-8",
|
|
Packit |
709fb3 |
"ro_RO",
|
|
Packit |
709fb3 |
"ro_RO.UTF-8",
|
|
Packit |
709fb3 |
"ru_RU",
|
|
Packit |
709fb3 |
"ru_RU.UTF-8",
|
|
Packit |
709fb3 |
"sk_SK",
|
|
Packit |
709fb3 |
"sk_SK.UTF-8",
|
|
Packit |
709fb3 |
"sl_SI",
|
|
Packit |
709fb3 |
"sl_SI.UTF-8",
|
|
Packit |
709fb3 |
"sv_SE",
|
|
Packit |
709fb3 |
"sv_SE.UTF-8",
|
|
Packit |
709fb3 |
"tr_TR",
|
|
Packit |
709fb3 |
"tr_TR.UTF-8",
|
|
Packit |
709fb3 |
"uk_UA",
|
|
Packit |
709fb3 |
"uk_UA.UTF-8",
|
|
Packit |
709fb3 |
"zh_CN",
|
|
Packit |
709fb3 |
"zh_CN.UTF-8",
|
|
Packit |
709fb3 |
"zh_HK",
|
|
Packit |
709fb3 |
"zh_HK.UTF-8",
|
|
Packit |
709fb3 |
"zh_TW",
|
|
Packit |
709fb3 |
"zh_TW.UTF-8"
|
|
Packit |
709fb3 |
};
|
|
Packit |
709fb3 |
/* Remember which locales are available. */
|
|
Packit |
709fb3 |
unsigned char /* bool */ available[SIZEOF (choices)];
|
|
Packit |
709fb3 |
/* Array of remembered results of gl_locale_name_thread. */
|
|
Packit |
709fb3 |
const char *unsaved_names[SIZEOF (choices)][SIZEOF (categories)];
|
|
Packit |
709fb3 |
/* Array of remembered results of gl_locale_name_thread, stored in safe
|
|
Packit |
709fb3 |
memory. */
|
|
Packit |
709fb3 |
char *saved_names[SIZEOF (choices)][SIZEOF (categories)];
|
|
Packit |
709fb3 |
unsigned int j;
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
for (j = 0; j < SIZEOF (choices); j++)
|
|
Packit |
709fb3 |
{
|
|
Packit |
709fb3 |
locale_t locale = newlocale (LC_ALL_MASK, choices[j], NULL);
|
|
Packit |
709fb3 |
available[j] = (locale != NULL);
|
|
Packit |
709fb3 |
if (locale != NULL)
|
|
Packit |
709fb3 |
{
|
|
Packit |
709fb3 |
unsigned int i;
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
uselocale (locale);
|
|
Packit |
709fb3 |
for (i = 0; i < SIZEOF (categories); i++)
|
|
Packit |
709fb3 |
{
|
|
Packit |
709fb3 |
unsaved_names[j][i] = gl_locale_name_thread (categories[i].cat, categories[i].string);
|
|
Packit |
709fb3 |
saved_names[j][i] = strdup (unsaved_names[j][i]);
|
|
Packit |
709fb3 |
}
|
|
Packit |
709fb3 |
uselocale (LC_GLOBAL_LOCALE);
|
|
Packit |
709fb3 |
freelocale (locale);
|
|
Packit |
709fb3 |
}
|
|
Packit |
709fb3 |
}
|
|
Packit |
709fb3 |
/* Verify the unsaved_names are still valid. */
|
|
Packit |
709fb3 |
for (j = 0; j < SIZEOF (choices); j++)
|
|
Packit |
709fb3 |
if (available[j])
|
|
Packit |
709fb3 |
{
|
|
Packit |
709fb3 |
unsigned int i;
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
for (i = 0; i < SIZEOF (categories); i++)
|
|
Packit |
709fb3 |
ASSERT (strcmp (unsaved_names[j][i], saved_names[j][i]) == 0);
|
|
Packit |
709fb3 |
}
|
|
Packit |
709fb3 |
/* Allocate many locales, without freeing them. This is an attempt at
|
|
Packit |
709fb3 |
overwriting as much of the previously allocated memory as possible. */
|
|
Packit |
709fb3 |
for (j = SIZEOF (choices); j > 0; )
|
|
Packit |
709fb3 |
{
|
|
Packit |
709fb3 |
j--;
|
|
Packit |
709fb3 |
if (available[j])
|
|
Packit |
709fb3 |
{
|
|
Packit |
709fb3 |
locale_t locale = newlocale (LC_ALL_MASK, choices[j], NULL);
|
|
Packit |
709fb3 |
unsigned int i;
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
ASSERT (locale != NULL);
|
|
Packit |
709fb3 |
uselocale (locale);
|
|
Packit |
709fb3 |
for (i = 0; i < SIZEOF (categories); i++)
|
|
Packit |
709fb3 |
{
|
|
Packit |
709fb3 |
const char *name = gl_locale_name_thread (categories[i].cat, categories[i].string);
|
|
Packit |
709fb3 |
ASSERT (strcmp (unsaved_names[j][i], name) == 0);
|
|
Packit |
709fb3 |
}
|
|
Packit |
709fb3 |
uselocale (LC_GLOBAL_LOCALE);
|
|
Packit |
709fb3 |
freelocale (locale);
|
|
Packit |
709fb3 |
}
|
|
Packit |
709fb3 |
}
|
|
Packit |
709fb3 |
/* Verify the unsaved_names are still valid. */
|
|
Packit |
709fb3 |
for (j = 0; j < SIZEOF (choices); j++)
|
|
Packit |
709fb3 |
if (available[j])
|
|
Packit |
709fb3 |
{
|
|
Packit |
709fb3 |
unsigned int i;
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
for (i = 0; i < SIZEOF (categories); i++)
|
|
Packit |
709fb3 |
{
|
|
Packit |
709fb3 |
ASSERT (strcmp (unsaved_names[j][i], saved_names[j][i]) == 0);
|
|
Packit |
709fb3 |
free (saved_names[j][i]);
|
|
Packit |
709fb3 |
}
|
|
Packit |
709fb3 |
}
|
|
Packit |
709fb3 |
}
|
|
Packit |
709fb3 |
#else
|
|
Packit |
709fb3 |
/* Check that gl_locale_name_thread always returns NULL. */
|
|
Packit |
709fb3 |
ASSERT (gl_locale_name_thread (LC_CTYPE, "LC_CTYPE") == NULL);
|
|
Packit |
709fb3 |
ASSERT (gl_locale_name_thread (LC_MESSAGES, "LC_MESSAGES") == NULL);
|
|
Packit |
709fb3 |
#endif
|
|
Packit |
709fb3 |
}
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
/* Test the gl_locale_name_posix() function. */
|
|
Packit |
709fb3 |
static void
|
|
Packit |
709fb3 |
test_locale_name_posix (void)
|
|
Packit |
709fb3 |
{
|
|
Packit |
709fb3 |
const char *name;
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
/* Get into a defined state, */
|
|
Packit |
709fb3 |
setlocale (LC_ALL, "en_US.UTF-8");
|
|
Packit |
709fb3 |
#if HAVE_NEWLOCALE && HAVE_USELOCALE
|
|
Packit |
709fb3 |
uselocale (LC_GLOBAL_LOCALE);
|
|
Packit |
709fb3 |
#endif
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
/* Check that when all environment variables are unset,
|
|
Packit |
709fb3 |
gl_locale_name_posix returns either NULL or the default locale. */
|
|
Packit |
709fb3 |
unsetenv ("LC_ALL");
|
|
Packit |
709fb3 |
unsetenv ("LC_CTYPE");
|
|
Packit |
709fb3 |
unsetenv ("LC_MESSAGES");
|
|
Packit |
709fb3 |
unsetenv ("LC_NUMERIC");
|
|
Packit |
709fb3 |
unsetenv ("LANG");
|
|
Packit |
709fb3 |
setlocale (LC_ALL, "");
|
|
Packit |
709fb3 |
name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES");
|
|
Packit |
709fb3 |
ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0);
|
|
Packit |
709fb3 |
name = gl_locale_name_posix (LC_NUMERIC, "LC_NUMERIC");
|
|
Packit |
709fb3 |
ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0);
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
/* Check that an empty environment variable is treated like an unset
|
|
Packit |
709fb3 |
environment variable. */
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
setenv ("LC_ALL", "", 1);
|
|
Packit |
709fb3 |
unsetenv ("LC_CTYPE");
|
|
Packit |
709fb3 |
unsetenv ("LC_MESSAGES");
|
|
Packit |
709fb3 |
unsetenv ("LANG");
|
|
Packit |
709fb3 |
setlocale (LC_ALL, "");
|
|
Packit |
709fb3 |
name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES");
|
|
Packit |
709fb3 |
ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0);
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
unsetenv ("LC_ALL");
|
|
Packit |
709fb3 |
setenv ("LC_CTYPE", "", 1);
|
|
Packit |
709fb3 |
unsetenv ("LC_MESSAGES");
|
|
Packit |
709fb3 |
unsetenv ("LANG");
|
|
Packit |
709fb3 |
setlocale (LC_ALL, "");
|
|
Packit |
709fb3 |
name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES");
|
|
Packit |
709fb3 |
ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0);
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
unsetenv ("LC_ALL");
|
|
Packit |
709fb3 |
unsetenv ("LC_CTYPE");
|
|
Packit |
709fb3 |
setenv ("LC_MESSAGES", "", 1);
|
|
Packit |
709fb3 |
unsetenv ("LANG");
|
|
Packit |
709fb3 |
setlocale (LC_ALL, "");
|
|
Packit |
709fb3 |
name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES");
|
|
Packit |
709fb3 |
ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0);
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
unsetenv ("LC_ALL");
|
|
Packit |
709fb3 |
unsetenv ("LC_CTYPE");
|
|
Packit |
709fb3 |
unsetenv ("LC_MESSAGES");
|
|
Packit |
709fb3 |
setenv ("LANG", "", 1);
|
|
Packit |
709fb3 |
setlocale (LC_ALL, "");
|
|
Packit |
709fb3 |
name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES");
|
|
Packit |
709fb3 |
ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0);
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
/* Check that LC_ALL overrides the others, and LANG is overridden by the
|
|
Packit |
709fb3 |
others. */
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
setenv ("LC_ALL", "C", 1);
|
|
Packit |
709fb3 |
unsetenv ("LC_CTYPE");
|
|
Packit |
709fb3 |
unsetenv ("LC_MESSAGES");
|
|
Packit |
709fb3 |
unsetenv ("LANG");
|
|
Packit |
709fb3 |
setlocale (LC_ALL, "");
|
|
Packit |
709fb3 |
name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES");
|
|
Packit |
709fb3 |
ASSERT (strcmp (name, "C") == 0);
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
unsetenv ("LC_ALL");
|
|
Packit |
709fb3 |
setenv ("LC_CTYPE", "C", 1);
|
|
Packit |
709fb3 |
setenv ("LC_MESSAGES", "C", 1);
|
|
Packit |
709fb3 |
unsetenv ("LANG");
|
|
Packit |
709fb3 |
setlocale (LC_ALL, "");
|
|
Packit |
709fb3 |
name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES");
|
|
Packit |
709fb3 |
ASSERT (strcmp (name, "C") == 0);
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
unsetenv ("LC_ALL");
|
|
Packit |
709fb3 |
unsetenv ("LC_CTYPE");
|
|
Packit |
709fb3 |
unsetenv ("LC_MESSAGES");
|
|
Packit |
709fb3 |
setenv ("LANG", "C", 1);
|
|
Packit |
709fb3 |
setlocale (LC_ALL, "");
|
|
Packit |
709fb3 |
name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES");
|
|
Packit |
709fb3 |
ASSERT (strcmp (name, "C") == 0);
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
/* Check mixed situations. */
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
unsetenv ("LC_ALL");
|
|
Packit |
709fb3 |
unsetenv ("LC_CTYPE");
|
|
Packit |
709fb3 |
setenv ("LC_MESSAGES", "fr_FR.UTF-8", 1);
|
|
Packit |
709fb3 |
setenv ("LANG", "de_DE.UTF-8", 1);
|
|
Packit |
709fb3 |
if (setlocale (LC_ALL, "") != NULL)
|
|
Packit |
709fb3 |
{
|
|
Packit |
709fb3 |
name = gl_locale_name_posix (LC_CTYPE, "LC_CTYPE");
|
|
Packit |
709fb3 |
ASSERT (strcmp (name, "de_DE.UTF-8") == 0);
|
|
Packit |
709fb3 |
name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES");
|
|
Packit |
709fb3 |
ASSERT (strcmp (name, "fr_FR.UTF-8") == 0);
|
|
Packit |
709fb3 |
}
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
unsetenv ("LC_ALL");
|
|
Packit |
709fb3 |
unsetenv ("LC_CTYPE");
|
|
Packit |
709fb3 |
setenv ("LC_MESSAGES", "fr_FR.UTF-8", 1);
|
|
Packit |
709fb3 |
unsetenv ("LANG");
|
|
Packit |
709fb3 |
if (setlocale (LC_ALL, "") != NULL)
|
|
Packit |
709fb3 |
{
|
|
Packit |
709fb3 |
name = gl_locale_name_posix (LC_CTYPE, "LC_CTYPE");
|
|
Packit |
709fb3 |
ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0);
|
|
Packit |
709fb3 |
name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES");
|
|
Packit |
709fb3 |
ASSERT (strcmp (name, "fr_FR.UTF-8") == 0);
|
|
Packit |
709fb3 |
}
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
#if HAVE_NEWLOCALE && HAVE_USELOCALE
|
|
Packit |
709fb3 |
/* Check that gl_locale_name_posix ignores the thread locale. */
|
|
Packit |
709fb3 |
{
|
|
Packit |
709fb3 |
locale_t locale = newlocale (LC_ALL_MASK, "fr_FR.UTF-8", NULL);
|
|
Packit |
709fb3 |
if (locale != NULL)
|
|
Packit |
709fb3 |
{
|
|
Packit |
709fb3 |
unsetenv ("LC_ALL");
|
|
Packit |
709fb3 |
unsetenv ("LC_CTYPE");
|
|
Packit |
709fb3 |
unsetenv ("LC_MESSAGES");
|
|
Packit |
709fb3 |
setenv ("LANG", "C", 1);
|
|
Packit |
709fb3 |
setlocale (LC_ALL, "");
|
|
Packit |
709fb3 |
uselocale (locale);
|
|
Packit |
709fb3 |
name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES");
|
|
Packit |
709fb3 |
ASSERT (strcmp (name, "C") == 0);
|
|
Packit |
709fb3 |
uselocale (LC_GLOBAL_LOCALE);
|
|
Packit |
709fb3 |
freelocale (locale);
|
|
Packit |
709fb3 |
}
|
|
Packit |
709fb3 |
}
|
|
Packit |
709fb3 |
#endif
|
|
Packit |
709fb3 |
}
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
/* Test the gl_locale_name_environ() function. */
|
|
Packit |
709fb3 |
static void
|
|
Packit |
709fb3 |
test_locale_name_environ (void)
|
|
Packit |
709fb3 |
{
|
|
Packit |
709fb3 |
const char *name;
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
/* Get into a defined state, */
|
|
Packit |
709fb3 |
setlocale (LC_ALL, "en_US.UTF-8");
|
|
Packit |
709fb3 |
#if HAVE_NEWLOCALE && HAVE_USELOCALE
|
|
Packit |
709fb3 |
uselocale (LC_GLOBAL_LOCALE);
|
|
Packit |
709fb3 |
#endif
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
/* Check that when all environment variables are unset,
|
|
Packit |
709fb3 |
gl_locale_name_environ returns NULL. */
|
|
Packit |
709fb3 |
unsetenv ("LC_ALL");
|
|
Packit |
709fb3 |
unsetenv ("LC_CTYPE");
|
|
Packit |
709fb3 |
unsetenv ("LC_MESSAGES");
|
|
Packit |
709fb3 |
unsetenv ("LC_NUMERIC");
|
|
Packit |
709fb3 |
unsetenv ("LANG");
|
|
Packit |
709fb3 |
ASSERT (gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES") == NULL);
|
|
Packit |
709fb3 |
ASSERT (gl_locale_name_environ (LC_NUMERIC, "LC_NUMERIC") == NULL);
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
/* Check that an empty environment variable is treated like an unset
|
|
Packit |
709fb3 |
environment variable. */
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
setenv ("LC_ALL", "", 1);
|
|
Packit |
709fb3 |
unsetenv ("LC_CTYPE");
|
|
Packit |
709fb3 |
unsetenv ("LC_MESSAGES");
|
|
Packit |
709fb3 |
unsetenv ("LANG");
|
|
Packit |
709fb3 |
ASSERT (gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES") == NULL);
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
unsetenv ("LC_ALL");
|
|
Packit |
709fb3 |
setenv ("LC_CTYPE", "", 1);
|
|
Packit |
709fb3 |
unsetenv ("LC_MESSAGES");
|
|
Packit |
709fb3 |
unsetenv ("LANG");
|
|
Packit |
709fb3 |
ASSERT (gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES") == NULL);
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
unsetenv ("LC_ALL");
|
|
Packit |
709fb3 |
unsetenv ("LC_CTYPE");
|
|
Packit |
709fb3 |
setenv ("LC_MESSAGES", "", 1);
|
|
Packit |
709fb3 |
unsetenv ("LANG");
|
|
Packit |
709fb3 |
ASSERT (gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES") == NULL);
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
unsetenv ("LC_ALL");
|
|
Packit |
709fb3 |
unsetenv ("LC_CTYPE");
|
|
Packit |
709fb3 |
unsetenv ("LC_MESSAGES");
|
|
Packit |
709fb3 |
setenv ("LANG", "", 1);
|
|
Packit |
709fb3 |
ASSERT (gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES") == NULL);
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
/* Check that LC_ALL overrides the others, and LANG is overridden by the
|
|
Packit |
709fb3 |
others. */
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
setenv ("LC_ALL", "C", 1);
|
|
Packit |
709fb3 |
unsetenv ("LC_CTYPE");
|
|
Packit |
709fb3 |
unsetenv ("LC_MESSAGES");
|
|
Packit |
709fb3 |
unsetenv ("LANG");
|
|
Packit |
709fb3 |
name = gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES");
|
|
Packit |
709fb3 |
ASSERT (strcmp (name, "C") == 0);
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
unsetenv ("LC_ALL");
|
|
Packit |
709fb3 |
setenv ("LC_CTYPE", "C", 1);
|
|
Packit |
709fb3 |
setenv ("LC_MESSAGES", "C", 1);
|
|
Packit |
709fb3 |
unsetenv ("LANG");
|
|
Packit |
709fb3 |
name = gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES");
|
|
Packit |
709fb3 |
ASSERT (strcmp (name, "C") == 0);
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
unsetenv ("LC_ALL");
|
|
Packit |
709fb3 |
unsetenv ("LC_CTYPE");
|
|
Packit |
709fb3 |
unsetenv ("LC_MESSAGES");
|
|
Packit |
709fb3 |
setenv ("LANG", "C", 1);
|
|
Packit |
709fb3 |
name = gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES");
|
|
Packit |
709fb3 |
ASSERT (strcmp (name, "C") == 0);
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
/* Check mixed situations. */
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
unsetenv ("LC_ALL");
|
|
Packit |
709fb3 |
unsetenv ("LC_CTYPE");
|
|
Packit |
709fb3 |
setenv ("LC_MESSAGES", "fr_FR.UTF-8", 1);
|
|
Packit |
709fb3 |
setenv ("LANG", "de_DE.UTF-8", 1);
|
|
Packit |
709fb3 |
name = gl_locale_name_environ (LC_CTYPE, "LC_CTYPE");
|
|
Packit |
709fb3 |
ASSERT (strcmp (name, "de_DE.UTF-8") == 0);
|
|
Packit |
709fb3 |
name = gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES");
|
|
Packit |
709fb3 |
ASSERT (strcmp (name, "fr_FR.UTF-8") == 0);
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
unsetenv ("LC_ALL");
|
|
Packit |
709fb3 |
unsetenv ("LC_CTYPE");
|
|
Packit |
709fb3 |
setenv ("LC_MESSAGES", "fr_FR.UTF-8", 1);
|
|
Packit |
709fb3 |
unsetenv ("LANG");
|
|
Packit |
709fb3 |
name = gl_locale_name_environ (LC_CTYPE, "LC_CTYPE");
|
|
Packit |
709fb3 |
ASSERT (name == NULL);
|
|
Packit |
709fb3 |
name = gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES");
|
|
Packit |
709fb3 |
ASSERT (strcmp (name, "fr_FR.UTF-8") == 0);
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
#if HAVE_NEWLOCALE && HAVE_USELOCALE
|
|
Packit |
709fb3 |
/* Check that gl_locale_name_environ ignores the thread locale. */
|
|
Packit |
709fb3 |
{
|
|
Packit |
709fb3 |
locale_t locale = newlocale (LC_ALL_MASK, "fr_FR.UTF-8", NULL);
|
|
Packit |
709fb3 |
if (locale != NULL)
|
|
Packit |
709fb3 |
{
|
|
Packit |
709fb3 |
unsetenv ("LC_ALL");
|
|
Packit |
709fb3 |
unsetenv ("LC_CTYPE");
|
|
Packit |
709fb3 |
unsetenv ("LC_MESSAGES");
|
|
Packit |
709fb3 |
setenv ("LANG", "C", 1);
|
|
Packit |
709fb3 |
setlocale (LC_ALL, "");
|
|
Packit |
709fb3 |
uselocale (locale);
|
|
Packit |
709fb3 |
name = gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES");
|
|
Packit |
709fb3 |
ASSERT (strcmp (name, "C") == 0);
|
|
Packit |
709fb3 |
uselocale (LC_GLOBAL_LOCALE);
|
|
Packit |
709fb3 |
freelocale (locale);
|
|
Packit |
709fb3 |
}
|
|
Packit |
709fb3 |
}
|
|
Packit |
709fb3 |
#endif
|
|
Packit |
709fb3 |
}
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
/* Test the gl_locale_name_default() function. */
|
|
Packit |
709fb3 |
static void
|
|
Packit |
709fb3 |
test_locale_name_default (void)
|
|
Packit |
709fb3 |
{
|
|
Packit |
709fb3 |
const char *name = gl_locale_name_default ();
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
ASSERT (name != NULL);
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
/* Only Mac OS X and Windows have a facility for the user to set the default
|
|
Packit |
709fb3 |
locale. */
|
|
Packit |
709fb3 |
#if !((defined __APPLE__ && defined __MACH__) || (defined _WIN32 || defined __WIN32__ || defined __CYGWIN__))
|
|
Packit |
709fb3 |
ASSERT (strcmp (name, "C") == 0);
|
|
Packit |
709fb3 |
#endif
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
#if HAVE_NEWLOCALE && HAVE_USELOCALE
|
|
Packit |
709fb3 |
/* Check that gl_locale_name_default ignores the thread locale. */
|
|
Packit |
709fb3 |
{
|
|
Packit |
709fb3 |
locale_t locale = newlocale (LC_ALL_MASK, "fr_FR.UTF-8", NULL);
|
|
Packit |
709fb3 |
if (locale != NULL)
|
|
Packit |
709fb3 |
{
|
|
Packit |
709fb3 |
uselocale (locale);
|
|
Packit |
709fb3 |
ASSERT (strcmp (gl_locale_name_default (), name) == 0);
|
|
Packit |
709fb3 |
uselocale (LC_GLOBAL_LOCALE);
|
|
Packit |
709fb3 |
freelocale (locale);
|
|
Packit |
709fb3 |
}
|
|
Packit |
709fb3 |
}
|
|
Packit |
709fb3 |
#endif
|
|
Packit |
709fb3 |
}
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
int
|
|
Packit |
709fb3 |
main ()
|
|
Packit |
709fb3 |
{
|
|
Packit |
709fb3 |
test_locale_name ();
|
|
Packit |
709fb3 |
test_locale_name_thread ();
|
|
Packit |
709fb3 |
test_locale_name_posix ();
|
|
Packit |
709fb3 |
test_locale_name_environ ();
|
|
Packit |
709fb3 |
test_locale_name_default ();
|
|
Packit |
709fb3 |
|
|
Packit |
709fb3 |
return 0;
|
|
Packit |
709fb3 |
}
|