Check for C/POSIX before assuming that nl_langinfo or win32_langinfo
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 12 Nov 2009 03:37:15 +0000 (03:37 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 12 Nov 2009 03:37:15 +0000 (03:37 +0000)
will work.  Per buildfarm results.

src/port/chklocale.c

index dd10887a34e24cfb010f5a0b676d9db313822ae8..1c62137611781162ae1d4511d25bfc8a4336c2a1 100644 (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++)
    {