Jacek Caban : wscript.exe: Improved argument parsing.

Alexandre Julliard julliard at winehq.org
Fri Aug 20 10:19:15 CDT 2010


Module: wine
Branch: master
Commit: bfdfae1c7fadb61b5249984955ceb5d498f43aed
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=bfdfae1c7fadb61b5249984955ceb5d498f43aed

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri Aug 20 14:57:37 2010 +0200

wscript.exe: Improved argument parsing.

---

 programs/wscript/Makefile.in |    2 +-
 programs/wscript/main.c      |   29 +++++++++++++++++++++++------
 2 files changed, 24 insertions(+), 7 deletions(-)

diff --git a/programs/wscript/Makefile.in b/programs/wscript/Makefile.in
index a45dddf..efb59ce 100644
--- a/programs/wscript/Makefile.in
+++ b/programs/wscript/Makefile.in
@@ -4,7 +4,7 @@ SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = wscript.exe
 APPMODE   = -mwindows -municode
-IMPORTS   = uuid oleaut32 ole32 advapi32
+IMPORTS   = uuid shell32 oleaut32 ole32 advapi32
 EXTRADEFS = -DWINE_NO_UNICODE_MACROS
 
 RC_SRCS = \
diff --git a/programs/wscript/main.c b/programs/wscript/main.c
index 612bb54..0ea7011 100644
--- a/programs/wscript/main.c
+++ b/programs/wscript/main.c
@@ -320,21 +320,38 @@ static void run_script(const WCHAR *filename, IActiveScript *script, IActiveScri
 
 int WINAPI wWinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPWSTR cmdline, int cmdshow)
 {
+    const WCHAR *ext, *filename = NULL;
     IActiveScriptParse *parser;
     IActiveScript *script;
-    const WCHAR *ext;
+    WCHAR **argv;
     CLSID clsid;
+    int argc, i;
 
     WINE_TRACE("(%p %p %s %x)\n", hInst, hPrevInst, wine_dbgstr_w(cmdline), cmdshow);
 
-    if(!*cmdline)
+    argv = CommandLineToArgvW(cmdline, &argc);
+    if(!argv)
         return 1;
 
-    ext = strchrW(cmdline, '.');
+    for(i=0; i<argc; i++) {
+        if(*argv[i] == '/' || *argv[i] == '-') {
+            WINE_FIXME("Unsupported argument %s\n", wine_dbgstr_w(argv[i]));
+        }else {
+            filename = argv[i];
+            break;
+        }
+    }
+
+    if(!filename) {
+        WINE_FIXME("No file name specified\n");
+        return 1;
+    }
+
+    ext = strchrW(filename, '.');
     if(!ext)
-        ext = cmdline;
+        ext = filename;
     if(!get_engine_clsid(ext, &clsid)) {
-        WINE_FIXME("Could not fine engine for %s\n", wine_dbgstr_w(ext));
+        WINE_FIXME("Could not find engine for %s\n", wine_dbgstr_w(ext));
         return 1;
     }
 
@@ -347,7 +364,7 @@ int WINAPI wWinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPWSTR cmdline, int cm
     }
 
     if(init_engine(script, parser)) {
-        run_script(cmdline, script, parser);
+        run_script(filename, script, parser);
         IActiveScript_Close(script);
         ITypeInfo_Release(host_ti);
     }else {




More information about the wine-cvs mailing list