My last version broke the existing regression tests.
This one doesn't, and I've added a regression test to
make sure argv[0] is an absolute path.
This patch should be reviewed carefully, as I don't really
understand Wine's internals yet.
Changelog:
* scheduler/process.c: make argv[0] absolute so 'wine d:setup' works
* dlls/kernel/tests/process.c: verify that argv[0] is absolute and contains drive letter
Copyright 2003, Dan Kegel. LGPL.
--
Dan Kegel
Linux User #78045
http://www.kegel.com
Index: scheduler/process.c
===================================================================
RCS file: /home/wine/wine/scheduler/process.c,v
retrieving revision 1.205
diff -d -u -r1.205 process.c
--- scheduler/process.c 5 Dec 2002 19:56:15 -0000 1.205
+++ scheduler/process.c 4 Jan 2003 04:13:31 -0000
@@ -577,6 +577,7 @@
{
char error[100], *p;
DWORD stack_size = 0;
+ char main_exe_name_copy[MAX_PATH];
/* Initialize everything */
if (!process_init( argv )) exit(1);
@@ -610,6 +611,10 @@
MESSAGE( "%s: cannot open builtin library for '%s': %s\n", argv0, main_exe_name, error );
ExitProcess(1);
}
+
+ /* absolutify argv[0] so 'wine d:setup' works */
+ strcpy(main_exe_name_copy, main_exe_name);
+ argv[0] = main_exe_name_copy;
switch( MODULE_GetBinaryType( main_exe_file ))
{
Index: dlls/kernel/tests/process.c
===================================================================
RCS file: /home/wine/wine/dlls/kernel/tests/process.c,v
retrieving revision 1.7
diff -d -u -r1.7 process.c
--- dlls/kernel/tests/process.c 18 Dec 2002 20:51:33 -0000 1.7
+++ dlls/kernel/tests/process.c 4 Jan 2003 04:13:32 -0000
@@ -624,6 +624,7 @@
char buffer[MAX_PATH];
PROCESS_INFORMATION info;
STARTUPINFOA startup;
+ const char *pstr;
memset(&startup, 0, sizeof(startup));
startup.cb = sizeof(startup);
@@ -640,6 +641,12 @@
WritePrivateProfileStringA(NULL, NULL, NULL, resfile);
okChildInt("Arguments", "argcA", 4);
+ pstr = getChildString("Arguments", "argvA0");
+ ok(pstr != NULL, "expected non-null argv[0]");
+ if (pstr) {
+ ok(pstr[1] == ':', "expected drive letter in argv[0], got %s", pstr);
+ ok(pstr[2] == '\', "expected absolute path in argv[0], got %s", pstr);
+ }
okChildString("Arguments", "argvA3", "C:\Program Files\my nice app.exe");
okChildString("Arguments", "argvA4", NULL);
okChildString("Arguments", "CommandLineA", buffer);