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.

Andrew Dunstan
This commit is contained in:
Bruce Momjian 2004-03-15 16:14:26 +00:00
parent 221c0adaa8
commit dea47eee06
1 changed files with 27 additions and 1 deletions

View 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