diff --git a/Modules/cjkcodecs/_big5.c b/Modules/cjkcodecs/_big5.c
index 8f9a290..2ba0bc5 100644
--- a/Modules/cjkcodecs/_big5.c
+++ b/Modules/cjkcodecs/_big5.c
@@ -18,7 +18,7 @@
 
         if (c < 0x80) {
             RESERVE_OUTBUF(1)
-            **outbuf = c;
+            **outbuf = (unsigned char)c;
             NEXT(1, 1)
             continue;
         }
diff --git a/Modules/cjkcodecs/_cp932.c b/Modules/cjkcodecs/_cp932.c
index 0f21b12..870c1c6 100644
--- a/Modules/cjkcodecs/_cp932.c
+++ b/Modules/cjkcodecs/_cp932.c
@@ -20,7 +20,7 @@
         unsigned char    c1, c2;
 
         if (c <= 0x80) {
-            WRITE1(c)
+            WRITE1((unsigned char)c)
             NEXT(1, 1)
             continue;
         } else if (c >= 0xff61 && c <= 0xff9f) {
diff --git a/Modules/cjkcodecs/_cp949.c b/Modules/cjkcodecs/_cp949.c
index f2fa38c..17f51c5 100644
--- a/Modules/cjkcodecs/_cp949.c
+++ b/Modules/cjkcodecs/_cp949.c
@@ -18,7 +18,7 @@
         DBCHAR      code;
 
         if (c < 0x80) {
-            WRITE1(c)
+            WRITE1((unsigned char)c)
             NEXT(1, 1)
             continue;
         }
diff --git a/Modules/cjkcodecs/_cp950.c b/Modules/cjkcodecs/_cp950.c
index b0644f0..dcb56f1 100644
--- a/Modules/cjkcodecs/_cp950.c
+++ b/Modules/cjkcodecs/_cp950.c
@@ -19,7 +19,7 @@
         DBCHAR      code;
 
         if (c < 0x80) {
-            WRITE1(c)
+            WRITE1((unsigned char)c)
             NEXT(1, 1)
             continue;
         }
diff --git a/Modules/cjkcodecs/_euc_jisx0213.c b/Modules/cjkcodecs/_euc_jisx0213.c
index 3f7fbd7..8f59aca 100644
--- a/Modules/cjkcodecs/_euc_jisx0213.c
+++ b/Modules/cjkcodecs/_euc_jisx0213.c
@@ -43,18 +43,18 @@
                 if (code == MULTIC) {
                     if (inleft < 2) {
                         if (flags & MBENC_FLUSH) {
-                            code = find_pairencmap(c, 0, jisx0213_pairencmap,
-                                                JISX0213_ENCPAIRS);
+                            code = find_pairencmap((ucs2_t)c, 0,
+                                     jisx0213_pairencmap, JISX0213_ENCPAIRS);
                             if (code == DBCINV)
                                 return 1;
                         } else
                             return MBERR_TOOFEW;
                     } else {
-                        code = find_pairencmap(c, (*inbuf)[1],
-                                    jisx0213_pairencmap, JISX0213_ENCPAIRS);
+                        code = find_pairencmap((ucs2_t)c, (*inbuf)[1],
+                                     jisx0213_pairencmap, JISX0213_ENCPAIRS);
                         if (code == DBCINV) {
-                            code = find_pairencmap(c, 0, jisx0213_pairencmap,
-                                                JISX0213_ENCPAIRS);
+                            code = find_pairencmap((ucs2_t)c, 0,
+                                     jisx0213_pairencmap, JISX0213_ENCPAIRS);
                             if (code == DBCINV)
                                 return 1;
                         } else
diff --git a/Modules/cjkcodecs/_euc_jp.c b/Modules/cjkcodecs/_euc_jp.c
index 0392133..72a4b20 100644
--- a/Modules/cjkcodecs/_euc_jp.c
+++ b/Modules/cjkcodecs/_euc_jp.c
@@ -18,7 +18,7 @@
         DBCHAR      code;
 
         if (c < 0x80) {
-            WRITE1(c)
+            WRITE1((unsigned char)c)
             NEXT(1, 1)
             continue;
         }
diff --git a/Modules/cjkcodecs/_euc_kr.c b/Modules/cjkcodecs/_euc_kr.c
index 96cd3d4..fa97890 100644
--- a/Modules/cjkcodecs/_euc_kr.c
+++ b/Modules/cjkcodecs/_euc_kr.c
@@ -17,7 +17,7 @@
         DBCHAR      code;
 
         if (c < 0x80) {
-            WRITE1(c)
+            WRITE1((unsigned char)c)
             NEXT(1, 1)
             continue;
         }
diff --git a/Modules/cjkcodecs/_gb2312.c b/Modules/cjkcodecs/_gb2312.c
index 388f0b8..7659860 100644
--- a/Modules/cjkcodecs/_gb2312.c
+++ b/Modules/cjkcodecs/_gb2312.c
@@ -17,7 +17,7 @@
         DBCHAR      code;
 
         if (c < 0x80) {
-            WRITE1(c)
+            WRITE1((unsigned char)c)
             NEXT(1, 1)
             continue;
         }
diff --git a/Modules/cjkcodecs/_gbk.c b/Modules/cjkcodecs/_gbk.c
index b5d058a..246b5c6 100644
--- a/Modules/cjkcodecs/_gbk.c
+++ b/Modules/cjkcodecs/_gbk.c
@@ -19,7 +19,7 @@
         DBCHAR      code;
 
         if (c < 0x80) {
-            WRITE1(c)
+            WRITE1((unsigned char)c)
             NEXT(1, 1)
             continue;
         }
diff --git a/Modules/cjkcodecs/_hz.c b/Modules/cjkcodecs/_hz.c
index 50805b1..19f910c 100644
--- a/Modules/cjkcodecs/_hz.c
+++ b/Modules/cjkcodecs/_hz.c
@@ -36,10 +36,10 @@
 
         if (c < 0x80) {
             if (state->i == 0) {
-                WRITE1(c)
+                WRITE1((unsigned char)c)
                 NEXT(1, 1)
             } else {
-                WRITE3('~', '}', c)
+                WRITE3('~', '}', (unsigned char)c)
                 NEXT(1, 3)
                 state->i = 0;
             }
diff --git a/Modules/cjkcodecs/_iso2022_jp.c b/Modules/cjkcodecs/_iso2022_jp.c
index d0b3b1f..486fe99 100644
--- a/Modules/cjkcodecs/_iso2022_jp.c
+++ b/Modules/cjkcodecs/_iso2022_jp.c
@@ -49,7 +49,7 @@
         if (c < 0x80) {
             switch (STATE_GETG0(state)) {
             case CHARSET_ASCII:
-                WRITE1(c)
+                WRITE1((unsigned char)c)
                 NEXT(1, 1)
                 break;
             case CHARSET_JISX0201_R:
@@ -61,7 +61,7 @@
                     STATE_SETG0(state, CHARSET_ASCII)
                     code = c;
                 }
-                WRITE1(code)
+                WRITE1((unsigned char)code)
                 NEXT(1, 1)
                 break;
             }
@@ -77,7 +77,7 @@
                 code = DBCINV;
                 JISX0201_R_ENCODE(c, code)
                 if (code != DBCINV) {
-                    WRITE1(code)
+                    WRITE1((unsigned char)code)
                     NEXT(1, 1)
                     continue;
                 }
@@ -101,7 +101,7 @@
                 else
                     return 1;
                 /* if (charset == CHARSET_JISX0201_R) : already checked */
-                WRITE4(ESC, '(', 'J', code)
+                WRITE4(ESC, '(', 'J', (unsigned char)code)
                 STATE_SETG0(state, CHARSET_JISX0201_R)
                 NEXT(1, 4)
             }
diff --git a/Modules/cjkcodecs/_iso2022_jp_1.c b/Modules/cjkcodecs/_iso2022_jp_1.c
index 2cf04ad..3464af4 100644
--- a/Modules/cjkcodecs/_iso2022_jp_1.c
+++ b/Modules/cjkcodecs/_iso2022_jp_1.c
@@ -51,7 +51,7 @@
         if (c < 0x80) {
             switch (STATE_GETG0(state)) {
             case CHARSET_ASCII:
-                WRITE1(c)
+                WRITE1((unsigned char)c)
                 NEXT(1, 1)
                 break;
             case CHARSET_JISX0201_R:
@@ -63,7 +63,7 @@
                     STATE_SETG0(state, CHARSET_ASCII)
                     code = c;
                 }
-                WRITE1(code)
+                WRITE1((unsigned char)code)
                 NEXT(1, 1)
                 break;
             }
@@ -79,7 +79,7 @@
                 code = DBCINV;
                 JISX0201_R_ENCODE(c, code)
                 if (code != DBCINV) {
-                    WRITE1(code)
+                    WRITE1((unsigned char)code)
                     NEXT(1, 1)
                     continue;
                 }
@@ -110,7 +110,7 @@
                 else
                     return 1;
                 /* if (charset == CHARSET_JISX0201_R) : already checked */
-                WRITE4(ESC, '(', 'J', code)
+                WRITE4(ESC, '(', 'J', (unsigned char)code)
                 STATE_SETG0(state, CHARSET_JISX0201_R)
                 NEXT(1, 4)
             }
diff --git a/Modules/cjkcodecs/_iso2022_jp_2.c b/Modules/cjkcodecs/_iso2022_jp_2.c
index d16aa67..c2ec012 100644
--- a/Modules/cjkcodecs/_iso2022_jp_2.c
+++ b/Modules/cjkcodecs/_iso2022_jp_2.c
@@ -57,7 +57,7 @@
         if (c < 0x80) {
             switch (STATE_GETG0(state)) {
             case CHARSET_ASCII:
-                WRITE1(c)
+                WRITE1((unsigned char)c)
                 NEXT(1, 1)
                 break;
             case CHARSET_JISX0201_R:
@@ -69,7 +69,7 @@
                     STATE_SETG0(state, CHARSET_ASCII)
                     code = c;
                 }
-                WRITE1(code)
+                WRITE1((unsigned char)code)
                 NEXT(1, 1)
                 break;
             }
@@ -85,7 +85,7 @@
                 code = DBCINV;
                 JISX0201_R_ENCODE(c, code)
                 if (code != DBCINV) {
-                    WRITE1(code)
+                    WRITE1((unsigned char)code)
                     NEXT(1, 1)
                     continue;
                 }
@@ -140,7 +140,7 @@
                     return 1;
                 }
                 /* if (charset == CHARSET_JISX0201_R) : already checked */
-                WRITE4(ESC, '(', 'J', code)
+                WRITE4(ESC, '(', 'J', (unsigned char)code)
                 STATE_SETG0(state, CHARSET_JISX0201_R)
                 NEXT(1, 4)
             }
diff --git a/Modules/cjkcodecs/_iso2022_jp_3.c b/Modules/cjkcodecs/_iso2022_jp_3.c
index 00a90fd..5d3242d 100644
--- a/Modules/cjkcodecs/_iso2022_jp_3.c
+++ b/Modules/cjkcodecs/_iso2022_jp_3.c
@@ -80,18 +80,18 @@
             if (code == MULTIC) {
                 if (inleft < 2) {
                     if (flags & MBENC_FLUSH) {
-                        code = find_pairencmap(c, 0, jisx0213_pairencmap,
-                                            JISX0213_ENCPAIRS);
+                        code = find_pairencmap((ucs2_t)c, 0,
+                                    jisx0213_pairencmap, JISX0213_ENCPAIRS);
                         if (code == DBCINV)
                             return 1;
                     } else
                         return MBERR_TOOFEW;
                 } else {
-                    code = find_pairencmap(c, IN2,
+                    code = find_pairencmap((ucs2_t)c, IN2,
                                 jisx0213_pairencmap, JISX0213_ENCPAIRS);
                     if (code == DBCINV) {
-                        code = find_pairencmap(c, 0, jisx0213_pairencmap,
-                                            JISX0213_ENCPAIRS);
+                        code = find_pairencmap((ucs2_t)c, 0,
+                                    jisx0213_pairencmap, JISX0213_ENCPAIRS);
                         if (code == DBCINV)
                             return 1;
                     } else
diff --git a/Modules/cjkcodecs/_iso2022_jp_ext.c b/Modules/cjkcodecs/_iso2022_jp_ext.c
index 5cd0d94..8225911 100644
--- a/Modules/cjkcodecs/_iso2022_jp_ext.c
+++ b/Modules/cjkcodecs/_iso2022_jp_ext.c
@@ -49,7 +49,7 @@
         if (c < 0x80) {
             switch (STATE_GETG0(state)) {
             case CHARSET_ASCII:
-                WRITE1(c)
+                WRITE1((unsigned char)c)
                 NEXT(1, 1)
                 break;
             case CHARSET_JISX0201_R:
@@ -61,7 +61,7 @@
                     STATE_SETG0(state, CHARSET_ASCII)
                     code = c;
                 }
-                WRITE1(code)
+                WRITE1((unsigned char)code)
                 NEXT(1, 1)
                 break;
             }
@@ -77,7 +77,7 @@
                 code = DBCINV;
                 JISX0201_R_ENCODE(c, code)
                 if (code != DBCINV) {
-                    WRITE1(code)
+                    WRITE1((unsigned char)code)
                     NEXT(1, 1)
                     continue;
                 }
@@ -110,7 +110,7 @@
 
                 if (code < 0x80) { /* JIS X 0201 Roman */
                     /* if (charset == CHARSET_JISX0201_R) : already checked */
-                    WRITE4(ESC, '(', 'J', code)
+                    WRITE4(ESC, '(', 'J', (unsigned char)code)
                     STATE_SETG0(state, CHARSET_JISX0201_R)
                     NEXT(1, 4)
                 } else { /* JIS X 0201 Katakana */
diff --git a/Modules/cjkcodecs/_iso2022_kr.c b/Modules/cjkcodecs/_iso2022_kr.c
index f890cd3..3fbe1df 100644
--- a/Modules/cjkcodecs/_iso2022_kr.c
+++ b/Modules/cjkcodecs/_iso2022_kr.c
@@ -43,11 +43,11 @@
 
         if (c < 0x80) {
             if (STATE_GETFLAG(state, F_SHIFTED)) {
-                WRITE2(SI, c)
+                WRITE2(SI, (unsigned char)c)
                 STATE_CLEARFLAG(state, F_SHIFTED)
                 NEXT(1, 2)
             } else {
-                WRITE1(c)
+                WRITE1((unsigned char)c)
                 NEXT(1, 1)
             }
             if (c == '\n')
diff --git a/Modules/cjkcodecs/_johab.c b/Modules/cjkcodecs/_johab.c
index 3aeb500..3199704 100644
--- a/Modules/cjkcodecs/_johab.c
+++ b/Modules/cjkcodecs/_johab.c
@@ -44,7 +44,7 @@
         DBCHAR      code;
 
         if (c < 0x80) {
-            WRITE1(c)
+            WRITE1((unsigned char)c)
             NEXT(1, 1)
             continue;
         }
diff --git a/Modules/cjkcodecs/_shift_jis.c b/Modules/cjkcodecs/_shift_jis.c
index 0bdee3f..3619a3a 100644
--- a/Modules/cjkcodecs/_shift_jis.c
+++ b/Modules/cjkcodecs/_shift_jis.c
@@ -32,7 +32,7 @@
         if (code < 0x80 || (code >= 0xa1 && code <= 0xdf)) {
             RESERVE_OUTBUF(1)
 
-            OUT1(code)
+            OUT1((unsigned char)code)
             NEXT(1, 1)
             continue;
         }
diff --git a/Modules/cjkcodecs/_shift_jisx0213.c b/Modules/cjkcodecs/_shift_jisx0213.c
index fd622b0..0b24fec 100644
--- a/Modules/cjkcodecs/_shift_jisx0213.c
+++ b/Modules/cjkcodecs/_shift_jisx0213.c
@@ -33,7 +33,7 @@
     else DECODE_SURROGATE(c)
 
     if (code < 0x80 || (code >= 0xa1 && code <= 0xdf)) {
-        WRITE1(code)
+        WRITE1((unsigned char)code)
         NEXT(1, 1)
         continue;
     }
@@ -47,18 +47,18 @@
                 if (code == MULTIC) {
                     if (inleft < 2) {
                         if (flags & MBENC_FLUSH) {
-                            code = find_pairencmap(c, 0, jisx0213_pairencmap,
-                                                JISX0213_ENCPAIRS);
+                            code = find_pairencmap((ucs2_t)c, 0,
+                                     jisx0213_pairencmap, JISX0213_ENCPAIRS);
                             if (code == DBCINV)
                                 return 1;
                         } else
                             return MBERR_TOOFEW;
                     } else {
-                        code = find_pairencmap(c, IN2,
+                        code = find_pairencmap((ucs2_t)c, IN2,
                                     jisx0213_pairencmap, JISX0213_ENCPAIRS);
                         if (code == DBCINV) {
-                            code = find_pairencmap(c, 0, jisx0213_pairencmap,
-                                                JISX0213_ENCPAIRS);
+                            code = find_pairencmap((ucs2_t)c, 0,
+                                     jisx0213_pairencmap, JISX0213_ENCPAIRS);
                             if (code == DBCINV)
                                 return 1;
                         } else
diff --git a/Modules/cjkcodecs/iso2022common.h b/Modules/cjkcodecs/iso2022common.h
index cb8a159..e042d80 100644
--- a/Modules/cjkcodecs/iso2022common.h
+++ b/Modules/cjkcodecs/iso2022common.h
@@ -183,7 +183,7 @@
                   const unsigned char **inbuf, size_t *inleft)
 {
     unsigned char charset, designation;
-    int  i, esclen;
+    size_t  i, esclen;
 
     for (i = 1;i < MAX_ESCSEQLEN;i++) {
         if (i >= *inleft)
