From: Bruce Momjian Date: Mon, 15 Mar 2004 16:14:26 +0000 (+0000) Subject: Windows uses codepages rather than the environment, so we work around X-Git-Tag: REL8_0_0BETA1~986 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=dea47eee0619f5260fe7f0f44e58cf79251f0229;p=postgresql 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 --- diff --git a/src/backend/main/main.c b/src/backend/main/main.c index fe368f591a..b255757218 100644 --- a/src/backend/main/main.c +++ b/src/backend/main/main.c @@ -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