From f6e9cbfd9153958226b27e31d658e7b64351c71f Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 9 Jun 2015 13:37:08 -0400 Subject: [PATCH] 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. --- src/backend/main/main.c | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/backend/main/main.c b/src/backend/main/main.c index 2f07a58a4c..2ecadd660c 100644 --- a/src/backend/main/main.c +++ b/src/backend/main/main.c @@ -43,7 +43,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); @@ -116,31 +116,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 @@ -280,11 +280,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); }