[EXT2]
[reactos.git] / reactos / drivers / filesystems / ext2 / src / nls.c
1 /*
2 * COPYRIGHT: See COPYRIGHT.TXT
3 * PROJECT: Ext2 File System Driver for WinNT/2K/XP
4 * FILE: nls.c
5 * PROGRAMMER: Matt Wu <mattwu@163.com>
6 * HOMEPAGE: http://www.ext2fsd.com
7 * UPDATE HISTORY:
8 */
9
10 /* INCLUDES *****************************************************************/
11
12 #include "ext2fs.h"
13
14 /* GOBALS** ****************************************************************/
15
16 extern struct nls_table *tables;
17 extern spinlock_t nls_lock;
18
19 /* DECLARES ****************************************************************/
20
21 #define FULL_CODEPAGES_SUPPORT
22
23 #ifdef FULL_CODEPAGES_SUPPORT
24
25 DECLARE_INIT(init_nls_ascii);
26 DECLARE_EXIT(exit_nls_ascii);
27 DECLARE_INIT(init_nls_cp1250);
28 DECLARE_EXIT(exit_nls_cp1250);
29 DECLARE_INIT(init_nls_cp1251);
30 DECLARE_EXIT(exit_nls_cp1251);
31 DECLARE_INIT(init_nls_cp1255);
32 DECLARE_EXIT(exit_nls_cp1255);
33 DECLARE_INIT(init_nls_cp437);
34 DECLARE_EXIT(exit_nls_cp437);
35 DECLARE_INIT(init_nls_cp737);
36 DECLARE_EXIT(exit_nls_cp737);
37 DECLARE_INIT(init_nls_cp775);
38 DECLARE_EXIT(exit_nls_cp775);
39 DECLARE_INIT(init_nls_cp850);
40 DECLARE_EXIT(exit_nls_cp850);
41 DECLARE_INIT(init_nls_cp852);
42 DECLARE_EXIT(exit_nls_cp852);
43 DECLARE_INIT(init_nls_cp855);
44 DECLARE_EXIT(exit_nls_cp855);
45 DECLARE_INIT(init_nls_cp857);
46 DECLARE_EXIT(exit_nls_cp857);
47 DECLARE_INIT(init_nls_cp860);
48 DECLARE_EXIT(exit_nls_cp860);
49 DECLARE_INIT(init_nls_cp861);
50 DECLARE_EXIT(exit_nls_cp861);
51 DECLARE_INIT(init_nls_cp862);
52 DECLARE_EXIT(exit_nls_cp862);
53 DECLARE_INIT(init_nls_cp863);
54 DECLARE_EXIT(exit_nls_cp863);
55 DECLARE_INIT(init_nls_cp864);
56 DECLARE_EXIT(exit_nls_cp864);
57 DECLARE_INIT(init_nls_cp865);
58 DECLARE_EXIT(exit_nls_cp865);
59 DECLARE_INIT(init_nls_cp866);
60 DECLARE_EXIT(exit_nls_cp866);
61 DECLARE_INIT(init_nls_cp869);
62 DECLARE_EXIT(exit_nls_cp869);
63 DECLARE_INIT(init_nls_cp874);
64 DECLARE_EXIT(exit_nls_cp874);
65 DECLARE_INIT(init_nls_cp932);
66 DECLARE_EXIT(exit_nls_cp932);
67 DECLARE_INIT(init_nls_cp949);
68 DECLARE_EXIT(exit_nls_cp949);
69 DECLARE_INIT(init_nls_euc_jp);
70 DECLARE_EXIT(exit_nls_euc_jp);
71 DECLARE_INIT(init_nls_iso8859_1);
72 DECLARE_EXIT(exit_nls_iso8859_1);
73 DECLARE_INIT(init_nls_iso8859_13);
74 DECLARE_EXIT(exit_nls_iso8859_13);
75 DECLARE_INIT(init_nls_iso8859_14);
76 DECLARE_EXIT(exit_nls_iso8859_14);
77 DECLARE_INIT(init_nls_iso8859_15);
78 DECLARE_EXIT(exit_nls_iso8859_15);
79 DECLARE_INIT(init_nls_iso8859_2);
80 DECLARE_EXIT(exit_nls_iso8859_2);
81 DECLARE_INIT(init_nls_iso8859_3);
82 DECLARE_EXIT(exit_nls_iso8859_3);
83 DECLARE_INIT(init_nls_iso8859_4);
84 DECLARE_EXIT(exit_nls_iso8859_4);
85 DECLARE_INIT(init_nls_iso8859_5);
86 DECLARE_EXIT(exit_nls_iso8859_5);
87 DECLARE_INIT(init_nls_iso8859_6);
88 DECLARE_EXIT(exit_nls_iso8859_6);
89 DECLARE_INIT(init_nls_iso8859_7);
90 DECLARE_EXIT(exit_nls_iso8859_7);
91 DECLARE_INIT(init_nls_iso8859_9);
92 DECLARE_EXIT(exit_nls_iso8859_9);
93 DECLARE_INIT(init_nls_koi8_r);
94 DECLARE_EXIT(exit_nls_koi8_r);
95 DECLARE_INIT(init_nls_koi8_ru);
96 DECLARE_EXIT(exit_nls_koi8_ru);
97 DECLARE_INIT(init_nls_koi8_u);
98 DECLARE_EXIT(exit_nls_koi8_u);
99 #endif //FULL_CODEPAGES_SUPPORT
100
101 /* gb2312 */
102 DECLARE_INIT(init_nls_cp936);
103 DECLARE_EXIT(exit_nls_cp936);
104
105 /* big5 */
106 DECLARE_INIT(init_nls_cp950);
107 DECLARE_EXIT(exit_nls_cp950);
108
109 /* utf8 */
110 DECLARE_INIT(init_nls_utf8);
111 DECLARE_EXIT(exit_nls_utf8);
112
113
114 /* FUNCTIONS ****************************************************************/
115
116
117 int
118 Ext2LoadAllNls()
119 {
120 int rc;
121
122 tables = NULL;
123 spin_lock_init(&nls_lock);
124
125 /* loading utf8 ... */
126 LOAD_NLS(init_nls_utf8);
127
128 #ifdef FULL_CODEPAGES_SUPPORT
129
130 /* loading chinese gb2312 and big5... */
131 LOAD_NLS(init_nls_cp936);
132 LOAD_NLS(init_nls_cp950);
133
134 /* loading all others */
135
136 LOAD_NLS(init_nls_ascii);
137 LOAD_NLS(init_nls_cp1250);
138 LOAD_NLS(init_nls_cp1251);
139 LOAD_NLS(init_nls_cp1255);
140 LOAD_NLS(init_nls_cp437);
141 LOAD_NLS(init_nls_cp737);
142 LOAD_NLS(init_nls_cp775);
143 LOAD_NLS(init_nls_cp850);
144 LOAD_NLS(init_nls_cp852);
145 LOAD_NLS(init_nls_cp855);
146 LOAD_NLS(init_nls_cp857);
147 LOAD_NLS(init_nls_cp860);
148 LOAD_NLS(init_nls_cp861);
149 LOAD_NLS(init_nls_cp862);
150 LOAD_NLS(init_nls_cp863);
151 LOAD_NLS(init_nls_cp864);
152 LOAD_NLS(init_nls_cp865);
153 LOAD_NLS(init_nls_cp866);
154 LOAD_NLS(init_nls_cp869);
155 LOAD_NLS(init_nls_cp874);
156 LOAD_NLS(init_nls_cp932);
157 LOAD_NLS(init_nls_euc_jp);
158 LOAD_NLS(init_nls_cp949);
159 LOAD_NLS(init_nls_iso8859_1);
160 LOAD_NLS(init_nls_iso8859_13);
161 LOAD_NLS(init_nls_iso8859_14);
162 LOAD_NLS(init_nls_iso8859_15);
163 LOAD_NLS(init_nls_iso8859_2);
164 LOAD_NLS(init_nls_iso8859_3);
165 LOAD_NLS(init_nls_iso8859_4);
166 LOAD_NLS(init_nls_iso8859_5);
167 LOAD_NLS(init_nls_iso8859_6);
168 LOAD_NLS(init_nls_iso8859_7);
169 LOAD_NLS(init_nls_iso8859_9);
170 LOAD_NLS(init_nls_koi8_r);
171 LOAD_NLS(init_nls_koi8_u);
172 LOAD_NLS(init_nls_koi8_ru);
173
174 #endif //FULL_CODEPAGES_SUPPORT
175
176 return rc;
177 }
178
179
180 VOID
181 Ext2UnloadAllNls()
182 {
183
184 #ifdef FULL_CODEPAGES_SUPPORT
185
186 UNLOAD_NLS(init_nls_ascii);
187 UNLOAD_NLS(init_nls_cp1250);
188 UNLOAD_NLS(exit_nls_cp1251);
189 UNLOAD_NLS(exit_nls_cp1255);
190 UNLOAD_NLS(exit_nls_cp437);
191 UNLOAD_NLS(exit_nls_cp737);
192 UNLOAD_NLS(exit_nls_cp775);
193 UNLOAD_NLS(exit_nls_cp850);
194 UNLOAD_NLS(exit_nls_cp852);
195 UNLOAD_NLS(exit_nls_cp855);
196 UNLOAD_NLS(exit_nls_cp857);
197 UNLOAD_NLS(exit_nls_cp860);
198 UNLOAD_NLS(exit_nls_cp861);
199 UNLOAD_NLS(exit_nls_cp862);
200 UNLOAD_NLS(exit_nls_cp863);
201 UNLOAD_NLS(exit_nls_cp864);
202 UNLOAD_NLS(exit_nls_cp865);
203 UNLOAD_NLS(exit_nls_cp866);
204 UNLOAD_NLS(exit_nls_cp869);
205 UNLOAD_NLS(exit_nls_cp874);
206 UNLOAD_NLS(exit_nls_euc_jp);
207 UNLOAD_NLS(exit_nls_cp932);
208 UNLOAD_NLS(exit_nls_cp949);
209 UNLOAD_NLS(exit_nls_iso8859_1);
210 UNLOAD_NLS(exit_nls_iso8859_13);
211 UNLOAD_NLS(exit_nls_iso8859_14);
212 UNLOAD_NLS(exit_nls_iso8859_15);
213 UNLOAD_NLS(exit_nls_iso8859_2);
214 UNLOAD_NLS(exit_nls_iso8859_3);
215 UNLOAD_NLS(exit_nls_iso8859_4);
216 UNLOAD_NLS(exit_nls_iso8859_5);
217 UNLOAD_NLS(exit_nls_iso8859_6);
218 UNLOAD_NLS(exit_nls_iso8859_7);
219 UNLOAD_NLS(exit_nls_iso8859_9);
220 UNLOAD_NLS(exit_nls_koi8_ru);
221 UNLOAD_NLS(exit_nls_koi8_r);
222 UNLOAD_NLS(exit_nls_koi8_u);
223
224 /* unloading chinese codepages */
225 UNLOAD_NLS(exit_nls_cp950);
226 UNLOAD_NLS(exit_nls_cp936);
227
228 #endif //FULL_CODEPAGES_SUPPORT
229
230 /* unloading nls of utf8 */
231 UNLOAD_NLS(exit_nls_utf8);
232 }