OSDN Git Service

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 dd10887..1c62137 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++)
        {