X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=unix%2Fuxucs.c;h=164d8890855a974d9d3331e6ed86041218e41b4f;hb=5b061e20cffa379dcc58d5cef103ae84c056bab6;hp=580f94b9fd46f3e782f221db1f4cdeec1480f17d;hpb=77a43c5d7a65a28b2bd3783b700140cb00e4cc83;p=PuTTY.git 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 +}