Fix recently-introduced memory leak in ssh2_msg_unexpected().
[sgt/putty] / unix / uxucs.c
index 071ecfc..9d8242f 100644 (file)
@@ -21,7 +21,7 @@ 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) {
@@ -29,7 +29,6 @@ int mb_to_wc(int codepage, int flags, char *mbstr, int mblen,
        mbstate_t state;
 
        memset(&state, 0, sizeof state);
-       setlocale(LC_CTYPE, "");
 
        while (mblen > 0) {
            size_t i = mbrtowc(wcstr+n, mbstr, (size_t)mblen, &state);
@@ -40,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;
@@ -59,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)
 {
@@ -73,7 +70,6 @@ int wc_to_mb(int codepage, int flags, wchar_t *wcstr, int wclen,
        int n = 0;
 
        memset(&state, 0, sizeof state);
-       setlocale(LC_CTYPE, "");
 
        while (wclen > 0) {
            int i = wcrtomb(output, wcstr[0], &state);
@@ -85,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;
@@ -162,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;
@@ -216,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;