diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2009-11-12 02:46:16 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2009-11-12 02:46:16 +0000 |
commit | 8f8a5df694e7a012dfd762cb74d2083d83cf573b (patch) | |
tree | 8e5d3ff2b64bb8243238dfc283f9f5b260f191a7 /src/backend/utils/mb/mbutils.c | |
parent | 19d802767d7b9c37390c46d337e6558c0b60ea57 (diff) | |
download | postgresql-8f8a5df694e7a012dfd762cb74d2083d83cf573b.tar.gz postgresql-8f8a5df694e7a012dfd762cb74d2083d83cf573b.zip |
Make initdb behave sanely when the selected locale has codeset "US-ASCII".
Per discussion, this should result in defaulting to SQL_ASCII encoding.
The original coding could not support that because it conflated selection
of SQL_ASCII encoding with not being able to determine the encoding.
Adjust pg_get_encoding_from_locale()'s API to distinguish these cases,
and fix callers appropriately. Only initdb actually changes behavior,
since the other callers were perfectly content to consider these cases
equivalent.
Per bug #5178 from Boh Yap. Not going to bother back-patching, since
no one has complained before and there's an easy workaround (namely,
specify the encoding you want).
Diffstat (limited to 'src/backend/utils/mb/mbutils.c')
-rw-r--r-- | src/backend/utils/mb/mbutils.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/backend/utils/mb/mbutils.c b/src/backend/utils/mb/mbutils.c index 5aaaae502f8..c8a43dced6f 100644 --- a/src/backend/utils/mb/mbutils.c +++ b/src/backend/utils/mb/mbutils.c @@ -4,7 +4,7 @@ * * Tatsuo Ishii * - * $PostgreSQL: pgsql/src/backend/utils/mb/mbutils.c,v 1.91 2009/10/17 05:14:52 mha Exp $ + * $PostgreSQL: pgsql/src/backend/utils/mb/mbutils.c,v 1.92 2009/11/12 02:46:16 tgl Exp $ */ #include "postgres.h" @@ -984,7 +984,14 @@ int GetPlatformEncoding(void) { if (PlatformEncoding == NULL) - PlatformEncoding = &pg_enc2name_tbl[pg_get_encoding_from_locale("")]; + { + /* try to determine encoding of server's environment locale */ + int encoding = pg_get_encoding_from_locale(""); + + if (encoding < 0) + encoding = PG_SQL_ASCII; + PlatformEncoding = &pg_enc2name_tbl[encoding]; + } return PlatformEncoding->encoding; } |