brintos

brintos / linux-shallow public Read only

0
0
Text · 10.8 KiB · 4fcfbf8 Raw
277 lines · c
1/*2 * linux/fs/nls/nls_cp874.c3 *4 * Charset cp874 translation tables.5 * Generated automatically from the Unicode and charset6 * 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 16static 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	0x0000, 0x0000, 0x0000, 0x0000,59	0x0000, 0x2026, 0x0000, 0x0000,60	0x0000, 0x0000, 0x0000, 0x0000,61	0x0000, 0x0000, 0x0000, 0x0000,62	/* 0x90*/63	0x0000, 0x2018, 0x2019, 0x201c,64	0x201d, 0x2022, 0x2013, 0x2014,65	0x0000, 0x0000, 0x0000, 0x0000,66	0x0000, 0x0000, 0x0000, 0x0000,67	/* 0xa0*/68	0x00a0, 0x0e01, 0x0e02, 0x0e03,69	0x0e04, 0x0e05, 0x0e06, 0x0e07,70	0x0e08, 0x0e09, 0x0e0a, 0x0e0b,71	0x0e0c, 0x0e0d, 0x0e0e, 0x0e0f,72	/* 0xb0*/73	0x0e10, 0x0e11, 0x0e12, 0x0e13,74	0x0e14, 0x0e15, 0x0e16, 0x0e17,75	0x0e18, 0x0e19, 0x0e1a, 0x0e1b,76	0x0e1c, 0x0e1d, 0x0e1e, 0x0e1f,77	/* 0xc0*/78	0x0e20, 0x0e21, 0x0e22, 0x0e23,79	0x0e24, 0x0e25, 0x0e26, 0x0e27,80	0x0e28, 0x0e29, 0x0e2a, 0x0e2b,81	0x0e2c, 0x0e2d, 0x0e2e, 0x0e2f,82	/* 0xd0*/83	0x0e30, 0x0e31, 0x0e32, 0x0e33,84	0x0e34, 0x0e35, 0x0e36, 0x0e37,85	0x0e38, 0x0e39, 0x0e3a, 0x0000,86	0x0000, 0x0000, 0x0000, 0x0e3f,87	/* 0xe0*/88	0x0e40, 0x0e41, 0x0e42, 0x0e43,89	0x0e44, 0x0e45, 0x0e46, 0x0e47,90	0x0e48, 0x0e49, 0x0e4a, 0x0e4b,91	0x0e4c, 0x0e4d, 0x0e4e, 0x0e4f,92	/* 0xf0*/93	0x0e50, 0x0e51, 0x0e52, 0x0e53,94	0x0e54, 0x0e55, 0x0e56, 0x0e57,95	0x0e58, 0x0e59, 0x0e5a, 0x0e5b,96	0x0000, 0x0000, 0x0000, 0x0000,97};98 99static 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	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */118	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */119	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */120	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */121	0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */122};123 124static const unsigned char page0e[256] = {125	0x00, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0x00-0x07 */126	0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0x08-0x0f */127	0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0x10-0x17 */128	0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0x18-0x1f */129	0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x20-0x27 */130	0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x28-0x2f */131	0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0x30-0x37 */132	0xd8, 0xd9, 0xda, 0x00, 0x00, 0x00, 0x00, 0xdf, /* 0x38-0x3f */133	0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x40-0x47 */134	0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x48-0x4f */135	0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x50-0x57 */136	0xf8, 0xf9, 0xfa, 0xfb, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */137};138 139static const unsigned char page20[256] = {140	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */141	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */142	0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00, /* 0x10-0x17 */143	0x91, 0x92, 0x00, 0x00, 0x93, 0x94, 0x00, 0x00, /* 0x18-0x1f */144	0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0x20-0x27 */145};146 147static const unsigned char *const page_uni2charset[256] = {148	page00, NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   149	NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   page0e, NULL,   150	NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   151	NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   152	page20, NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   153};154 155static const unsigned char charset2lower[256] = {156	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */157	0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */158	0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */159	0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */160	0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */161	0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */162	0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */163	0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */164	0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x40-0x47 */165	0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x48-0x4f */166	0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x50-0x57 */167	0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */168	0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */169	0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */170	0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */171	0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */172 173	0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, /* 0x80-0x87 */174	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */175	0x00, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x90-0x97 */176	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */177	0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */178	0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */179	0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */180	0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */181	0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */182	0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */183	0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */184	0xd8, 0xd9, 0xda, 0x00, 0x00, 0x00, 0x00, 0xdf, /* 0xd8-0xdf */185	0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */186	0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */187	0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */188	0xf8, 0xf9, 0xfa, 0xfb, 0x00, 0x00, 0x00, 0x00, /* 0xf8-0xff */189};190 191static const unsigned char charset2upper[256] = {192	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */193	0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */194	0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */195	0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */196	0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */197	0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */198	0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */199	0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */200	0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */201	0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */202	0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */203	0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */204	0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x60-0x67 */205	0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x68-0x6f */206	0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x70-0x77 */207	0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */208 209	0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, /* 0x80-0x87 */210	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */211	0x00, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x90-0x97 */212	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */213	0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */214	0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */215	0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */216	0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */217	0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */218	0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */219	0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */220	0xd8, 0xd9, 0xda, 0x00, 0x00, 0x00, 0x00, 0xdf, /* 0xd8-0xdf */221	0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */222	0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */223	0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */224	0xf8, 0xf9, 0xfa, 0xfb, 0x00, 0x00, 0x00, 0x00, /* 0xf8-0xff */225};226 227static int uni2char(wchar_t uni, unsigned char *out, int boundlen)228{229	const unsigned char *uni2charset;230	unsigned char cl = uni & 0x00ff;231	unsigned char ch = (uni & 0xff00) >> 8;232 233	if (boundlen <= 0)234		return -ENAMETOOLONG;235 236	uni2charset = page_uni2charset[ch];237	if (uni2charset && uni2charset[cl])238		out[0] = uni2charset[cl];239	else240		return -EINVAL;241	return 1;242}243 244static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni)245{246	*uni = charset2uni[*rawstring];247	if (*uni == 0x0000)248		return -EINVAL;249	return 1;250}251 252static struct nls_table table = {253	.charset	= "cp874",254	.alias		= "tis-620",255	.uni2char	= uni2char,256	.char2uni	= char2uni,257	.charset2lower	= charset2lower,258	.charset2upper	= charset2upper,259};260 261static int __init init_nls_cp874(void)262{263	return register_nls(&table);264}265 266static void __exit exit_nls_cp874(void)267{268	unregister_nls(&table);269}270 271module_init(init_nls_cp874)272module_exit(exit_nls_cp874)273 274MODULE_DESCRIPTION("NLS Thai charset (CP874, TIS-620)");275MODULE_LICENSE("Dual BSD/GPL");276MODULE_ALIAS_NLS(tis-620);277