Make use of additional chklocale.c entries to reject locales that we
authorTom Lane <tgl@sss.pgh.pa.us>
Sat, 29 Sep 2007 00:14:40 +0000 (00:14 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sat, 29 Sep 2007 00:14:40 +0000 (00:14 +0000)
cannot support.

src/bin/initdb/initdb.c

index 745fe9e8487289b334bfec8ca0cd758d92035b42..59442eb1f5704fdc647ad672017811224df7282d 100644 (file)
@@ -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);