summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog3
-rw-r--r--Src/utils.c13
2 files changed, 16 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index bf26f2cb2..c7deeebdc 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
2008-02-26 Peter Stephenson <pws@csr.com>
+ * 24596: Src/utils.c: if nl_langinfo(CODESET) returns ""
+ or "646" use "US-ASCII".
+
* 24592: Src/utils.c: make errors about charset conversion
more explicit.
diff --git a/Src/utils.c b/Src/utils.c
index b25ea8506..271f2c046 100644
--- a/Src/utils.c
+++ b/Src/utils.c
@@ -4867,6 +4867,7 @@ getkeystring(char *s, int *len, int how, int *misc)
} else {
# ifdef HAVE_ICONV
ICONV_CONST char *inptr = inbuf;
+ const char *codesetstr = nl_langinfo(CODESET);
inbytes = 4;
outbytes = 6;
/* store value in big endian form */
@@ -4875,6 +4876,18 @@ getkeystring(char *s, int *len, int how, int *misc)
wval >>= 8;
}
+ /*
+ * If the code set isn't handled, we'd better
+ * assume it's US-ASCII rather than just failing
+ * hopelessly. Solaris has a weird habit of
+ * returning 646.
+ *
+ * It shouldn't ever be NULL, but while we're
+ * being paranoid...
+ */
+ if (!codessetstr || !*codsetstr ||
+ !strcmp(codesetstr, "646"))
+ codesetstr == "US-ASCII";
cd = iconv_open(nl_langinfo(CODESET), "UCS-4BE");
if (cd == (iconv_t)-1) {
zerr("cannot do charset conversion (iconv failed)");