diff options
author | Tom Lane | 2007-09-28 23:36:06 +0000 |
---|---|---|
committer | Tom Lane | 2007-09-28 23:36:06 +0000 |
commit | c7bafa75d3d7fdb4e3642784091060d7f2f23791 (patch) | |
tree | 4f7b462b30e5cfc043103f8b801f543478399dbc | |
parent | bbbcb03f95e4a10c244c8cf1882025e6a8cd05f2 (diff) |
On OS X, assume that an empty-string result for nl_langinfo(CODESET)
means UTF-8. Per examination of /usr/share/locale in 10.4.10.
-rw-r--r-- | src/port/chklocale.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/port/chklocale.c b/src/port/chklocale.c index 92bf4db2b5..10658c78bb 100644 --- a/src/port/chklocale.c +++ b/src/port/chklocale.c @@ -158,6 +158,7 @@ pg_get_encoding_from_locale(const char *ctype) char *sys; int i; + /* Get the CODESET property, and also LC_CTYPE if not passed in */ if (ctype) { char *save; @@ -197,12 +198,14 @@ pg_get_encoding_from_locale(const char *ctype) if (!sys) return PG_SQL_ASCII; /* out of memory; unlikely */ + /* If locale is C or POSIX, we can allow all encodings */ if (pg_strcasecmp(ctype, "C") == 0 || pg_strcasecmp(ctype, "POSIX") == 0) { free(sys); return PG_SQL_ASCII; } + /* Check the table */ for (i = 0; encoding_match_list[i].system_enc_name; i++) { if (pg_strcasecmp(sys, encoding_match_list[i].system_enc_name) == 0) @@ -212,6 +215,20 @@ pg_get_encoding_from_locale(const char *ctype) } } + /* Special-case kluges for particular platforms go here */ + +#ifdef __darwin__ + /* + * Current OS X has many locales that report an empty string for CODESET, + * but they all seem to actually use UTF-8. + */ + if (strlen(sys) == 0) + { + free(sys); + return PG_UTF8; + } +#endif + /* * We print a warning if we got a CODESET string but couldn't recognize * it. This means we need another entry in the table. |