Alex Villací­s Lasso <[EMAIL PROTECTED]> writes:

> Alexandre Julliard wrote:
>
>>It's OK to change argv[0] when started from a Unix shell, but not when
>>started from another Windows process. Your patch does it in all cases,
>>which is not correct.
>>
> Sounds reasonable. What is the proper way to tell apart the two cases?

I would suggest something like this:

Index: dlls/kernel/process.c
===================================================================
RCS file: /opt/cvs-commit/wine/dlls/kernel/process.c,v
retrieving revision 1.109
diff -u -p -r1.109 process.c
--- dlls/kernel/process.c       10 Oct 2005 10:28:48 -0000      1.109
+++ dlls/kernel/process.c       31 Oct 2005 21:43:46 -0000
@@ -515,19 +515,23 @@ static void set_registry_environment(voi
  */
 static void set_library_wargv( char **argv )
 {
-    int argc;
+    int argc, first = 0;
     char *q;
     WCHAR *p;
     WCHAR **wargv;
     DWORD total = 0;
 
-    for (argc = 0; argv[argc]; argc++)
+    /* if we didn't get a command line from our parent,
+     * force argv[0] to be the path of the main binary */
+    if (argv[0] && 
!NtCurrentTeb()->Peb->ProcessParameters->CommandLine.Buffer) first = 1;
+
+    for (argc = first; argv[argc]; argc++)
         total += MultiByteToWideChar( CP_UNIXCP, 0, argv[argc], -1, NULL, 0 );
 
     wargv = RtlAllocateHeap( GetProcessHeap(), 0,
                              total * sizeof(WCHAR) + (argc + 1) * 
sizeof(*wargv) );
     p = (WCHAR *)(wargv + argc + 1);
-    for (argc = 0; argv[argc]; argc++)
+    for (argc = first; argv[argc]; argc++)
     {
         DWORD reslen = MultiByteToWideChar( CP_UNIXCP, 0, argv[argc], -1, p, 
total );
         wargv[argc] = p;
@@ -535,6 +539,7 @@ static void set_library_wargv( char **ar
         total -= reslen;
     }
     wargv[argc] = NULL;
+    if (first) wargv[0] = 
NtCurrentTeb()->Peb->ProcessParameters->ImagePathName.Buffer;
 
     /* convert argv back from Unicode since it has to be in the Ansi codepage 
not the Unix one */
 

-- 
Alexandre Julliard
[EMAIL PROTECTED]


Reply via email to