xref: /linux/fs/nls/nls_iso8859-5.c (revision f7af616c632ee2ac3af0876fe33bf9e0232e665a)
1 /*
2  * linux/fs/nls/nls_iso8859-5.c
3  *
4  * Charset iso8859-5 translation tables.
5  * Generated automatically from the Unicode and charset
6  * tables from the Unicode Organization (www.unicode.org).
7  * The Unicode to charset table has only exact mappings.
8  */
9 
10 #include <linux/module.h>
11 #include <linux/kernel.h>
12 #include <linux/string.h>
13 #include <linux/nls.h>
14 #include <linux/errno.h>
15 
16 static const wchar_t charset2uni[256] = {
17 	/* 0x00*/
18 	0x0000, 0x0001, 0x0002, 0x0003,
19 	0x0004, 0x0005, 0x0006, 0x0007,
20 	0x0008, 0x0009, 0x000a, 0x000b,
21 	0x000c, 0x000d, 0x000e, 0x000f,
22 	/* 0x10*/
23 	0x0010, 0x0011, 0x0012, 0x0013,
24 	0x0014, 0x0015, 0x0016, 0x0017,
25 	0x0018, 0x0019, 0x001a, 0x001b,
26 	0x001c, 0x001d, 0x001e, 0x001f,
27 	/* 0x20*/
28 	0x0020, 0x0021, 0x0022, 0x0023,
29 	0x0024, 0x0025, 0x0026, 0x0027,
30 	0x0028, 0x0029, 0x002a, 0x002b,
31 	0x002c, 0x002d, 0x002e, 0x002f,
32 	/* 0x30*/
33 	0x0030, 0x0031, 0x0032, 0x0033,
34 	0x0034, 0x0035, 0x0036, 0x0037,
35 	0x0038, 0x0039, 0x003a, 0x003b,
36 	0x003c, 0x003d, 0x003e, 0x003f,
37 	/* 0x40*/
38 	0x0040, 0x0041, 0x0042, 0x0043,
39 	0x0044, 0x0045, 0x0046, 0x0047,
40 	0x0048, 0x0049, 0x004a, 0x004b,
41 	0x004c, 0x004d, 0x004e, 0x004f,
42 	/* 0x50*/
43 	0x0050, 0x0051, 0x0052, 0x0053,
44 	0x0054, 0x0055, 0x0056, 0x0057,
45 	0x0058, 0x0059, 0x005a, 0x005b,
46 	0x005c, 0x005d, 0x005e, 0x005f,
47 	/* 0x60*/
48 	0x0060, 0x0061, 0x0062, 0x0063,
49 	0x0064, 0x0065, 0x0066, 0x0067,
50 	0x0068, 0x0069, 0x006a, 0x006b,
51 	0x006c, 0x006d, 0x006e, 0x006f,
52 	/* 0x70*/
53 	0x0070, 0x0071, 0x0072, 0x0073,
54 	0x0074, 0x0075, 0x0076, 0x0077,
55 	0x0078, 0x0079, 0x007a, 0x007b,
56 	0x007c, 0x007d, 0x007e, 0x007f,
57 	/* 0x80*/
58 	0x0080, 0x0081, 0x0082, 0x0083,
59 	0x0084, 0x0085, 0x0086, 0x0087,
60 	0x0088, 0x0089, 0x008a, 0x008b,
61 	0x008c, 0x008d, 0x008e, 0x008f,
62 	/* 0x90*/
63 	0x0090, 0x0091, 0x0092, 0x0093,
64 	0x0094, 0x0095, 0x0096, 0x0097,
65 	0x0098, 0x0099, 0x009a, 0x009b,
66 	0x009c, 0x009d, 0x009e, 0x009f,
67 	/* 0xa0*/
68 	0x00a0, 0x0401, 0x0402, 0x0403,
69 	0x0404, 0x0405, 0x0406, 0x0407,
70 	0x0408, 0x0409, 0x040a, 0x040b,
71 	0x040c, 0x00ad, 0x040e, 0x040f,
72 	/* 0xb0*/
73 	0x0410, 0x0411, 0x0412, 0x0413,
74 	0x0414, 0x0415, 0x0416, 0x0417,
75 	0x0418, 0x0419, 0x041a, 0x041b,
76 	0x041c, 0x041d, 0x041e, 0x041f,
77 	/* 0xc0*/
78 	0x0420, 0x0421, 0x0422, 0x0423,
79 	0x0424, 0x0425, 0x0426, 0x0427,
80 	0x0428, 0x0429, 0x042a, 0x042b,
81 	0x042c, 0x042d, 0x042e, 0x042f,
82 	/* 0xd0*/
83 	0x0430, 0x0431, 0x0432, 0x0433,
84 	0x0434, 0x0435, 0x0436, 0x0437,
85 	0x0438, 0x0439, 0x043a, 0x043b,
86 	0x043c, 0x043d, 0x043e, 0x043f,
87 	/* 0xe0*/
88 	0x0440, 0x0441, 0x0442, 0x0443,
89 	0x0444, 0x0445, 0x0446, 0x0447,
90 	0x0448, 0x0449, 0x044a, 0x044b,
91 	0x044c, 0x044d, 0x044e, 0x044f,
92 	/* 0xf0*/
93 	0x2116, 0x0451, 0x0452, 0x0453,
94 	0x0454, 0x0455, 0x0456, 0x0457,
95 	0x0458, 0x0459, 0x045a, 0x045b,
96 	0x045c, 0x00a7, 0x045e, 0x045f,
97 };
98 
99 static const unsigned char page00[256] = {
100 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */
101 	0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
102 	0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */
103 	0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
104 	0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */
105 	0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */
106 	0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */
107 	0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */
108 	0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */
109 	0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */
110 	0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */
111 	0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */
112 	0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */
113 	0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */
114 	0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */
115 	0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */
116 
117 	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x80-0x87 */
118 	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */
119 	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x90-0x97 */
120 	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x98-0x9f */
121 	0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, /* 0xa0-0xa7 */
122 	0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, /* 0xa8-0xaf */
123 };
124 
125 static const unsigned char page04[256] = {
126 	0x00, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0x00-0x07 */
127 	0xa8, 0xa9, 0xaa, 0xab, 0xac, 0x00, 0xae, 0xaf, /* 0x08-0x0f */
128 	0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0x10-0x17 */
129 	0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0x18-0x1f */
130 	0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x20-0x27 */
131 	0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x28-0x2f */
132 	0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0x30-0x37 */
133 	0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0x38-0x3f */
134 	0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x40-0x47 */
135 	0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x48-0x4f */
136 	0x00, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x50-0x57 */
137 	0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0x00, 0xfe, 0xff, /* 0x58-0x5f */
138 };
139 
140 static const unsigned char page21[256] = {
141 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */
142 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */
143 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, /* 0x10-0x17 */
144 };
145 
146 static const unsigned char *const page_uni2charset[256] = {
147 	page00, NULL,   NULL,   NULL,   page04, NULL,   NULL,   NULL,
148 	NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,
149 	NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,
150 	NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,
151 	NULL,   page21, NULL,   NULL,   NULL,   NULL,   NULL,   NULL,
152 };
153 
154 static const unsigned char charset2lower[256] = {
155 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */
156 	0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
157 	0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */
158 	0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
159 	0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */
160 	0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */
161 	0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */
162 	0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */
163 	0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x40-0x47 */
164 	0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x48-0x4f */
165 	0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x50-0x57 */
166 	0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */
167 	0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */
168 	0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */
169 	0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */
170 	0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */
171 
172 	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x80-0x87 */
173 	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */
174 	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x90-0x97 */
175 	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x98-0x9f */
176 	0xa0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xa0-0xa7 */
177 	0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xad, 0xfe, 0xff, /* 0xa8-0xaf */
178 	0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xb0-0xb7 */
179 	0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xb8-0xbf */
180 	0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xc0-0xc7 */
181 	0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xc8-0xcf */
182 	0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */
183 	0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */
184 	0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */
185 	0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */
186 	0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */
187 	0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */
188 };
189 
190 static const unsigned char charset2upper[256] = {
191 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */
192 	0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
193 	0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */
194 	0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
195 	0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */
196 	0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */
197 	0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */
198 	0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */
199 	0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */
200 	0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */
201 	0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */
202 	0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */
203 	0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x60-0x67 */
204 	0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x68-0x6f */
205 	0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x70-0x77 */
206 	0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */
207 
208 	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x80-0x87 */
209 	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */
210 	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x90-0x97 */
211 	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x98-0x9f */
212 	0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */
213 	0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */
214 	0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */
215 	0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */
216 	0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */
217 	0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */
218 	0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xd0-0xd7 */
219 	0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xd8-0xdf */
220 	0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xe0-0xe7 */
221 	0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xe8-0xef */
222 	0xf0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xf0-0xf7 */
223 	0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xfd, 0xae, 0xaf, /* 0xf8-0xff */
224 };
225 
226 static int uni2char(wchar_t uni, unsigned char *out, int boundlen)
227 {
228 	const unsigned char *uni2charset;
229 	unsigned char cl = uni & 0x00ff;
230 	unsigned char ch = (uni & 0xff00) >> 8;
231 
232 	if (boundlen <= 0)
233 		return -ENAMETOOLONG;
234 
235 	uni2charset = page_uni2charset[ch];
236 	if (uni2charset && uni2charset[cl])
237 		out[0] = uni2charset[cl];
238 	else
239 		return -EINVAL;
240 	return 1;
241 }
242 
243 static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni)
244 {
245 	*uni = charset2uni[*rawstring];
246 	if (*uni == 0x0000)
247 		return -EINVAL;
248 	return 1;
249 }
250 
251 static struct nls_table table = {
252 	.charset	= "iso8859-5",
253 	.uni2char	= uni2char,
254 	.char2uni	= char2uni,
255 	.charset2lower	= charset2lower,
256 	.charset2upper	= charset2upper,
257 };
258 
259 static int __init init_nls_iso8859_5(void)
260 {
261 	return register_nls(&table);
262 }
263 
264 static void __exit exit_nls_iso8859_5(void)
265 {
266 	unregister_nls(&table);
267 }
268 
269 module_init(init_nls_iso8859_5)
270 module_exit(exit_nls_iso8859_5)
271 
272 MODULE_LICENSE("Dual BSD/GPL");
273