From b37e1770c55db8c9ad71fcf924999cb10c166782 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 29 Sep 2007 00:14:40 +0000 Subject: [PATCH] Make use of additional chklocale.c entries to reject locales that we cannot support. --- src/bin/initdb/initdb.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/bin/initdb/initdb.c b/src/bin/initdb/initdb.c index 1216bbd67c..6f51eb1367 100644 --- a/src/bin/initdb/initdb.c +++ b/src/bin/initdb/initdb.c @@ -42,7 +42,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * Portions taken from FreeBSD. * - * $PostgreSQL: pgsql/src/bin/initdb/initdb.c,v 1.143 2007/09/28 22:25:49 tgl Exp $ + * $PostgreSQL: pgsql/src/bin/initdb/initdb.c,v 1.144 2007/09/29 00:14:40 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -2800,6 +2800,7 @@ main(int argc, char *argv[]) !(pg_strcasecmp(lc_ctype, "C") == 0 || pg_strcasecmp(lc_ctype, "POSIX") == 0)) { + /* Hmm, couldn't recognize the locale's codeset */ fprintf(stderr, _("%s: could not find suitable encoding for locale \"%s\"\n"), progname, lc_ctype); fprintf(stderr, _("Rerun %s with the -E option.\n"), progname); @@ -2807,6 +2808,18 @@ main(int argc, char *argv[]) progname); exit(1); } + else if (!PG_VALID_BE_ENCODING(ctype_enc)) + { + /* We recognized it, but it's not a legal server encoding */ + fprintf(stderr, + _("%s: locale %s requires unsupported encoding %s\n"), + progname, lc_ctype, pg_encoding_to_char(ctype_enc)); + fprintf(stderr, + _("Encoding %s is not allowed as a server-side encoding.\n" + "Rerun %s with a different locale selection.\n"), + pg_encoding_to_char(ctype_enc), progname); + exit(1); + } else { encodingid = encodingid_to_string(ctype_enc);