diff options
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | Src/utils.c | 13 |
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)"); |