0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015 #include <linux/module.h>
0016 #include <linux/kernel.h>
0017 #include <linux/string.h>
0018 #include <linux/nls.h>
0019 #include <linux/errno.h>
0020
0021 static const wchar_t charset2uni[256] = {
0022
0023 0x0000, 0x0001, 0x0002, 0x0003,
0024 0x0004, 0x0005, 0x0006, 0x0007,
0025 0x0008, 0x0009, 0x000a, 0x000b,
0026 0x000c, 0x000d, 0x000e, 0x000f,
0027
0028 0x0010, 0x0011, 0x0012, 0x0013,
0029 0x0014, 0x0015, 0x0016, 0x0017,
0030 0x0018, 0x0019, 0x001a, 0x001b,
0031 0x001c, 0x001d, 0x001e, 0x001f,
0032
0033 0x0020, 0x0021, 0x0022, 0x0023,
0034 0x0024, 0x0025, 0x0026, 0x0027,
0035 0x0028, 0x0029, 0x002a, 0x002b,
0036 0x002c, 0x002d, 0x002e, 0x002f,
0037
0038 0x0030, 0x0031, 0x0032, 0x0033,
0039 0x0034, 0x0035, 0x0036, 0x0037,
0040 0x0038, 0x0039, 0x003a, 0x003b,
0041 0x003c, 0x003d, 0x003e, 0x003f,
0042
0043 0x0040, 0x0041, 0x0042, 0x0043,
0044 0x0044, 0x0045, 0x0046, 0x0047,
0045 0x0048, 0x0049, 0x004a, 0x004b,
0046 0x004c, 0x004d, 0x004e, 0x004f,
0047
0048 0x0050, 0x0051, 0x0052, 0x0053,
0049 0x0054, 0x0055, 0x0056, 0x0057,
0050 0x0058, 0x0059, 0x005a, 0x005b,
0051 0x005c, 0x005d, 0x005e, 0x005f,
0052
0053 0x0060, 0x0061, 0x0062, 0x0063,
0054 0x0064, 0x0065, 0x0066, 0x0067,
0055 0x0068, 0x0069, 0x006a, 0x006b,
0056 0x006c, 0x006d, 0x006e, 0x006f,
0057
0058 0x0070, 0x0071, 0x0072, 0x0073,
0059 0x0074, 0x0075, 0x0076, 0x0077,
0060 0x0078, 0x0079, 0x007a, 0x007b,
0061 0x007c, 0x007d, 0x007e, 0x007f,
0062
0063 0x0080, 0x0081, 0x0082, 0x0083,
0064 0x0084, 0x0085, 0x0086, 0x0087,
0065 0x0088, 0x0089, 0x008a, 0x008b,
0066 0x008c, 0x008d, 0x008e, 0x008f,
0067
0068 0x0090, 0x0091, 0x0092, 0x0093,
0069 0x0094, 0x0095, 0x0096, 0x0097,
0070 0x0098, 0x0099, 0x009a, 0x009b,
0071 0x009c, 0x009d, 0x009e, 0x009f,
0072
0073 0x00a0, 0x1e02, 0x1e03, 0x00a3,
0074 0x010a, 0x010b, 0x1e0a, 0x00a7,
0075 0x1e80, 0x00a9, 0x1e82, 0x1e0b,
0076 0x1ef2, 0x00ad, 0x00ae, 0x0178,
0077
0078 0x1e1e, 0x1e1f, 0x0120, 0x0121,
0079 0x1e40, 0x1e41, 0x00b6, 0x1e56,
0080 0x1e81, 0x1e57, 0x1e83, 0x1e60,
0081 0x1ef3, 0x1e84, 0x1e85, 0x1e61,
0082
0083 0x00c0, 0x00c1, 0x00c2, 0x00c3,
0084 0x00c4, 0x00c5, 0x00c6, 0x00c7,
0085 0x00c8, 0x00c9, 0x00ca, 0x00cb,
0086 0x00cc, 0x00cd, 0x00ce, 0x00cf,
0087
0088 0x0174, 0x00d1, 0x00d2, 0x00d3,
0089 0x00d4, 0x00d5, 0x00d6, 0x1e6a,
0090 0x00d8, 0x00d9, 0x00da, 0x00db,
0091 0x00dc, 0x00dd, 0x0176, 0x00df,
0092
0093 0x00e0, 0x00e1, 0x00e2, 0x00e3,
0094 0x00e4, 0x00e5, 0x00e6, 0x00e7,
0095 0x00e8, 0x00e9, 0x00ea, 0x00eb,
0096 0x00ec, 0x00ed, 0x00ee, 0x00ef,
0097
0098 0x0175, 0x00f1, 0x00f2, 0x00f3,
0099 0x00f4, 0x00f5, 0x00f6, 0x1e6b,
0100 0x00f8, 0x00f9, 0x00fa, 0x00fb,
0101 0x00fc, 0x00fd, 0x0177, 0x00ff,
0102 };
0103
0104 static const unsigned char page00[256] = {
0105 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0106 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
0107 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
0108 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
0109 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
0110 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
0111 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
0112 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
0113 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
0114 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
0115 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
0116 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
0117 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
0118 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
0119 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
0120 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
0121
0122 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
0123 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
0124 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
0125 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
0126 0xa0, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00, 0xa7,
0127 0x00, 0xa9, 0x00, 0x00, 0x00, 0xad, 0xae, 0x00,
0128 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb6, 0x00,
0129 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0130 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
0131 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
0132 0x00, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0x00,
0133 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0x00, 0xdf,
0134 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
0135 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
0136 0x00, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0x00,
0137 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0x00, 0xff,
0138 };
0139
0140 static const unsigned char page01[256] = {
0141 0x00, 0x00, 0xa1, 0xa2, 0x00, 0x00, 0x00, 0x00,
0142 0x00, 0x00, 0xa6, 0xab, 0x00, 0x00, 0x00, 0x00,
0143 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0144 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0xb1,
0145 0xb2, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0146 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0147 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0148 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0149 0xb4, 0xb5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0150 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0151 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0xb9,
0152 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0153 0xbb, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0154 0x00, 0x00, 0xd7, 0xf7, 0x00, 0x00, 0x00, 0x00,
0155 0x00, 0x00, 0x00, 0x00, 0xd0, 0xf0, 0xde, 0xfe,
0156 0xaf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0157
0158 0xa8, 0xb8, 0xaa, 0xba, 0xbd, 0xbe, 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 0x00, 0x00, 0xac, 0xbc, 0x00, 0x00, 0x00, 0x00,
0173 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0174 };
0175
0176 static const unsigned char page1e[256] = {
0177 0x00, 0x00, 0xa1, 0xa2, 0x00, 0x00, 0x00, 0x00,
0178 0x00, 0x00, 0xa6, 0xab, 0x00, 0x00, 0x00, 0x00,
0179 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0180 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0xb1,
0181 0xb2, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0182 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0183 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0184 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0185 0xb4, 0xb5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0186 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0187 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0xb9,
0188 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0189 0xbb, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0190 0x00, 0x00, 0xd7, 0xf7, 0x00, 0x00, 0x00, 0x00,
0191 0x00, 0x00, 0x00, 0x00, 0xd0, 0xf0, 0xde, 0xfe,
0192 0xaf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0193
0194 0xa8, 0xb8, 0xaa, 0xba, 0xbd, 0xbe, 0x00, 0x00,
0195 0x00, 0x00, 0x00, 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 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
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, 0xac, 0xbc, 0x00, 0x00, 0x00, 0x00,
0209 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0210 };
0211
0212 static const unsigned char *const page_uni2charset[256] = {
0213 page00, page01, NULL, NULL, NULL, NULL, NULL, NULL,
0214 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
0215
0216 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
0217 NULL, NULL, NULL, NULL, NULL, NULL, page1e, NULL,
0218
0219 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
0220 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
0221 };
0222
0223 static const unsigned char charset2lower[256] = {
0224 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0225 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
0226 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
0227 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
0228 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
0229 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
0230 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
0231 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
0232 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
0233 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
0234 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
0235 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
0236 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
0237 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
0238 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
0239 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
0240
0241 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
0242 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
0243 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
0244 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
0245 0xa0, 0xa2, 0xa2, 0xa3, 0xab, 0xab, 0xab, 0xa7,
0246 0xb8, 0xa9, 0xba, 0xab, 0xbc, 0xad, 0xae, 0xff,
0247 0xb1, 0xb1, 0xb3, 0xb3, 0xb5, 0xb5, 0xb6, 0xb9,
0248 0xb8, 0xb9, 0xba, 0xbf, 0xbc, 0xbe, 0xbe, 0xbf,
0249 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
0250 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
0251 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
0252 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xdf,
0253 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
0254 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
0255 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
0256 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
0257 };
0258
0259 static const unsigned char charset2upper[256] = {
0260 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0261 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
0262 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
0263 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
0264 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
0265 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
0266 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
0267 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
0268 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
0269 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
0270 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
0271 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
0272 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
0273 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
0274 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
0275 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
0276
0277 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
0278 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
0279 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
0280 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
0281 0xa0, 0xa1, 0xa1, 0xa3, 0xa6, 0xa6, 0xa6, 0xa7,
0282 0xa8, 0xa9, 0xaa, 0xa6, 0xac, 0xad, 0xae, 0xaf,
0283 0xb0, 0xb0, 0xb2, 0xb2, 0xb4, 0xb4, 0xb6, 0xb7,
0284 0xa8, 0xb7, 0xaa, 0xbb, 0xac, 0xbd, 0xbd, 0xbb,
0285 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
0286 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
0287 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
0288 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
0289 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
0290 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
0291 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
0292 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xaf,
0293 };
0294
0295 static int uni2char(wchar_t uni, unsigned char *out, int boundlen)
0296 {
0297 const unsigned char *uni2charset;
0298 unsigned char cl = uni & 0x00ff;
0299 unsigned char ch = (uni & 0xff00) >> 8;
0300
0301 if (boundlen <= 0)
0302 return -ENAMETOOLONG;
0303
0304 uni2charset = page_uni2charset[ch];
0305 if (uni2charset && uni2charset[cl])
0306 out[0] = uni2charset[cl];
0307 else
0308 return -EINVAL;
0309 return 1;
0310 }
0311
0312 static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni)
0313 {
0314 *uni = charset2uni[*rawstring];
0315 if (*uni == 0x0000)
0316 return -EINVAL;
0317 return 1;
0318 }
0319
0320 static struct nls_table table = {
0321 .charset = "iso8859-14",
0322 .uni2char = uni2char,
0323 .char2uni = char2uni,
0324 .charset2lower = charset2lower,
0325 .charset2upper = charset2upper,
0326 };
0327
0328 static int __init init_nls_iso8859_14(void)
0329 {
0330 return register_nls(&table);
0331 }
0332
0333 static void __exit exit_nls_iso8859_14(void)
0334 {
0335 unregister_nls(&table);
0336 }
0337
0338 module_init(init_nls_iso8859_14)
0339 module_exit(exit_nls_iso8859_14)
0340
0341 MODULE_LICENSE("Dual BSD/GPL");