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 }