OSDN Git Service

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 1216bbd..6f51eb1 100644 (file)
@@ -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);