X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/2c0380dc65ab5ea511633764aaa59de4c07e669b..faec60ed7e3ba7a6b0972672bea7322625a63915:/unix/uxucs.c diff --git a/unix/uxucs.c b/unix/uxucs.c index 580f94b9..164d8890 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! */ } @@ -111,4 +133,4 @@ void init_ucs(void) unitab_line[i] = unitab_scoacs[i] = i; unitab_xterm[i] = (i+1) & 0x1F; } -} \ No newline at end of file +}