Browse code

win32: UTF #5 - globbing

aCaB authored on 2011/04/17 23:11:04
Showing 2 changed files
... ...
@@ -1,3 +1,7 @@
1
+Sun Apr 17 16:09:28 CEST 2011 (acab)
2
+------------------------------------
3
+ * win32/compat: more UTF8 stuff. Things *appear* to be working ok now.
4
+
1 5
 Sat Apr 16 18:56:40 CEST 2011 (acab)
2 6
 ------------------------------------
3 7
  * libclamav, shared: Preliminary win32 conversion to UTF8
... ...
@@ -21,6 +21,8 @@
21 21
 #include "dirent.h"
22 22
 #include "libgen.h"
23 23
 
24
+#include <malloc.h>
25
+
24 26
 /* 
25 27
     I GIVE UP! The CRT is b0rked and cannot be helped.
26 28
 
... ...
@@ -182,9 +184,15 @@ static int glob_add(const char *path, int *argc, char ***argv) {
182 182
 }
183 183
 
184 184
 void w32_glob(int *argc_ptr, char ***argv_ptr) {
185
-    char *cur = GetCommandLineA(), *begparm = NULL, *endparm = NULL;
185
+    wchar_t *wtmp = GetCommandLineW();
186
+    char *cur, *begparm = NULL, *endparm = NULL;
186 187
     char **argv = NULL, c;
187
-    int argc = 0, in_sq = 0, in_dq = 0, need_glob = 0, allarglen = 0;
188
+    int argc = 0, in_sq = 0, in_dq = 0, need_glob = 0, allarglen = 0, linelen;
189
+
190
+    linelen = wcslen(wtmp);
191
+    cur = _alloca(linelen * 6 + 1);
192
+    if(!WideCharToMultiByte(CP_UTF8, 0, wtmp, -1, cur, linelen * 6 + 1, NULL, NULL))
193
+	cur = GetCommandLineA();
188 194
 
189 195
     do {
190 196
 	c = *cur;
... ...
@@ -254,7 +262,6 @@ void w32_glob(int *argc_ptr, char ***argv_ptr) {
254 254
 	}
255 255
 	cur++;
256 256
     } while (c);
257
-
258 257
     if(argc) {
259 258
 	int i, argvlen = sizeof(*argv) * (argc + 1), argclen = 0;
260 259
 	argv = realloc(argv, argvlen + allarglen + argc);