xref: /reactos/drivers/filesystems/ext2/src/nls.c (revision c2c66aff)
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
Ext2LoadAllNls()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
Ext2UnloadAllNls()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 }