[prev in list] [next in list] [prev in thread] [next in thread] 

List:       wine-devel
Subject:    argc/argv issue - More info, hack and questions...
From:       "Ann and Jason Edmeades" <us () the-edmeades ! demon ! co ! uk>
Date:       2002-04-29 13:30:26
[Download RAW message or body]

Hello,

I am still investigating this argv/argc issue. The sequence of events as far
as I can tell:

CreateProcessA(NULL, "regsvr32 comdlg32.ocx",....)
Process_CREATE calls fork_and_exec( NULL, "regsvr32 comdlg32.ocx", ...)
This sees there is no explicitly specified filename so inserts wine and --
into the command line (now "wine -- regsvr32 comdlg32.ocx")

Eventually the new process starts with the wine -- regsvr32 comdlg32.ocx as
the command line, so it needs to strip off the inserted fields, and in
PROCESS_InitWine, main_exe_name is correct (path\regsvr32.exe) but the
argc/argv includes these new fields. At the top it states:

(Scheduler/process.c, lines 491/492):
    app_argv++;  /* remove argv[0] (wine itself) */
    app_argc--;

This obviously leaves behine the -- and things go downhill from there
onwards.

Interestingly wine -- regsvr32 comdlg32.ocx works fine, so there must be
command line processing here which doesnt occur during the CreateProcess
route.

Question:
Should fork_and_exec insert the -- into the command line? If it should,
should PROCESS_InitWine check for it, ie:
    app_argv++;       /* remove argv[0] (wine itself) */
    app_argc--;
    if (app_argc && strcmp(app_argv[0], "--") == 0) {
       app_argv++;    /* remove argv[1] ('--' inserted by fork_and_exec) */
       app_argc--;
    }

However, what implications are of doing this (it works, of course). This
feels like hacking around an imcompatibility within wine but I am happy to
submit a patch as it definitely resolves a problem for me.

Regards,
Jason


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic