1 /* 1 /* 2 * linux/fs/nls/nls_cp874.c 2 * linux/fs/nls/nls_cp874.c 3 * 3 * 4 * Charset cp874 translation tables. 4 * Charset cp874 translation tables. 5 * Generated automatically from the Unicode an 5 * Generated automatically from the Unicode and charset 6 * tables from the Unicode Organization (www.u 6 * tables from the Unicode Organization (www.unicode.org). 7 * The Unicode to charset table has only exact 7 * The Unicode to charset table has only exact mappings. 8 */ 8 */ 9 9 10 #include <linux/module.h> 10 #include <linux/module.h> 11 #include <linux/kernel.h> 11 #include <linux/kernel.h> 12 #include <linux/string.h> 12 #include <linux/string.h> 13 #include <linux/nls.h> 13 #include <linux/nls.h> 14 #include <linux/errno.h> 14 #include <linux/errno.h> 15 15 16 static const wchar_t charset2uni[256] = { 16 static const wchar_t charset2uni[256] = { 17 /* 0x00*/ 17 /* 0x00*/ 18 0x0000, 0x0001, 0x0002, 0x0003, 18 0x0000, 0x0001, 0x0002, 0x0003, 19 0x0004, 0x0005, 0x0006, 0x0007, 19 0x0004, 0x0005, 0x0006, 0x0007, 20 0x0008, 0x0009, 0x000a, 0x000b, 20 0x0008, 0x0009, 0x000a, 0x000b, 21 0x000c, 0x000d, 0x000e, 0x000f, 21 0x000c, 0x000d, 0x000e, 0x000f, 22 /* 0x10*/ 22 /* 0x10*/ 23 0x0010, 0x0011, 0x0012, 0x0013, 23 0x0010, 0x0011, 0x0012, 0x0013, 24 0x0014, 0x0015, 0x0016, 0x0017, 24 0x0014, 0x0015, 0x0016, 0x0017, 25 0x0018, 0x0019, 0x001a, 0x001b, 25 0x0018, 0x0019, 0x001a, 0x001b, 26 0x001c, 0x001d, 0x001e, 0x001f, 26 0x001c, 0x001d, 0x001e, 0x001f, 27 /* 0x20*/ 27 /* 0x20*/ 28 0x0020, 0x0021, 0x0022, 0x0023, 28 0x0020, 0x0021, 0x0022, 0x0023, 29 0x0024, 0x0025, 0x0026, 0x0027, 29 0x0024, 0x0025, 0x0026, 0x0027, 30 0x0028, 0x0029, 0x002a, 0x002b, 30 0x0028, 0x0029, 0x002a, 0x002b, 31 0x002c, 0x002d, 0x002e, 0x002f, 31 0x002c, 0x002d, 0x002e, 0x002f, 32 /* 0x30*/ 32 /* 0x30*/ 33 0x0030, 0x0031, 0x0032, 0x0033, 33 0x0030, 0x0031, 0x0032, 0x0033, 34 0x0034, 0x0035, 0x0036, 0x0037, 34 0x0034, 0x0035, 0x0036, 0x0037, 35 0x0038, 0x0039, 0x003a, 0x003b, 35 0x0038, 0x0039, 0x003a, 0x003b, 36 0x003c, 0x003d, 0x003e, 0x003f, 36 0x003c, 0x003d, 0x003e, 0x003f, 37 /* 0x40*/ 37 /* 0x40*/ 38 0x0040, 0x0041, 0x0042, 0x0043, 38 0x0040, 0x0041, 0x0042, 0x0043, 39 0x0044, 0x0045, 0x0046, 0x0047, 39 0x0044, 0x0045, 0x0046, 0x0047, 40 0x0048, 0x0049, 0x004a, 0x004b, 40 0x0048, 0x0049, 0x004a, 0x004b, 41 0x004c, 0x004d, 0x004e, 0x004f, 41 0x004c, 0x004d, 0x004e, 0x004f, 42 /* 0x50*/ 42 /* 0x50*/ 43 0x0050, 0x0051, 0x0052, 0x0053, 43 0x0050, 0x0051, 0x0052, 0x0053, 44 0x0054, 0x0055, 0x0056, 0x0057, 44 0x0054, 0x0055, 0x0056, 0x0057, 45 0x0058, 0x0059, 0x005a, 0x005b, 45 0x0058, 0x0059, 0x005a, 0x005b, 46 0x005c, 0x005d, 0x005e, 0x005f, 46 0x005c, 0x005d, 0x005e, 0x005f, 47 /* 0x60*/ 47 /* 0x60*/ 48 0x0060, 0x0061, 0x0062, 0x0063, 48 0x0060, 0x0061, 0x0062, 0x0063, 49 0x0064, 0x0065, 0x0066, 0x0067, 49 0x0064, 0x0065, 0x0066, 0x0067, 50 0x0068, 0x0069, 0x006a, 0x006b, 50 0x0068, 0x0069, 0x006a, 0x006b, 51 0x006c, 0x006d, 0x006e, 0x006f, 51 0x006c, 0x006d, 0x006e, 0x006f, 52 /* 0x70*/ 52 /* 0x70*/ 53 0x0070, 0x0071, 0x0072, 0x0073, 53 0x0070, 0x0071, 0x0072, 0x0073, 54 0x0074, 0x0075, 0x0076, 0x0077, 54 0x0074, 0x0075, 0x0076, 0x0077, 55 0x0078, 0x0079, 0x007a, 0x007b, 55 0x0078, 0x0079, 0x007a, 0x007b, 56 0x007c, 0x007d, 0x007e, 0x007f, 56 0x007c, 0x007d, 0x007e, 0x007f, 57 /* 0x80*/ 57 /* 0x80*/ 58 0x0000, 0x0000, 0x0000, 0x0000, 58 0x0000, 0x0000, 0x0000, 0x0000, 59 0x0000, 0x2026, 0x0000, 0x0000, 59 0x0000, 0x2026, 0x0000, 0x0000, 60 0x0000, 0x0000, 0x0000, 0x0000, 60 0x0000, 0x0000, 0x0000, 0x0000, 61 0x0000, 0x0000, 0x0000, 0x0000, 61 0x0000, 0x0000, 0x0000, 0x0000, 62 /* 0x90*/ 62 /* 0x90*/ 63 0x0000, 0x2018, 0x2019, 0x201c, 63 0x0000, 0x2018, 0x2019, 0x201c, 64 0x201d, 0x2022, 0x2013, 0x2014, 64 0x201d, 0x2022, 0x2013, 0x2014, 65 0x0000, 0x0000, 0x0000, 0x0000, 65 0x0000, 0x0000, 0x0000, 0x0000, 66 0x0000, 0x0000, 0x0000, 0x0000, 66 0x0000, 0x0000, 0x0000, 0x0000, 67 /* 0xa0*/ 67 /* 0xa0*/ 68 0x00a0, 0x0e01, 0x0e02, 0x0e03, 68 0x00a0, 0x0e01, 0x0e02, 0x0e03, 69 0x0e04, 0x0e05, 0x0e06, 0x0e07, 69 0x0e04, 0x0e05, 0x0e06, 0x0e07, 70 0x0e08, 0x0e09, 0x0e0a, 0x0e0b, 70 0x0e08, 0x0e09, 0x0e0a, 0x0e0b, 71 0x0e0c, 0x0e0d, 0x0e0e, 0x0e0f, 71 0x0e0c, 0x0e0d, 0x0e0e, 0x0e0f, 72 /* 0xb0*/ 72 /* 0xb0*/ 73 0x0e10, 0x0e11, 0x0e12, 0x0e13, 73 0x0e10, 0x0e11, 0x0e12, 0x0e13, 74 0x0e14, 0x0e15, 0x0e16, 0x0e17, 74 0x0e14, 0x0e15, 0x0e16, 0x0e17, 75 0x0e18, 0x0e19, 0x0e1a, 0x0e1b, 75 0x0e18, 0x0e19, 0x0e1a, 0x0e1b, 76 0x0e1c, 0x0e1d, 0x0e1e, 0x0e1f, 76 0x0e1c, 0x0e1d, 0x0e1e, 0x0e1f, 77 /* 0xc0*/ 77 /* 0xc0*/ 78 0x0e20, 0x0e21, 0x0e22, 0x0e23, 78 0x0e20, 0x0e21, 0x0e22, 0x0e23, 79 0x0e24, 0x0e25, 0x0e26, 0x0e27, 79 0x0e24, 0x0e25, 0x0e26, 0x0e27, 80 0x0e28, 0x0e29, 0x0e2a, 0x0e2b, 80 0x0e28, 0x0e29, 0x0e2a, 0x0e2b, 81 0x0e2c, 0x0e2d, 0x0e2e, 0x0e2f, 81 0x0e2c, 0x0e2d, 0x0e2e, 0x0e2f, 82 /* 0xd0*/ 82 /* 0xd0*/ 83 0x0e30, 0x0e31, 0x0e32, 0x0e33, 83 0x0e30, 0x0e31, 0x0e32, 0x0e33, 84 0x0e34, 0x0e35, 0x0e36, 0x0e37, 84 0x0e34, 0x0e35, 0x0e36, 0x0e37, 85 0x0e38, 0x0e39, 0x0e3a, 0x0000, 85 0x0e38, 0x0e39, 0x0e3a, 0x0000, 86 0x0000, 0x0000, 0x0000, 0x0e3f, 86 0x0000, 0x0000, 0x0000, 0x0e3f, 87 /* 0xe0*/ 87 /* 0xe0*/ 88 0x0e40, 0x0e41, 0x0e42, 0x0e43, 88 0x0e40, 0x0e41, 0x0e42, 0x0e43, 89 0x0e44, 0x0e45, 0x0e46, 0x0e47, 89 0x0e44, 0x0e45, 0x0e46, 0x0e47, 90 0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 90 0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 91 0x0e4c, 0x0e4d, 0x0e4e, 0x0e4f, 91 0x0e4c, 0x0e4d, 0x0e4e, 0x0e4f, 92 /* 0xf0*/ 92 /* 0xf0*/ 93 0x0e50, 0x0e51, 0x0e52, 0x0e53, 93 0x0e50, 0x0e51, 0x0e52, 0x0e53, 94 0x0e54, 0x0e55, 0x0e56, 0x0e57, 94 0x0e54, 0x0e55, 0x0e56, 0x0e57, 95 0x0e58, 0x0e59, 0x0e5a, 0x0e5b, 95 0x0e58, 0x0e59, 0x0e5a, 0x0e5b, 96 0x0000, 0x0000, 0x0000, 0x0000, 96 0x0000, 0x0000, 0x0000, 0x0000, 97 }; 97 }; 98 98 99 static const unsigned char page00[256] = { 99 static const unsigned char page00[256] = { 100 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x 100 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ 101 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x 101 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ 102 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x 102 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ 103 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x 103 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ 104 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x 104 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ 105 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x 105 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ 106 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x 106 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ 107 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x 107 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ 108 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x 108 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ 109 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x 109 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ 110 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x 110 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ 111 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x 111 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ 112 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x 112 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ 113 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x 113 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ 114 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x 114 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ 115 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x 115 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ 116 116 117 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 117 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ 118 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 118 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ 119 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 119 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ 120 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 120 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ 121 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 121 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ 122 }; 122 }; 123 123 124 static const unsigned char page0e[256] = { 124 static const unsigned char page0e[256] = { 125 0x00, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0x 125 0x00, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0x00-0x07 */ 126 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0x 126 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0x08-0x0f */ 127 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0x 127 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0x10-0x17 */ 128 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0x 128 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0x18-0x1f */ 129 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0x 129 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x20-0x27 */ 130 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0x 130 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x28-0x2f */ 131 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0x 131 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0x30-0x37 */ 132 0xd8, 0xd9, 0xda, 0x00, 0x00, 0x00, 0x 132 0xd8, 0xd9, 0xda, 0x00, 0x00, 0x00, 0x00, 0xdf, /* 0x38-0x3f */ 133 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0x 133 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x40-0x47 */ 134 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0x 134 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x48-0x4f */ 135 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0x 135 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x50-0x57 */ 136 0xf8, 0xf9, 0xfa, 0xfb, 0x00, 0x00, 0x 136 0xf8, 0xf9, 0xfa, 0xfb, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ 137 }; 137 }; 138 138 139 static const unsigned char page20[256] = { 139 static const unsigned char page20[256] = { 140 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 140 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ 141 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 141 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ 142 0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x 142 0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00, /* 0x10-0x17 */ 143 0x91, 0x92, 0x00, 0x00, 0x93, 0x94, 0x 143 0x91, 0x92, 0x00, 0x00, 0x93, 0x94, 0x00, 0x00, /* 0x18-0x1f */ 144 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x 144 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0x20-0x27 */ 145 }; 145 }; 146 146 147 static const unsigned char *const page_uni2cha 147 static const unsigned char *const page_uni2charset[256] = { 148 page00, NULL, NULL, NULL, NULL, 148 page00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 149 NULL, NULL, NULL, NULL, NULL, 149 NULL, NULL, NULL, NULL, NULL, NULL, page0e, NULL, 150 NULL, NULL, NULL, NULL, NULL, 150 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 151 NULL, NULL, NULL, NULL, NULL, 151 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 152 page20, NULL, NULL, NULL, NULL, 152 page20, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 153 }; 153 }; 154 154 155 static const unsigned char charset2lower[256] 155 static const unsigned char charset2lower[256] = { 156 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x 156 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ 157 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x 157 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ 158 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x 158 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ 159 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x 159 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ 160 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x 160 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ 161 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x 161 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ 162 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x 162 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ 163 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x 163 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ 164 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x 164 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x40-0x47 */ 165 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x 165 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x48-0x4f */ 166 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x 166 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x50-0x57 */ 167 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x 167 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ 168 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x 168 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ 169 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x 169 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ 170 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x 170 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ 171 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x 171 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ 172 172 173 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x 173 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, /* 0x80-0x87 */ 174 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 174 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ 175 0x00, 0x91, 0x92, 0x93, 0x94, 0x95, 0x 175 0x00, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x90-0x97 */ 176 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 176 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ 177 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0x 177 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ 178 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0x 178 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ 179 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0x 179 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ 180 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0x 180 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ 181 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0x 181 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ 182 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0x 182 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ 183 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0x 183 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ 184 0xd8, 0xd9, 0xda, 0x00, 0x00, 0x00, 0x 184 0xd8, 0xd9, 0xda, 0x00, 0x00, 0x00, 0x00, 0xdf, /* 0xd8-0xdf */ 185 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0x 185 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ 186 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0x 186 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ 187 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0x 187 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ 188 0xf8, 0xf9, 0xfa, 0xfb, 0x00, 0x00, 0x 188 0xf8, 0xf9, 0xfa, 0xfb, 0x00, 0x00, 0x00, 0x00, /* 0xf8-0xff */ 189 }; 189 }; 190 190 191 static const unsigned char charset2upper[256] 191 static const unsigned char charset2upper[256] = { 192 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x 192 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ 193 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x 193 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ 194 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x 194 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ 195 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x 195 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ 196 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x 196 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ 197 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x 197 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ 198 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x 198 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ 199 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x 199 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ 200 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x 200 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ 201 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x 201 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ 202 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x 202 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ 203 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x 203 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ 204 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x 204 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x60-0x67 */ 205 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x 205 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x68-0x6f */ 206 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x 206 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x70-0x77 */ 207 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x 207 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ 208 208 209 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x 209 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, /* 0x80-0x87 */ 210 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 210 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ 211 0x00, 0x91, 0x92, 0x93, 0x94, 0x95, 0x 211 0x00, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x90-0x97 */ 212 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 212 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ 213 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0x 213 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ 214 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0x 214 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ 215 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0x 215 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ 216 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0x 216 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ 217 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0x 217 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ 218 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0x 218 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ 219 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0x 219 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ 220 0xd8, 0xd9, 0xda, 0x00, 0x00, 0x00, 0x 220 0xd8, 0xd9, 0xda, 0x00, 0x00, 0x00, 0x00, 0xdf, /* 0xd8-0xdf */ 221 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0x 221 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ 222 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0x 222 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ 223 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0x 223 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ 224 0xf8, 0xf9, 0xfa, 0xfb, 0x00, 0x00, 0x 224 0xf8, 0xf9, 0xfa, 0xfb, 0x00, 0x00, 0x00, 0x00, /* 0xf8-0xff */ 225 }; 225 }; 226 226 227 static int uni2char(wchar_t uni, unsigned char 227 static int uni2char(wchar_t uni, unsigned char *out, int boundlen) 228 { 228 { 229 const unsigned char *uni2charset; 229 const unsigned char *uni2charset; 230 unsigned char cl = uni & 0x00ff; 230 unsigned char cl = uni & 0x00ff; 231 unsigned char ch = (uni & 0xff00) >> 8 231 unsigned char ch = (uni & 0xff00) >> 8; 232 232 233 if (boundlen <= 0) 233 if (boundlen <= 0) 234 return -ENAMETOOLONG; 234 return -ENAMETOOLONG; 235 235 236 uni2charset = page_uni2charset[ch]; 236 uni2charset = page_uni2charset[ch]; 237 if (uni2charset && uni2charset[cl]) 237 if (uni2charset && uni2charset[cl]) 238 out[0] = uni2charset[cl]; 238 out[0] = uni2charset[cl]; 239 else 239 else 240 return -EINVAL; 240 return -EINVAL; 241 return 1; 241 return 1; 242 } 242 } 243 243 244 static int char2uni(const unsigned char *rawst 244 static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni) 245 { 245 { 246 *uni = charset2uni[*rawstring]; 246 *uni = charset2uni[*rawstring]; 247 if (*uni == 0x0000) 247 if (*uni == 0x0000) 248 return -EINVAL; 248 return -EINVAL; 249 return 1; 249 return 1; 250 } 250 } 251 251 252 static struct nls_table table = { 252 static struct nls_table table = { 253 .charset = "cp874", 253 .charset = "cp874", 254 .alias = "tis-620", 254 .alias = "tis-620", 255 .uni2char = uni2char, 255 .uni2char = uni2char, 256 .char2uni = char2uni, 256 .char2uni = char2uni, 257 .charset2lower = charset2lower, 257 .charset2lower = charset2lower, 258 .charset2upper = charset2upper, 258 .charset2upper = charset2upper, 259 }; 259 }; 260 260 261 static int __init init_nls_cp874(void) 261 static int __init init_nls_cp874(void) 262 { 262 { 263 return register_nls(&table); 263 return register_nls(&table); 264 } 264 } 265 265 266 static void __exit exit_nls_cp874(void) 266 static void __exit exit_nls_cp874(void) 267 { 267 { 268 unregister_nls(&table); 268 unregister_nls(&table); 269 } 269 } 270 270 271 module_init(init_nls_cp874) 271 module_init(init_nls_cp874) 272 module_exit(exit_nls_cp874) 272 module_exit(exit_nls_cp874) 273 273 274 MODULE_DESCRIPTION("NLS Thai charset (CP874, T << 275 MODULE_LICENSE("Dual BSD/GPL"); 274 MODULE_LICENSE("Dual BSD/GPL"); 276 MODULE_ALIAS_NLS(tis-620); 275 MODULE_ALIAS_NLS(tis-620); 277 276
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.