From: Tom Lane Date: Thu, 12 Nov 2009 03:37:15 +0000 (+0000) Subject: Check for C/POSIX before assuming that nl_langinfo or win32_langinfo X-Git-Tag: REL8_5_ALPHA3~131 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8539a0e00a39872a58dc004e3c131bfb7be23609;p=postgresql Check for C/POSIX before assuming that nl_langinfo or win32_langinfo will work. Per buildfarm results. --- diff --git a/src/port/chklocale.c b/src/port/chklocale.c index dd10887a34..1c62137611 100644 --- a/src/port/chklocale.c +++ b/src/port/chklocale.c @@ -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++) {