]> gitweb.factorcode.org Git - factor.git/commitdiff
vm: fix command line parsing on Windows
authorSlava Pestov <slava@factorcode.org>
Sun, 17 Jan 2010 06:04:49 +0000 (00:04 -0600)
committerSlava Pestov <slava@factorcode.org>
Sun, 17 Jan 2010 06:05:52 +0000 (00:05 -0600)
vm/main-windows-nt.cpp
vm/os-windows.cpp

index 080a64c276658c8d45e2320789ab9a102638011b..4fced136e8cbc8e61c0cd4a412c226af754d0e3a 100755 (executable)
@@ -22,7 +22,6 @@ int WINAPI WinMain(
        wchar_t **argv;
 
        factor::parse_args(&argc, &argv, (wchar_t *)GetCommandLine());
-
        wmain(argc,argv);
 
        // memory leak from malloc, wcsdup
index e7353c65176b14f1d9de1b7ad41e1d9702f7f13f..ab55beacdbb26e59cab0cedef927458f64953fb0 100755 (executable)
@@ -215,13 +215,7 @@ VM_C_API int parse_tokens(wchar_t *string, wchar_t ***tokens, int length)
 
 VM_C_API void parse_args(int *argc, wchar_t ***argv, wchar_t *cmdlinePtrW)
 {
-       wchar_t cmdnameBufW[MAX_UNICODE_PATH];
        int cmdlineLen = 0;
-       int modlen;
-
-       /* argv[0] is the path of invoked program - get this from CE.  */
-       cmdnameBufW[0] = 0;
-       modlen = GetModuleFileNameW(NULL, cmdnameBufW, sizeof (cmdnameBufW)/sizeof (cmdnameBufW[0]));
 
        if (!cmdlinePtrW)
                cmdlineLen = 0;
@@ -229,23 +223,32 @@ VM_C_API void parse_args(int *argc, wchar_t ***argv, wchar_t *cmdlinePtrW)
                cmdlineLen = wcslen(cmdlinePtrW);
 
        /* gets realloc()'d later */
-       *argv = (wchar_t **)malloc (sizeof (wchar_t**) * 1);
+       *argc = 0;
+       *argv = (wchar_t **)malloc (sizeof (wchar_t**));
+
        if (!*argv)
                ExitProcess(1);
 
+#ifdef WINCE
+       wchar_t cmdnameBufW[MAX_UNICODE_PATH];
+
+       /* argv[0] is the path of invoked program - get this from CE.  */
+       cmdnameBufW[0] = 0;
+       GetModuleFileNameW(NULL, cmdnameBufW, sizeof (cmdnameBufW)/sizeof (cmdnameBufW[0]));
+
        (*argv)[0] = wcsdup(cmdnameBufW);
        if(!(*argv[0]))
                ExitProcess(1);
        /* Add one to account for argv[0] */
        (*argc)++;
+#endif
 
        if (cmdlineLen > 0)
        {
-               wchar_t *argv1 = (*argv)[0] + wcslen((*argv)[0]) + 1;
-               argv1 = wcsdup(cmdlinePtrW);
+               wchar_t *argv1 = wcsdup(cmdlinePtrW);
                if(!argv1)
                        ExitProcess(1);
-               *argc = parse_tokens(argv1, argv, 1);
+               *argc = parse_tokens(argv1, argv, *argc);
                if (*argc < 0)
                        ExitProcess(1);
        }