... | ... |
@@ -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); |