Check for C/POSIX before assuming that nl_langinfo or win32_langinfo

will work.  Per buildfarm results.
This commit is contained in:
Tom Lane 2009-11-12 03:37:15 +00:00
parent 8f8a5df694
commit 8539a0e00a
1 changed files with 12 additions and 8 deletions

View File

@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/port/chklocale.c,v 1.12 2009/11/12 02:46:16 tgl Exp $
* $PostgreSQL: pgsql/src/port/chklocale.c,v 1.13 2009/11/12 03:37:15 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@ -237,6 +237,11 @@ pg_get_encoding_from_locale(const char *ctype)
char *save;
char *name;
/* If locale is C or POSIX, we can allow all encodings */
if (pg_strcasecmp(ctype, "C") == 0 ||
pg_strcasecmp(ctype, "POSIX") == 0)
return PG_SQL_ASCII;
save = setlocale(LC_CTYPE, NULL);
if (!save)
return -1; /* setlocale() broken? */
@ -269,6 +274,12 @@ pg_get_encoding_from_locale(const char *ctype)
ctype = setlocale(LC_CTYPE, NULL);
if (!ctype)
return -1; /* setlocale() broken? */
/* If locale is C or POSIX, we can allow all encodings */
if (pg_strcasecmp(ctype, "C") == 0 ||
pg_strcasecmp(ctype, "POSIX") == 0)
return PG_SQL_ASCII;
#ifndef WIN32
sys = nl_langinfo(CODESET);
if (sys)
@ -281,13 +292,6 @@ pg_get_encoding_from_locale(const char *ctype)
if (!sys)
return -1; /* out of memory; unlikely */
/* If locale is C or POSIX, we can allow all encodings */
if (pg_strcasecmp(ctype, "C") == 0 || pg_strcasecmp(ctype, "POSIX") == 0)
{
free(sys);
return PG_SQL_ASCII;
}
/* Check the table */
for (i = 0; encoding_match_list[i].system_enc_name; i++)
{