24596: use "US-ASCII" as charset if nl_langinfo(CODESET) returns "" or "646"

This commit is contained in:
Peter Stephenson 2008-02-26 16:19:33 +00:00
parent f674ea76d2
commit 4c7bb13f63
2 changed files with 16 additions and 0 deletions

View File

@ -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.

View File

@ -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)");