]> granicus.if.org Git - postgresql/commitdiff
Windows uses codepages rather than the environment, so we work around
authorBruce Momjian <bruce@momjian.us>
Mon, 15 Mar 2004 16:14:26 +0000 (16:14 +0000)
committerBruce Momjian <bruce@momjian.us>
Mon, 15 Mar 2004 16:14:26 +0000 (16:14 +0000)
that by querying the environment explicitly first for LC_COLLATE and
LC_CTYPE. We have to do this because initdb passes those values in the
environment. If there is nothing there we fall back on the codepage.

Andrew Dunstan

src/backend/main/main.c

index fe368f591aeda12f8541313d97d0256b29efcafd..b2557572184399831c85120073488c77b6b4bd00 100644 (file)
@@ -13,7 +13,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/main/main.c,v 1.75 2004/03/05 01:11:04 momjian Exp $
+ *       $PostgreSQL: pgsql/src/backend/main/main.c,v 1.76 2004/03/15 16:14:26 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -74,6 +74,10 @@ main(int argc, char *argv[])
 #endif   /* NOPRINTADE */
 #endif   /* __alpha */
 
+#ifdef WIN32
+       char *env_locale;
+#endif
+
 #if defined(NOFIXADE) || defined(NOPRINTADE)
 
 #if defined(ultrix4)
@@ -143,8 +147,30 @@ main(int argc, char *argv[])
         * set later during GUC option processing, but we set it here to allow
         * startup error messages to be localized.
         */
+
+#ifdef WIN32
+       /* 
+        * Windows uses codepages rather than the environment, so we work around
+        * that by querying the environment explicitly first for LC_COLLATE
+        * and LC_CTYPE. We have to do this because initdb passes those values
+        * in the environment. If there is nothing there we fall back on the
+        * codepage.
+        */
+
+       if ((env_locale = getenv("LC_COLLATE")) != NULL)
+           setlocale(LC_COLLATE,env_locale);
+       else
+         setlocale(LC_COLLATE, "");
+
+       if ((env_locale = getenv("LC_CTYPE")) != NULL)
+           setlocale(LC_CTYPE,env_locale);
+       else
+         setlocale(LC_CTYPE, "");
+#else
        setlocale(LC_COLLATE, "");
        setlocale(LC_CTYPE, "");
+#endif
+
 #ifdef LC_MESSAGES
        setlocale(LC_MESSAGES, "");
 #endif