X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/1709795fee167cc2d2d423df0161e7963376b910..bab6e572e4fef5c2b91bf8002ad977341b721488:/unix/uxucs.c diff --git a/unix/uxucs.c b/unix/uxucs.c index fbd4e967..7d56b321 100644 --- a/unix/uxucs.c +++ b/unix/uxucs.c @@ -92,7 +92,29 @@ int mb_to_wc(int codepage, int flags, char *mbstr, int mblen, int ret = 0; while (mblen > 0 && wclen > 0) { *wcstr++ = (unsigned char) *mbstr++; - ret++; + mblen--, wclen--, ret++; + } + return ret; /* FIXME: check error codes! */ +} + +int wc_to_mb(int codepage, int flags, wchar_t *wcstr, int wclen, + char *mbstr, int mblen, char *defchr, int *defused) +{ + int ret = 0; + if (defused) + *defused = 0; + while (mblen > 0 && wclen > 0) { + if (*wcstr >= 0x100) { + if (defchr) + *mbstr++ = *defchr; + else + *mbstr++ = '\xBF'; + if (defused) + *defused = 1; + } else + *mbstr++ = (unsigned char) *wcstr; + wcstr++; + mblen--, wclen--, ret++; } return ret; /* FIXME: check error codes! */ } @@ -109,6 +131,6 @@ void init_ucs(void) for (i = 0; i < 256; i++) { unitab_line[i] = unitab_scoacs[i] = i; - unitab_xterm[i] = i & 0x1F; + unitab_xterm[i] = (i+1) & 0x1F; } } \ No newline at end of file