1 /* 1 /* 2 * linux/fs/nls/nls_iso8859-5.c 2 * linux/fs/nls/nls_iso8859-5.c 3 * 3 * 4 * Charset iso8859-5 translation tables. 4 * Charset iso8859-5 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 0x0080, 0x0081, 0x0082, 0x0083, 58 0x0080, 0x0081, 0x0082, 0x0083, 59 0x0084, 0x0085, 0x0086, 0x0087, 59 0x0084, 0x0085, 0x0086, 0x0087, 60 0x0088, 0x0089, 0x008a, 0x008b, 60 0x0088, 0x0089, 0x008a, 0x008b, 61 0x008c, 0x008d, 0x008e, 0x008f, 61 0x008c, 0x008d, 0x008e, 0x008f, 62 /* 0x90*/ 62 /* 0x90*/ 63 0x0090, 0x0091, 0x0092, 0x0093, 63 0x0090, 0x0091, 0x0092, 0x0093, 64 0x0094, 0x0095, 0x0096, 0x0097, 64 0x0094, 0x0095, 0x0096, 0x0097, 65 0x0098, 0x0099, 0x009a, 0x009b, 65 0x0098, 0x0099, 0x009a, 0x009b, 66 0x009c, 0x009d, 0x009e, 0x009f, 66 0x009c, 0x009d, 0x009e, 0x009f, 67 /* 0xa0*/ 67 /* 0xa0*/ 68 0x00a0, 0x0401, 0x0402, 0x0403, 68 0x00a0, 0x0401, 0x0402, 0x0403, 69 0x0404, 0x0405, 0x0406, 0x0407, 69 0x0404, 0x0405, 0x0406, 0x0407, 70 0x0408, 0x0409, 0x040a, 0x040b, 70 0x0408, 0x0409, 0x040a, 0x040b, 71 0x040c, 0x00ad, 0x040e, 0x040f, 71 0x040c, 0x00ad, 0x040e, 0x040f, 72 /* 0xb0*/ 72 /* 0xb0*/ 73 0x0410, 0x0411, 0x0412, 0x0413, 73 0x0410, 0x0411, 0x0412, 0x0413, 74 0x0414, 0x0415, 0x0416, 0x0417, 74 0x0414, 0x0415, 0x0416, 0x0417, 75 0x0418, 0x0419, 0x041a, 0x041b, 75 0x0418, 0x0419, 0x041a, 0x041b, 76 0x041c, 0x041d, 0x041e, 0x041f, 76 0x041c, 0x041d, 0x041e, 0x041f, 77 /* 0xc0*/ 77 /* 0xc0*/ 78 0x0420, 0x0421, 0x0422, 0x0423, 78 0x0420, 0x0421, 0x0422, 0x0423, 79 0x0424, 0x0425, 0x0426, 0x0427, 79 0x0424, 0x0425, 0x0426, 0x0427, 80 0x0428, 0x0429, 0x042a, 0x042b, 80 0x0428, 0x0429, 0x042a, 0x042b, 81 0x042c, 0x042d, 0x042e, 0x042f, 81 0x042c, 0x042d, 0x042e, 0x042f, 82 /* 0xd0*/ 82 /* 0xd0*/ 83 0x0430, 0x0431, 0x0432, 0x0433, 83 0x0430, 0x0431, 0x0432, 0x0433, 84 0x0434, 0x0435, 0x0436, 0x0437, 84 0x0434, 0x0435, 0x0436, 0x0437, 85 0x0438, 0x0439, 0x043a, 0x043b, 85 0x0438, 0x0439, 0x043a, 0x043b, 86 0x043c, 0x043d, 0x043e, 0x043f, 86 0x043c, 0x043d, 0x043e, 0x043f, 87 /* 0xe0*/ 87 /* 0xe0*/ 88 0x0440, 0x0441, 0x0442, 0x0443, 88 0x0440, 0x0441, 0x0442, 0x0443, 89 0x0444, 0x0445, 0x0446, 0x0447, 89 0x0444, 0x0445, 0x0446, 0x0447, 90 0x0448, 0x0449, 0x044a, 0x044b, 90 0x0448, 0x0449, 0x044a, 0x044b, 91 0x044c, 0x044d, 0x044e, 0x044f, 91 0x044c, 0x044d, 0x044e, 0x044f, 92 /* 0xf0*/ 92 /* 0xf0*/ 93 0x2116, 0x0451, 0x0452, 0x0453, 93 0x2116, 0x0451, 0x0452, 0x0453, 94 0x0454, 0x0455, 0x0456, 0x0457, 94 0x0454, 0x0455, 0x0456, 0x0457, 95 0x0458, 0x0459, 0x045a, 0x045b, 95 0x0458, 0x0459, 0x045a, 0x045b, 96 0x045c, 0x00a7, 0x045e, 0x045f, 96 0x045c, 0x00a7, 0x045e, 0x045f, 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 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x 117 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x80-0x87 */ 118 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x 118 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */ 119 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x 119 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x90-0x97 */ 120 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x 120 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x98-0x9f */ 121 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 121 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, /* 0xa0-0xa7 */ 122 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0x 122 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, /* 0xa8-0xaf */ 123 }; 123 }; 124 124 125 static const unsigned char page04[256] = { 125 static const unsigned char page04[256] = { 126 0x00, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0x 126 0x00, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0x00-0x07 */ 127 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0x00, 0x 127 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0x00, 0xae, 0xaf, /* 0x08-0x0f */ 128 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0x 128 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0x10-0x17 */ 129 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0x 129 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0x18-0x1f */ 130 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0x 130 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x20-0x27 */ 131 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0x 131 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x28-0x2f */ 132 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0x 132 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0x30-0x37 */ 133 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0x 133 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0x38-0x3f */ 134 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0x 134 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x40-0x47 */ 135 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0x 135 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x48-0x4f */ 136 0x00, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0x 136 0x00, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x50-0x57 */ 137 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0x00, 0x 137 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0x00, 0xfe, 0xff, /* 0x58-0x5f */ 138 }; 138 }; 139 139 140 static const unsigned char page21[256] = { 140 static const unsigned char page21[256] = { 141 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 141 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ 142 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 142 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ 143 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 143 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, /* 0x10-0x17 */ 144 }; 144 }; 145 145 146 static const unsigned char *const page_uni2cha 146 static const unsigned char *const page_uni2charset[256] = { 147 page00, NULL, NULL, NULL, page04 147 page00, NULL, NULL, NULL, page04, NULL, NULL, NULL, 148 NULL, NULL, NULL, NULL, NULL, 148 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 149 NULL, NULL, NULL, NULL, NULL, 149 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 150 NULL, NULL, NULL, NULL, NULL, 150 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 151 NULL, page21, NULL, NULL, NULL, 151 NULL, page21, NULL, NULL, NULL, NULL, NULL, NULL, 152 }; 152 }; 153 153 154 static const unsigned char charset2lower[256] 154 static const unsigned char charset2lower[256] = { 155 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x 155 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ 156 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x 156 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ 157 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x 157 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ 158 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x 158 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ 159 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x 159 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ 160 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x 160 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ 161 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x 161 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ 162 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x 162 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ 163 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x 163 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x40-0x47 */ 164 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x 164 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x48-0x4f */ 165 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x 165 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x50-0x57 */ 166 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x 166 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ 167 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x 167 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ 168 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x 168 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ 169 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x 169 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ 170 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x 170 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ 171 171 172 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x 172 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x80-0x87 */ 173 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x 173 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */ 174 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x 174 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x90-0x97 */ 175 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x 175 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x98-0x9f */ 176 0xa0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0x 176 0xa0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xa0-0xa7 */ 177 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xad, 0x 177 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xad, 0xfe, 0xff, /* 0xa8-0xaf */ 178 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0x 178 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xb0-0xb7 */ 179 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0x 179 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xb8-0xbf */ 180 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0x 180 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xc0-0xc7 */ 181 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0x 181 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xc8-0xcf */ 182 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0x 182 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ 183 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0x 183 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ 184 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0x 184 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ 185 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0x 185 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ 186 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0x 186 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ 187 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0x 187 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ 188 }; 188 }; 189 189 190 static const unsigned char charset2upper[256] 190 static const unsigned char charset2upper[256] = { 191 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x 191 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ 192 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x 192 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ 193 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x 193 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ 194 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x 194 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ 195 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x 195 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ 196 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x 196 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ 197 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x 197 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ 198 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x 198 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ 199 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x 199 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ 200 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x 200 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ 201 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x 201 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ 202 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x 202 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ 203 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x 203 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x60-0x67 */ 204 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x 204 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x68-0x6f */ 205 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x 205 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x70-0x77 */ 206 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x 206 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ 207 207 208 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x 208 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x80-0x87 */ 209 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x 209 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */ 210 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x 210 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x90-0x97 */ 211 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x 211 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x98-0x9f */ 212 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0x 212 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ 213 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0x 213 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ 214 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0x 214 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ 215 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0x 215 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ 216 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0x 216 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ 217 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0x 217 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ 218 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0x 218 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xd0-0xd7 */ 219 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0x 219 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xd8-0xdf */ 220 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0x 220 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xe0-0xe7 */ 221 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0x 221 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xe8-0xef */ 222 0xf0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0x 222 0xf0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xf0-0xf7 */ 223 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xfd, 0x 223 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xfd, 0xae, 0xaf, /* 0xf8-0xff */ 224 }; 224 }; 225 225 226 static int uni2char(wchar_t uni, unsigned char 226 static int uni2char(wchar_t uni, unsigned char *out, int boundlen) 227 { 227 { 228 const unsigned char *uni2charset; 228 const unsigned char *uni2charset; 229 unsigned char cl = uni & 0x00ff; 229 unsigned char cl = uni & 0x00ff; 230 unsigned char ch = (uni & 0xff00) >> 8 230 unsigned char ch = (uni & 0xff00) >> 8; 231 231 232 if (boundlen <= 0) 232 if (boundlen <= 0) 233 return -ENAMETOOLONG; 233 return -ENAMETOOLONG; 234 234 235 uni2charset = page_uni2charset[ch]; 235 uni2charset = page_uni2charset[ch]; 236 if (uni2charset && uni2charset[cl]) 236 if (uni2charset && uni2charset[cl]) 237 out[0] = uni2charset[cl]; 237 out[0] = uni2charset[cl]; 238 else 238 else 239 return -EINVAL; 239 return -EINVAL; 240 return 1; 240 return 1; 241 } 241 } 242 242 243 static int char2uni(const unsigned char *rawst 243 static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni) 244 { 244 { 245 *uni = charset2uni[*rawstring]; 245 *uni = charset2uni[*rawstring]; 246 if (*uni == 0x0000) 246 if (*uni == 0x0000) 247 return -EINVAL; 247 return -EINVAL; 248 return 1; 248 return 1; 249 } 249 } 250 250 251 static struct nls_table table = { 251 static struct nls_table table = { 252 .charset = "iso8859-5", 252 .charset = "iso8859-5", 253 .uni2char = uni2char, 253 .uni2char = uni2char, 254 .char2uni = char2uni, 254 .char2uni = char2uni, 255 .charset2lower = charset2lower, 255 .charset2lower = charset2lower, 256 .charset2upper = charset2upper, 256 .charset2upper = charset2upper, 257 }; 257 }; 258 258 259 static int __init init_nls_iso8859_5(void) 259 static int __init init_nls_iso8859_5(void) 260 { 260 { 261 return register_nls(&table); 261 return register_nls(&table); 262 } 262 } 263 263 264 static void __exit exit_nls_iso8859_5(void) 264 static void __exit exit_nls_iso8859_5(void) 265 { 265 { 266 unregister_nls(&table); 266 unregister_nls(&table); 267 } 267 } 268 268 269 module_init(init_nls_iso8859_5) 269 module_init(init_nls_iso8859_5) 270 module_exit(exit_nls_iso8859_5) 270 module_exit(exit_nls_iso8859_5) 271 271 272 MODULE_DESCRIPTION("NLS ISO 8859-5 (Cyrillic)" << 273 MODULE_LICENSE("Dual BSD/GPL"); 272 MODULE_LICENSE("Dual BSD/GPL"); 274 273
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.