diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2015-06-09 13:37:08 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2015-06-09 13:37:08 -0400 |
commit | 7a4211ebd2a57f6b78ae05c6d93efc5fd1d94735 (patch) | |
tree | bca5220f2418e87f5d91291701e917bbd973cba0 | |
parent | 18935145e7f31ca975e0763f73c8c3f12aa62672 (diff) | |
download | postgresql-7a4211ebd2a57f6b78ae05c6d93efc5fd1d94735.tar.gz postgresql-7a4211ebd2a57f6b78ae05c6d93efc5fd1d94735.zip |
Report more information if pg_perm_setlocale() fails at startup.
We don't know why a few Windows users have seen this fail, but the
taciturnity of the error message certainly isn't helping debug it.
Let's at least find out which LC category isn't working.
-rw-r--r-- | src/backend/main/main.c | 27 |
1 files changed, 14 insertions, 13 deletions
diff --git a/src/backend/main/main.c b/src/backend/main/main.c index ce5930922b1..e28023dbe48 100644 --- a/src/backend/main/main.c +++ b/src/backend/main/main.c @@ -51,7 +51,7 @@ const char *progname; static void startup_hacks(const char *progname); -static void init_locale(int category, const char *locale); +static void init_locale(const char *categoryname, int category, const char *locale); static void help(const char *progname); static void check_root(const char *progname); static char *get_current_username(const char *progname); @@ -125,31 +125,31 @@ main(int argc, char *argv[]) char *env_locale; if ((env_locale = getenv("LC_COLLATE")) != NULL) - init_locale(LC_COLLATE, env_locale); + init_locale("LC_COLLATE", LC_COLLATE, env_locale); else - init_locale(LC_COLLATE, ""); + init_locale("LC_COLLATE", LC_COLLATE, ""); if ((env_locale = getenv("LC_CTYPE")) != NULL) - init_locale(LC_CTYPE, env_locale); + init_locale("LC_CTYPE", LC_CTYPE, env_locale); else - init_locale(LC_CTYPE, ""); + init_locale("LC_CTYPE", LC_CTYPE, ""); } #else - init_locale(LC_COLLATE, ""); - init_locale(LC_CTYPE, ""); + init_locale("LC_COLLATE", LC_COLLATE, ""); + init_locale("LC_CTYPE", LC_CTYPE, ""); #endif #ifdef LC_MESSAGES - init_locale(LC_MESSAGES, ""); + init_locale("LC_MESSAGES", LC_MESSAGES, ""); #endif /* * We keep these set to "C" always, except transiently in pg_locale.c; see * that file for explanations. */ - init_locale(LC_MONETARY, "C"); - init_locale(LC_NUMERIC, "C"); - init_locale(LC_TIME, "C"); + init_locale("LC_MONETARY", LC_MONETARY, "C"); + init_locale("LC_NUMERIC", LC_NUMERIC, "C"); + init_locale("LC_TIME", LC_TIME, "C"); /* * Now that we have absorbed as much as we wish to from the locale @@ -303,11 +303,12 @@ startup_hacks(const char *progname) * category's environment variable. */ static void -init_locale(int category, const char *locale) +init_locale(const char *categoryname, int category, const char *locale) { if (pg_perm_setlocale(category, locale) == NULL && pg_perm_setlocale(category, "C") == NULL) - elog(FATAL, "could not adopt C locale"); + elog(FATAL, "could not adopt \"%s\" locale nor C locale for %s", + locale, categoryname); } |