X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=unix%2Fuxucs.c;h=9d8242f8b1876412d35b7b38015958bf15383c84;hb=3d466aec90909db75eef8b6aaeedcd56eb925a2a;hp=83595538a8138d7e6a6daffcb0684c28b0707007;hpb=1b3eb3e20d216fdd0a37e37a818e4b074f1d08ba;p=PuTTY.git diff --git a/unix/uxucs.c b/unix/uxucs.c index 83595538..9d8242f8 100644 --- a/unix/uxucs.c +++ b/unix/uxucs.c @@ -21,14 +21,14 @@ int is_dbcs_leadbyte(int codepage, char byte) return 0; /* we don't do DBCS */ } -int mb_to_wc(int codepage, int flags, char *mbstr, int mblen, +int mb_to_wc(int codepage, int flags, const char *mbstr, int mblen, wchar_t *wcstr, int wclen) { if (codepage == DEFAULT_CODEPAGE) { int n = 0; - mbstate_t state = { 0 }; + mbstate_t state; - setlocale(LC_CTYPE, ""); + memset(&state, 0, sizeof state); while (mblen > 0) { size_t i = mbrtowc(wcstr+n, mbstr, (size_t)mblen, &state); @@ -39,8 +39,6 @@ int mb_to_wc(int codepage, int flags, char *mbstr, int mblen, mblen -= i; } - setlocale(LC_CTYPE, "C"); - return n; } else if (codepage == CS_NONE) { int n = 0; @@ -58,7 +56,7 @@ int mb_to_wc(int codepage, int flags, char *mbstr, int mblen, NULL, NULL, 0); } -int wc_to_mb(int codepage, int flags, wchar_t *wcstr, int wclen, +int wc_to_mb(int codepage, int flags, const wchar_t *wcstr, int wclen, char *mbstr, int mblen, char *defchr, int *defused, struct unicode_data *ucsdata) { @@ -68,10 +66,10 @@ int wc_to_mb(int codepage, int flags, wchar_t *wcstr, int wclen, if (codepage == DEFAULT_CODEPAGE) { char output[MB_LEN_MAX]; - mbstate_t state = { 0 }; + mbstate_t state; int n = 0; - setlocale(LC_CTYPE, ""); + memset(&state, 0, sizeof state); while (wclen > 0) { int i = wcrtomb(output, wcstr[0], &state); @@ -83,8 +81,6 @@ int wc_to_mb(int codepage, int flags, wchar_t *wcstr, int wclen, wclen--; } - setlocale(LC_CTYPE, "C"); - return n; } else if (codepage == CS_NONE) { int n = 0; @@ -137,7 +133,7 @@ int init_ucs(struct unicode_data *ucsdata, char *linecharset, /* * Failing that, line_codepage should be decoded from the - * specification in cfg. + * specification in conf. */ if (ucsdata->line_codepage == CS_NONE) ucsdata->line_codepage = decode_codepage(linecharset); @@ -160,7 +156,8 @@ int init_ucs(struct unicode_data *ucsdata, char *linecharset, * in the line codepage into Unicode. */ for (i = 0; i < 256; i++) { - char c[1], *p; + char c[1]; + const char *p; wchar_t wc[1]; int len; c[0] = i; @@ -214,7 +211,8 @@ int init_ucs(struct unicode_data *ucsdata, char *linecharset, * simply CP437. */ for (i = 0; i < 256; i++) { - char c[1], *p; + char c[1]; + const char *p; wchar_t wc[1]; int len; c[0] = i;