0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #include <linux/module.h>
0011 #include <linux/kernel.h>
0012 #include <linux/string.h>
0013 #include <linux/nls.h>
0014 #include <linux/errno.h>
0015
0016 static const wchar_t charset2uni[256] = {
0017
0018 0x0000, 0x0001, 0x0002, 0x0003,
0019 0x0004, 0x0005, 0x0006, 0x0007,
0020 0x0008, 0x0009, 0x000a, 0x000b,
0021 0x000c, 0x000d, 0x000e, 0x000f,
0022
0023 0x0010, 0x0011, 0x0012, 0x0013,
0024 0x0014, 0x0015, 0x0016, 0x0017,
0025 0x0018, 0x0019, 0x001a, 0x001b,
0026 0x001c, 0x001d, 0x001e, 0x001f,
0027
0028 0x0020, 0x0021, 0x0022, 0x0023,
0029 0x0024, 0x0025, 0x0026, 0x0027,
0030 0x0028, 0x0029, 0x002a, 0x002b,
0031 0x002c, 0x002d, 0x002e, 0x002f,
0032
0033 0x0030, 0x0031, 0x0032, 0x0033,
0034 0x0034, 0x0035, 0x0036, 0x0037,
0035 0x0038, 0x0039, 0x003a, 0x003b,
0036 0x003c, 0x003d, 0x003e, 0x003f,
0037
0038 0x0040, 0x0041, 0x0042, 0x0043,
0039 0x0044, 0x0045, 0x0046, 0x0047,
0040 0x0048, 0x0049, 0x004a, 0x004b,
0041 0x004c, 0x004d, 0x004e, 0x004f,
0042
0043 0x0050, 0x0051, 0x0052, 0x0053,
0044 0x0054, 0x0055, 0x0056, 0x0057,
0045 0x0058, 0x0059, 0x005a, 0x005b,
0046 0x005c, 0x005d, 0x005e, 0x005f,
0047
0048 0x0060, 0x0061, 0x0062, 0x0063,
0049 0x0064, 0x0065, 0x0066, 0x0067,
0050 0x0068, 0x0069, 0x006a, 0x006b,
0051 0x006c, 0x006d, 0x006e, 0x006f,
0052
0053 0x0070, 0x0071, 0x0072, 0x0073,
0054 0x0074, 0x0075, 0x0076, 0x0077,
0055 0x0078, 0x0079, 0x007a, 0x007b,
0056 0x007c, 0x007d, 0x007e, 0x007f,
0057
0058 0x20ac, 0x0000, 0x201a, 0x0000,
0059 0x201e, 0x2026, 0x2020, 0x2021,
0060 0x0000, 0x2030, 0x0160, 0x2039,
0061 0x015a, 0x0164, 0x017d, 0x0179,
0062
0063 0x0000, 0x2018, 0x2019, 0x201c,
0064 0x201d, 0x2022, 0x2013, 0x2014,
0065 0x0000, 0x2122, 0x0161, 0x203a,
0066 0x015b, 0x0165, 0x017e, 0x017a,
0067
0068 0x00a0, 0x02c7, 0x02d8, 0x0141,
0069 0x00a4, 0x0104, 0x00a6, 0x00a7,
0070 0x00a8, 0x00a9, 0x015e, 0x00ab,
0071 0x00ac, 0x00ad, 0x00ae, 0x017b,
0072
0073 0x00b0, 0x00b1, 0x02db, 0x0142,
0074 0x00b4, 0x00b5, 0x00b6, 0x00b7,
0075 0x00b8, 0x0105, 0x015f, 0x00bb,
0076 0x013d, 0x02dd, 0x013e, 0x017c,
0077
0078 0x0154, 0x00c1, 0x00c2, 0x0102,
0079 0x00c4, 0x0139, 0x0106, 0x00c7,
0080 0x010c, 0x00c9, 0x0118, 0x00cb,
0081 0x011a, 0x00cd, 0x00ce, 0x010e,
0082
0083 0x0110, 0x0143, 0x0147, 0x00d3,
0084 0x00d4, 0x0150, 0x00d6, 0x00d7,
0085 0x0158, 0x016e, 0x00da, 0x0170,
0086 0x00dc, 0x00dd, 0x0162, 0x00df,
0087
0088 0x0155, 0x00e1, 0x00e2, 0x0103,
0089 0x00e4, 0x013a, 0x0107, 0x00e7,
0090 0x010d, 0x00e9, 0x0119, 0x00eb,
0091 0x011b, 0x00ed, 0x00ee, 0x010f,
0092
0093 0x0111, 0x0144, 0x0148, 0x00f3,
0094 0x00f4, 0x0151, 0x00f6, 0x00f7,
0095 0x0159, 0x016f, 0x00fa, 0x0171,
0096 0x00fc, 0x00fd, 0x0163, 0x02d9,
0097 };
0098
0099 static const unsigned char page00[256] = {
0100 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0101 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
0102 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
0103 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
0104 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
0105 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
0106 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
0107 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
0108 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
0109 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
0110 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
0111 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
0112 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
0113 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
0114 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
0115 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
0116
0117 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0118 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0119 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0120 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0121 0xa0, 0x00, 0x00, 0x00, 0xa4, 0x00, 0xa6, 0xa7,
0122 0xa8, 0xa9, 0x00, 0xab, 0xac, 0xad, 0xae, 0x00,
0123 0xb0, 0xb1, 0x00, 0x00, 0xb4, 0xb5, 0xb6, 0xb7,
0124 0xb8, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x00,
0125 0x00, 0xc1, 0xc2, 0x00, 0xc4, 0x00, 0x00, 0xc7,
0126 0x00, 0xc9, 0x00, 0xcb, 0x00, 0xcd, 0xce, 0x00,
0127 0x00, 0x00, 0x00, 0xd3, 0xd4, 0x00, 0xd6, 0xd7,
0128 0x00, 0x00, 0xda, 0x00, 0xdc, 0xdd, 0x00, 0xdf,
0129 0x00, 0xe1, 0xe2, 0x00, 0xe4, 0x00, 0x00, 0xe7,
0130 0x00, 0xe9, 0x00, 0xeb, 0x00, 0xed, 0xee, 0x00,
0131 0x00, 0x00, 0x00, 0xf3, 0xf4, 0x00, 0xf6, 0xf7,
0132 0x00, 0x00, 0xfa, 0x00, 0xfc, 0xfd, 0x00, 0x00,
0133 };
0134
0135 static const unsigned char page01[256] = {
0136 0x00, 0x00, 0xc3, 0xe3, 0xa5, 0xb9, 0xc6, 0xe6,
0137 0x00, 0x00, 0x00, 0x00, 0xc8, 0xe8, 0xcf, 0xef,
0138 0xd0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0139 0xca, 0xea, 0xcc, 0xec, 0x00, 0x00, 0x00, 0x00,
0140 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0141 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0142 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0143 0x00, 0xc5, 0xe5, 0x00, 0x00, 0xbc, 0xbe, 0x00,
0144 0x00, 0xa3, 0xb3, 0xd1, 0xf1, 0x00, 0x00, 0xd2,
0145 0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0146 0xd5, 0xf5, 0x00, 0x00, 0xc0, 0xe0, 0x00, 0x00,
0147 0xd8, 0xf8, 0x8c, 0x9c, 0x00, 0x00, 0xaa, 0xba,
0148 0x8a, 0x9a, 0xde, 0xfe, 0x8d, 0x9d, 0x00, 0x00,
0149 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xf9,
0150 0xdb, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0151 0x00, 0x8f, 0x9f, 0xaf, 0xbf, 0x8e, 0x9e, 0x00,
0152
0153 };
0154
0155 static const unsigned char page02[256] = {
0156 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0157 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0158 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0159 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0160 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0161 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0162 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0163 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0164 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0165 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0166 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0167 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0168 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0169 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0170 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0171 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0172
0173 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0174 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0175 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0176 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0177 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0178 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0179 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0180 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0181 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa1,
0182 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0183 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0184 0xa2, 0xff, 0x00, 0xb2, 0x00, 0xbd, 0x00, 0x00,
0185 };
0186
0187 static const unsigned char page20[256] = {
0188 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0189 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0190 0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00,
0191 0x91, 0x92, 0x82, 0x00, 0x93, 0x94, 0x84, 0x00,
0192 0x86, 0x87, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00,
0193 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0194 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0195 0x00, 0x8b, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00,
0196 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0197 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0198 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0199 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0200 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0201 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0202 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0203 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0204
0205 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0206 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0207 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0208 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0209 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0210 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
0211 };
0212
0213 static const unsigned char page21[256] = {
0214 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0215 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0216 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0217 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0218 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x00, 0x00,
0219 };
0220
0221 static const unsigned char *const page_uni2charset[256] = {
0222 page00, page01, page02, NULL, NULL, NULL, NULL, NULL,
0223 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
0224 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
0225 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
0226 page20, page21, NULL, NULL, NULL, NULL, NULL, NULL,
0227 };
0228
0229 static const unsigned char charset2lower[256] = {
0230 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0231 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
0232 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
0233 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
0234 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
0235 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
0236 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
0237 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
0238 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
0239 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
0240 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
0241 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
0242 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
0243 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
0244 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
0245 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
0246
0247 0x80, 0x00, 0x82, 0x00, 0x84, 0x85, 0x86, 0x87,
0248 0x00, 0x89, 0x9a, 0x8b, 0x9c, 0x9d, 0x9e, 0x9f,
0249 0x00, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
0250 0x00, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
0251 0xa0, 0xa1, 0xa2, 0xb3, 0xa4, 0xb9, 0xa6, 0xa7,
0252 0xa8, 0xa9, 0xba, 0xab, 0xac, 0xad, 0xae, 0xbf,
0253 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
0254 0xb8, 0xb9, 0xba, 0xbb, 0xbe, 0xbd, 0xbe, 0xbf,
0255 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
0256 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
0257 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xd7,
0258 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xdf,
0259 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
0260 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
0261 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
0262 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
0263 };
0264
0265 static const unsigned char charset2upper[256] = {
0266 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0267 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
0268 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
0269 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
0270 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
0271 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
0272 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
0273 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
0274 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
0275 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
0276 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
0277 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
0278 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
0279 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
0280 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
0281 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
0282
0283 0x80, 0x00, 0x82, 0x00, 0x84, 0x85, 0x86, 0x87,
0284 0x00, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
0285 0x00, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
0286 0x00, 0x99, 0x8a, 0x9b, 0x8c, 0x8d, 0x8e, 0x8f,
0287 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
0288 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
0289 0xb0, 0xb1, 0xb2, 0xa3, 0xb4, 0xb5, 0xb6, 0xb7,
0290 0xb8, 0xa5, 0xaa, 0xbb, 0xbc, 0xbd, 0xbc, 0xaf,
0291 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
0292 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
0293 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
0294 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0x00,
0295 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
0296 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
0297 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xf7,
0298 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xff,
0299 };
0300
0301 static int uni2char(wchar_t uni, unsigned char *out, int boundlen)
0302 {
0303 const unsigned char *uni2charset;
0304 unsigned char cl = uni & 0x00ff;
0305 unsigned char ch = (uni & 0xff00) >> 8;
0306
0307 if (boundlen <= 0)
0308 return -ENAMETOOLONG;
0309
0310 uni2charset = page_uni2charset[ch];
0311 if (uni2charset && uni2charset[cl])
0312 out[0] = uni2charset[cl];
0313 else
0314 return -EINVAL;
0315 return 1;
0316 }
0317
0318 static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni)
0319 {
0320 *uni = charset2uni[*rawstring];
0321 if (*uni == 0x0000)
0322 return -EINVAL;
0323 return 1;
0324 }
0325
0326 static struct nls_table table = {
0327 .charset = "cp1250",
0328 .uni2char = uni2char,
0329 .char2uni = char2uni,
0330 .charset2lower = charset2lower,
0331 .charset2upper = charset2upper,
0332 };
0333
0334 static int __init init_nls_cp1250(void)
0335 {
0336 return register_nls(&table);
0337 }
0338 static void __exit exit_nls_cp1250(void)
0339 {
0340 unregister_nls(&table);
0341 }
0342
0343 module_init(init_nls_cp1250)
0344 module_exit(exit_nls_cp1250)
0345
0346 MODULE_LICENSE("Dual BSD/GPL");