NLS: nls_cp932 fix
PATCH 1/1 NLS: nls_cp932 fix
Some unicode chars is missing to convert on nls_cp932. This patch fixes the following chars.
U+00A2, U+00A3, U+00A7, U+00A8, U+00AC, U+00B0, U+00B1, U+00B4,
U+00B6, U+00D7, U+00F7, U+FFE2Signed-off-by OGAWA Hirofumi <[email protected]>
---
fs/nls/nls_cp932.c | 43 +++++++++++++++++++++++++++++++++++++++---- 1 files changed, 39 insertions(+), 4 deletions(-)
fs/nls/nls_cp932.c renamed from fs/nls/nls_cp932.c~nls_cp932-fix +39 -4
@@ -1619,6 +1619,33 @@ static wchar_t *page_charset2uni[256] = NULL, NULL, c2u_FA, c2u_FB, c2u_FC, NULL, NULL, NULL, }; +static unsigned char u2c_00hi[256 -0xA0 ][2 ] = { + {0x00 ,0x00 }, {0x00 ,0x00 }, {0x81 ,0x91 }, {0x81 ,0x92 },/* 0xA0-0xA3 */ + {0x00 ,0x00 }, {0x00 ,0x00 }, {0x00 ,0x00 }, {0x81 ,0x98 },/* 0xA4-0xA7 */ + {0x81 ,0x4E }, {0x00 ,0x00 }, {0x00 ,0x00 }, {0x00 ,0x00 },/* 0xA8-0xAB */ + {0x81 ,0xCA }, {0x00 ,0x00 }, {0x00 ,0x00 }, {0x00 ,0x00 },/* 0xAC-0xAF */ + {0x81 ,0x8B }, {0x81 ,0x7D }, {0x00 ,0x00 }, {0x00 ,0x00 },/* 0xB0-0xB3 */ + {0x81 ,0x4C }, {0x00 ,0x00 }, {0x81 ,0xF7 }, {0x00 ,0x00 },/* 0xB4-0xB7 */ + {0x00 ,0x00 }, {0x00 ,0x00 }, {0x00 ,0x00 }, {0x00 ,0x00 },/* 0xB8-0xBB */ + {0x00 ,0x00 }, {0x00 ,0x00 }, {0x00 ,0x00 }, {0x00 ,0x00 },/* 0xBC-0xBF */ + {0x00 ,0x00 }, {0x00 ,0x00 }, {0x00 ,0x00 }, {0x00 ,0x00 },/* 0xC0-0xC3 */ + {0x00 ,0x00 }, {0x00 ,0x00 }, {0x00 ,0x00 }, {0x00 ,0x00 },/* 0xC4-0xC7 */ + {0x00 ,0x00 }, {0x00 ,0x00 }, {0x00 ,0x00 }, {0x00 ,0x00 },/* 0xC8-0xCB */ + {0x00 ,0x00 }, {0x00 ,0x00 }, {0x00 ,0x00 }, {0x00 ,0x00 },/* 0xCC-0xCF */ + {0x00 ,0x00 }, {0x00 ,0x00 }, {0x00 ,0x00 }, {0x00 ,0x00 },/* 0xD0-0xD3 */ + {0x00 ,0x00 }, {0x00 ,0x00 }, {0x00 ,0x00 }, {0x81 ,0x7E },/* 0xD4-0xD7 */ + {0x00 ,0x00 }, {0x00 ,0x00 }, {0x00 ,0x00 }, {0x00 ,0x00 },/* 0xD8-0xDB */ + {0x00 ,0x00 }, {0x00 ,0x00 }, {0x00 ,0x00 }, {0x00 ,0x00 },/* 0xDC-0xDF */ + {0x00 ,0x00 }, {0x00 ,0x00 }, {0x00 ,0x00 }, {0x00 ,0x00 },/* 0xE0-0xE3 */ + {0x00 ,0x00 }, {0x00 ,0x00 }, {0x00 ,0x00 }, {0x00 ,0x00 },/* 0xE4-0xE7 */ + {0x00 ,0x00 }, {0x00 ,0x00 }, {0x00 ,0x00 }, {0x00 ,0x00 },/* 0xE8-0xEB */ + {0x00 ,0x00 }, {0x00 ,0x00 }, {0x00 ,0x00 }, {0x00 ,0x00 },/* 0xEC-0xEF */ + {0x00 ,0x00 }, {0x00 ,0x00 }, {0x00 ,0x00 }, {0x00 ,0x00 },/* 0xF0-0xF3 */ + {0x00 ,0x00 }, {0x00 ,0x00 }, {0x00 ,0x00 }, {0x81 ,0x80 },/* 0xF4-0xF7 */ + {0x00 ,0x00 }, {0x00 ,0x00 }, {0x00 ,0x00 }, {0x00 ,0x00 },/* 0xF8-0xFB */ + {0x00 ,0x00 }, {0x00 ,0x00 }, {0x00 ,0x00 }, {0x00 ,0x00 },/* 0xFC-0xFF */ +}; +static unsigned char u2c_03[512 ] = {0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,/* 0x00-0x03 */ 0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,/* 0x04-0x07 */
@@ -7708,7 +7735,7 @@ static unsigned char u2c_FF[512] = {0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,/* 0xD4-0xD7 */ 0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,/* 0xD8-0xDB */ 0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,/* 0xDC-0xDF */ -0x81 ,0x91 ,0x81 ,0x92 ,0xEE ,0xF9 ,0x81 ,0x50 ,/* 0xE0-0xE3 */ +0x81 ,0x91 ,0x81 ,0x92 ,0x81 ,0xCA ,0x81 ,0x50 ,/* 0xE0-0xE3 */ 0xEE, 0xFA, 0x81, 0x8F, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ };
@@ -7842,9 +7869,17 @@ static int uni2char(const wchar_t uni,if (out[0 ] ==0x00 && out[1 ] ==0x00 )return -EINVAL ;return 2 ; - }else if ((ch ==0 ) && (cl <=0x7F )) { - out[0 ] = cl; -return 1 ; + }else if (ch ==0 ) { +if (cl <=0x7F ) { + out[0 ] = cl; +return 1 ; + }else if (0xA0 <= cl) { + out[0 ] = u2c_00hi[cl -0xA0 ][0 ]; + out[1 ] = u2c_00hi[cl -0xA0 ][1 ]; +if (out[0 ] && out[1 ]) +return 2 ; + } +return -EINVAL ; }else return -EINVAL ;
_
Signature · 1 line
OGAWA Hirofumi <[email protected]>