aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/port/chklocale.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/src/port/chklocale.c b/src/port/chklocale.c
index dd10887a34e..1c621376117 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++)
{