1 /* 1 /* 2 * linux/fs/nls/nls_iso8859-15.c 2 * linux/fs/nls/nls_iso8859-15.c 3 * 3 * 4 * Charset iso8859-15 translation tables. 4 * Charset iso8859-15 translation tables. 5 * The Unicode to charset table has only exact 5 * The Unicode to charset table has only exact mappings. 6 */ 6 */ 7 7 8 #include <linux/module.h> 8 #include <linux/module.h> 9 #include <linux/kernel.h> 9 #include <linux/kernel.h> 10 #include <linux/string.h> 10 #include <linux/string.h> 11 #include <linux/nls.h> 11 #include <linux/nls.h> 12 #include <linux/errno.h> 12 #include <linux/errno.h> 13 13 14 static const wchar_t charset2uni[256] = { 14 static const wchar_t charset2uni[256] = { 15 /* 0x00*/ 15 /* 0x00*/ 16 0x0000, 0x0001, 0x0002, 0x0003, 16 0x0000, 0x0001, 0x0002, 0x0003, 17 0x0004, 0x0005, 0x0006, 0x0007, 17 0x0004, 0x0005, 0x0006, 0x0007, 18 0x0008, 0x0009, 0x000a, 0x000b, 18 0x0008, 0x0009, 0x000a, 0x000b, 19 0x000c, 0x000d, 0x000e, 0x000f, 19 0x000c, 0x000d, 0x000e, 0x000f, 20 /* 0x10*/ 20 /* 0x10*/ 21 0x0010, 0x0011, 0x0012, 0x0013, 21 0x0010, 0x0011, 0x0012, 0x0013, 22 0x0014, 0x0015, 0x0016, 0x0017, 22 0x0014, 0x0015, 0x0016, 0x0017, 23 0x0018, 0x0019, 0x001a, 0x001b, 23 0x0018, 0x0019, 0x001a, 0x001b, 24 0x001c, 0x001d, 0x001e, 0x001f, 24 0x001c, 0x001d, 0x001e, 0x001f, 25 /* 0x20*/ 25 /* 0x20*/ 26 0x0020, 0x0021, 0x0022, 0x0023, 26 0x0020, 0x0021, 0x0022, 0x0023, 27 0x0024, 0x0025, 0x0026, 0x0027, 27 0x0024, 0x0025, 0x0026, 0x0027, 28 0x0028, 0x0029, 0x002a, 0x002b, 28 0x0028, 0x0029, 0x002a, 0x002b, 29 0x002c, 0x002d, 0x002e, 0x002f, 29 0x002c, 0x002d, 0x002e, 0x002f, 30 /* 0x30*/ 30 /* 0x30*/ 31 0x0030, 0x0031, 0x0032, 0x0033, 31 0x0030, 0x0031, 0x0032, 0x0033, 32 0x0034, 0x0035, 0x0036, 0x0037, 32 0x0034, 0x0035, 0x0036, 0x0037, 33 0x0038, 0x0039, 0x003a, 0x003b, 33 0x0038, 0x0039, 0x003a, 0x003b, 34 0x003c, 0x003d, 0x003e, 0x003f, 34 0x003c, 0x003d, 0x003e, 0x003f, 35 /* 0x40*/ 35 /* 0x40*/ 36 0x0040, 0x0041, 0x0042, 0x0043, 36 0x0040, 0x0041, 0x0042, 0x0043, 37 0x0044, 0x0045, 0x0046, 0x0047, 37 0x0044, 0x0045, 0x0046, 0x0047, 38 0x0048, 0x0049, 0x004a, 0x004b, 38 0x0048, 0x0049, 0x004a, 0x004b, 39 0x004c, 0x004d, 0x004e, 0x004f, 39 0x004c, 0x004d, 0x004e, 0x004f, 40 /* 0x50*/ 40 /* 0x50*/ 41 0x0050, 0x0051, 0x0052, 0x0053, 41 0x0050, 0x0051, 0x0052, 0x0053, 42 0x0054, 0x0055, 0x0056, 0x0057, 42 0x0054, 0x0055, 0x0056, 0x0057, 43 0x0058, 0x0059, 0x005a, 0x005b, 43 0x0058, 0x0059, 0x005a, 0x005b, 44 0x005c, 0x005d, 0x005e, 0x005f, 44 0x005c, 0x005d, 0x005e, 0x005f, 45 /* 0x60*/ 45 /* 0x60*/ 46 0x0060, 0x0061, 0x0062, 0x0063, 46 0x0060, 0x0061, 0x0062, 0x0063, 47 0x0064, 0x0065, 0x0066, 0x0067, 47 0x0064, 0x0065, 0x0066, 0x0067, 48 0x0068, 0x0069, 0x006a, 0x006b, 48 0x0068, 0x0069, 0x006a, 0x006b, 49 0x006c, 0x006d, 0x006e, 0x006f, 49 0x006c, 0x006d, 0x006e, 0x006f, 50 /* 0x70*/ 50 /* 0x70*/ 51 0x0070, 0x0071, 0x0072, 0x0073, 51 0x0070, 0x0071, 0x0072, 0x0073, 52 0x0074, 0x0075, 0x0076, 0x0077, 52 0x0074, 0x0075, 0x0076, 0x0077, 53 0x0078, 0x0079, 0x007a, 0x007b, 53 0x0078, 0x0079, 0x007a, 0x007b, 54 0x007c, 0x007d, 0x007e, 0x007f, 54 0x007c, 0x007d, 0x007e, 0x007f, 55 /* 0x80*/ 55 /* 0x80*/ 56 0x0080, 0x0081, 0x0082, 0x0083, 56 0x0080, 0x0081, 0x0082, 0x0083, 57 0x0084, 0x0085, 0x0086, 0x0087, 57 0x0084, 0x0085, 0x0086, 0x0087, 58 0x0088, 0x0089, 0x008a, 0x008b, 58 0x0088, 0x0089, 0x008a, 0x008b, 59 0x008c, 0x008d, 0x008e, 0x008f, 59 0x008c, 0x008d, 0x008e, 0x008f, 60 /* 0x90*/ 60 /* 0x90*/ 61 0x0090, 0x0091, 0x0092, 0x0093, 61 0x0090, 0x0091, 0x0092, 0x0093, 62 0x0094, 0x0095, 0x0096, 0x0097, 62 0x0094, 0x0095, 0x0096, 0x0097, 63 0x0098, 0x0099, 0x009a, 0x009b, 63 0x0098, 0x0099, 0x009a, 0x009b, 64 0x009c, 0x009d, 0x009e, 0x009f, 64 0x009c, 0x009d, 0x009e, 0x009f, 65 /* 0xa0*/ 65 /* 0xa0*/ 66 0x00a0, 0x00a1, 0x00a2, 0x00a3, 66 0x00a0, 0x00a1, 0x00a2, 0x00a3, 67 0x20ac, 0x00a5, 0x0160, 0x00a7, 67 0x20ac, 0x00a5, 0x0160, 0x00a7, 68 0x0161, 0x00a9, 0x00aa, 0x00ab, 68 0x0161, 0x00a9, 0x00aa, 0x00ab, 69 0x00ac, 0x00ad, 0x00ae, 0x00af, 69 0x00ac, 0x00ad, 0x00ae, 0x00af, 70 /* 0xb0*/ 70 /* 0xb0*/ 71 0x00b0, 0x00b1, 0x00b2, 0x00b3, 71 0x00b0, 0x00b1, 0x00b2, 0x00b3, 72 0x017d, 0x00b5, 0x00b6, 0x00b7, 72 0x017d, 0x00b5, 0x00b6, 0x00b7, 73 0x017e, 0x00b9, 0x00ba, 0x00bb, 73 0x017e, 0x00b9, 0x00ba, 0x00bb, 74 0x0152, 0x0153, 0x0178, 0x00bf, 74 0x0152, 0x0153, 0x0178, 0x00bf, 75 /* 0xc0*/ 75 /* 0xc0*/ 76 0x00c0, 0x00c1, 0x00c2, 0x00c3, 76 0x00c0, 0x00c1, 0x00c2, 0x00c3, 77 0x00c4, 0x00c5, 0x00c6, 0x00c7, 77 0x00c4, 0x00c5, 0x00c6, 0x00c7, 78 0x00c8, 0x00c9, 0x00ca, 0x00cb, 78 0x00c8, 0x00c9, 0x00ca, 0x00cb, 79 0x00cc, 0x00cd, 0x00ce, 0x00cf, 79 0x00cc, 0x00cd, 0x00ce, 0x00cf, 80 /* 0xd0*/ 80 /* 0xd0*/ 81 0x00d0, 0x00d1, 0x00d2, 0x00d3, 81 0x00d0, 0x00d1, 0x00d2, 0x00d3, 82 0x00d4, 0x00d5, 0x00d6, 0x00d7, 82 0x00d4, 0x00d5, 0x00d6, 0x00d7, 83 0x00d8, 0x00d9, 0x00da, 0x00db, 83 0x00d8, 0x00d9, 0x00da, 0x00db, 84 0x00dc, 0x00dd, 0x00de, 0x00df, 84 0x00dc, 0x00dd, 0x00de, 0x00df, 85 /* 0xe0*/ 85 /* 0xe0*/ 86 0x00e0, 0x00e1, 0x00e2, 0x00e3, 86 0x00e0, 0x00e1, 0x00e2, 0x00e3, 87 0x00e4, 0x00e5, 0x00e6, 0x00e7, 87 0x00e4, 0x00e5, 0x00e6, 0x00e7, 88 0x00e8, 0x00e9, 0x00ea, 0x00eb, 88 0x00e8, 0x00e9, 0x00ea, 0x00eb, 89 0x00ec, 0x00ed, 0x00ee, 0x00ef, 89 0x00ec, 0x00ed, 0x00ee, 0x00ef, 90 /* 0xf0*/ 90 /* 0xf0*/ 91 0x00f0, 0x00f1, 0x00f2, 0x00f3, 91 0x00f0, 0x00f1, 0x00f2, 0x00f3, 92 0x00f4, 0x00f5, 0x00f6, 0x00f7, 92 0x00f4, 0x00f5, 0x00f6, 0x00f7, 93 0x00f8, 0x00f9, 0x00fa, 0x00fb, 93 0x00f8, 0x00f9, 0x00fa, 0x00fb, 94 0x00fc, 0x00fd, 0x00fe, 0x00ff, 94 0x00fc, 0x00fd, 0x00fe, 0x00ff, 95 }; 95 }; 96 96 97 static const unsigned char page00[256] = { 97 static const unsigned char page00[256] = { 98 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x 98 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ 99 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x 99 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ 100 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x 100 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ 101 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x 101 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ 102 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x 102 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ 103 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x 103 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ 104 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x 104 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ 105 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x 105 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ 106 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x 106 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ 107 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x 107 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ 108 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x 108 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ 109 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x 109 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ 110 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x 110 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ 111 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x 111 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ 112 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x 112 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ 113 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x 113 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ 114 114 115 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x 115 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x80-0x87 */ 116 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x 116 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */ 117 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x 117 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x90-0x97 */ 118 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x 118 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x98-0x9f */ 119 0xa0, 0xa1, 0xa2, 0xa3, 0x00, 0xa5, 0x 119 0xa0, 0xa1, 0xa2, 0xa3, 0x00, 0xa5, 0x00, 0xa7, /* 0xa0-0xa7 */ 120 0x00, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0x 120 0x00, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ 121 0xb0, 0xb1, 0xb2, 0xb3, 0x00, 0xb5, 0x 121 0xb0, 0xb1, 0xb2, 0xb3, 0x00, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ 122 0x00, 0xb9, 0xba, 0xbb, 0x00, 0x00, 0x 122 0x00, 0xb9, 0xba, 0xbb, 0x00, 0x00, 0x00, 0xbf, /* 0xb8-0xbf */ 123 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0x 123 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ 124 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0x 124 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ 125 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0x 125 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ 126 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0x 126 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ 127 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0x 127 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ 128 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0x 128 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ 129 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0x 129 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ 130 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0x 130 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ 131 }; 131 }; 132 132 133 static const unsigned char page01[256] = { 133 static const unsigned char page01[256] = { 134 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 134 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ 135 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 135 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ 136 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 136 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ 137 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 137 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ 138 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 138 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ 139 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 139 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ 140 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 140 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ 141 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 141 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ 142 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 142 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ 143 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 143 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ 144 0x00, 0x00, 0xbc, 0xbd, 0x00, 0x00, 0x 144 0x00, 0x00, 0xbc, 0xbd, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ 145 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 145 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ 146 0xa6, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x 146 0xa6, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ 147 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 147 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ 148 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 148 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ 149 0xbe, 0x00, 0x00, 0x00, 0x00, 0xb4, 0x 149 0xbe, 0x00, 0x00, 0x00, 0x00, 0xb4, 0xb8, 0x00, /* 0x78-0x7f */ 150 }; 150 }; 151 151 152 static const unsigned char page20[256] = { 152 static const unsigned char page20[256] = { 153 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 153 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ 154 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 154 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ 155 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 155 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ 156 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 156 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ 157 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 157 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ 158 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 158 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ 159 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 159 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ 160 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 160 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ 161 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 161 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ 162 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 162 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ 163 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 163 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ 164 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 164 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ 165 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 165 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ 166 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 166 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ 167 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 167 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ 168 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 168 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ 169 169 170 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 170 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ 171 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 171 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ 172 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 172 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ 173 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 173 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ 174 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x 174 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ 175 0x00, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x 175 0x00, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ 176 }; 176 }; 177 177 178 static const unsigned char *const page_uni2cha 178 static const unsigned char *const page_uni2charset[256] = { 179 page00, page01, NULL, NULL, NULL, 179 page00, page01, NULL, NULL, NULL, NULL, NULL, NULL, 180 NULL, NULL, NULL, NULL, NULL, 180 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 181 181 182 NULL, NULL, NULL, NULL, NULL, 182 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 183 NULL, NULL, NULL, NULL, NULL, 183 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 184 184 185 page20, NULL, NULL, NULL, NULL, 185 page20, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 186 NULL, NULL, NULL, NULL, NULL, 186 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 187 }; 187 }; 188 188 189 static const unsigned char charset2lower[256] 189 static const unsigned char charset2lower[256] = { 190 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x 190 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ 191 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x 191 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ 192 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x 192 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ 193 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x 193 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ 194 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x 194 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ 195 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x 195 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ 196 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x 196 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ 197 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x 197 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ 198 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x 198 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x40-0x47 */ 199 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x 199 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x48-0x4f */ 200 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x 200 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x50-0x57 */ 201 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x 201 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ 202 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x 202 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ 203 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x 203 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ 204 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x 204 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ 205 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x 205 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ 206 206 207 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x 207 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x80-0x87 */ 208 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x 208 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */ 209 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x 209 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x90-0x97 */ 210 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x 210 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x98-0x9f */ 211 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0x 211 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa8, 0xa7, /* 0xa0-0xa7 */ 212 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0x 212 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ 213 0xb0, 0xb1, 0xb2, 0xb3, 0xb8, 0xb5, 0x 213 0xb0, 0xb1, 0xb2, 0xb3, 0xb8, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ 214 0xb8, 0xb9, 0xba, 0xbb, 0xbd, 0xbd, 0x 214 0xb8, 0xb9, 0xba, 0xbb, 0xbd, 0xbd, 0xff, 0xbf, /* 0xb8-0xbf */ 215 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0x 215 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xc0-0xc7 */ 216 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0x 216 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xc8-0xcf */ 217 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0x 217 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xd7, /* 0xd0-0xd7 */ 218 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0x 218 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xdf, /* 0xd8-0xdf */ 219 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0x 219 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ 220 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0x 220 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ 221 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0x 221 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ 222 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0x 222 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ 223 }; 223 }; 224 224 225 static const unsigned char charset2upper[256] 225 static const unsigned char charset2upper[256] = { 226 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x 226 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ 227 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x 227 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ 228 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x 228 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ 229 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x 229 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ 230 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x 230 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ 231 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x 231 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ 232 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x 232 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ 233 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x 233 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ 234 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x 234 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ 235 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x 235 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ 236 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x 236 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ 237 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x 237 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ 238 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x 238 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x60-0x67 */ 239 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x 239 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x68-0x6f */ 240 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x 240 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x70-0x77 */ 241 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x 241 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ 242 242 243 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x 243 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x80-0x87 */ 244 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x 244 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */ 245 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x 245 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x90-0x97 */ 246 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x 246 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x98-0x9f */ 247 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0x 247 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ 248 0xa6, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0x 248 0xa6, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ 249 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0x00, 0x 249 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0x00, 0xb6, 0xb7, /* 0xb0-0xb7 */ 250 0xb4, 0xb9, 0xba, 0xbb, 0xbc, 0xbc, 0x 250 0xb4, 0xb9, 0xba, 0xbb, 0xbc, 0xbc, 0xbe, 0xbf, /* 0xb8-0xbf */ 251 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0x 251 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ 252 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0x 252 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ 253 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0x 253 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ 254 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0x 254 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ 255 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0x 255 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xe0-0xe7 */ 256 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0x 256 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xe8-0xef */ 257 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0x 257 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xf7, /* 0xf0-0xf7 */ 258 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0x 258 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xbe, /* 0xf8-0xff */ 259 }; 259 }; 260 260 261 static int uni2char(wchar_t uni, unsigned char 261 static int uni2char(wchar_t uni, unsigned char *out, int boundlen) 262 { 262 { 263 const unsigned char *uni2charset; 263 const unsigned char *uni2charset; 264 unsigned char cl = uni & 0x00ff; 264 unsigned char cl = uni & 0x00ff; 265 unsigned char ch = (uni & 0xff00) >> 8 265 unsigned char ch = (uni & 0xff00) >> 8; 266 266 267 if (boundlen <= 0) 267 if (boundlen <= 0) 268 return -ENAMETOOLONG; 268 return -ENAMETOOLONG; 269 269 270 uni2charset = page_uni2charset[ch]; 270 uni2charset = page_uni2charset[ch]; 271 if (uni2charset && uni2charset[cl]) 271 if (uni2charset && uni2charset[cl]) 272 out[0] = uni2charset[cl]; 272 out[0] = uni2charset[cl]; 273 else 273 else 274 return -EINVAL; 274 return -EINVAL; 275 return 1; 275 return 1; 276 } 276 } 277 277 278 static int char2uni(const unsigned char *rawst 278 static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni) 279 { 279 { 280 *uni = charset2uni[*rawstring]; 280 *uni = charset2uni[*rawstring]; 281 if (*uni == 0x0000) 281 if (*uni == 0x0000) 282 return -EINVAL; 282 return -EINVAL; 283 return 1; 283 return 1; 284 } 284 } 285 285 286 static struct nls_table table = { 286 static struct nls_table table = { 287 .charset = "iso8859-15", 287 .charset = "iso8859-15", 288 .uni2char = uni2char, 288 .uni2char = uni2char, 289 .char2uni = char2uni, 289 .char2uni = char2uni, 290 .charset2lower = charset2lower, 290 .charset2lower = charset2lower, 291 .charset2upper = charset2upper, 291 .charset2upper = charset2upper, 292 }; 292 }; 293 293 294 static int __init init_nls_iso8859_15(void) 294 static int __init init_nls_iso8859_15(void) 295 { 295 { 296 return register_nls(&table); 296 return register_nls(&table); 297 } 297 } 298 298 299 static void __exit exit_nls_iso8859_15(void) 299 static void __exit exit_nls_iso8859_15(void) 300 { 300 { 301 unregister_nls(&table); 301 unregister_nls(&table); 302 } 302 } 303 303 304 module_init(init_nls_iso8859_15) 304 module_init(init_nls_iso8859_15) 305 module_exit(exit_nls_iso8859_15) 305 module_exit(exit_nls_iso8859_15) 306 306 307 MODULE_DESCRIPTION("NLS ISO 8859-15 (Latin 9; << 308 MODULE_LICENSE("Dual BSD/GPL"); 307 MODULE_LICENSE("Dual BSD/GPL"); 309 308
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.