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