http://bugs.winehq.org/show_bug.cgi?id=18057
Summary: mishandled has_space==1 && opt_s==0 in programs/wcmdmain.c for built in commands Product: Wine Version: 1.1.19 Platform: Other OS/Version: other Status: UNCONFIRMED Severity: normal Priority: P2 Component: programs AssignedTo: wine-bugs@winehq.org ReportedBy: swelef@post.sk
When using ActivePerl to execute Perl statements such as my $p=`set PATH`; ActivePerl will pass it as a quoted argument to CreateProcessW: CreateProcessW app L"cmd.exe" cmdline L"cmd.exe /x/d/c "set PATH"" wcmdmain.c:wmain will get the following arguments: 0 => L"cmd.exe" 1 => L"/x/d/c" 2 => L"set PATH" and determine that has_space==1 && opt_s==0 thus creating cmd = L""set PATH"" This command is later passed to WCMD_execute where there's no match with the "inbuilt[]" commands (because of the leading double-quote) and it's in turn passed to WCMD_run_program. That function tries to do its best but in the if ((opt_c || opt_k) && !opt_s && !status && GetLastError()==ERROR_FILE_NOT_FOUND && command[0]=='"') branch (wcmdmain.c, lines #1158-1162 in wine 1.1.19) it strips the quotes and calls _itself_ thus missing the check for "inbuilt[]" commands. What's required here is to call back to WCMD_execute but unfortunately some of the WCMD_execute's arguments are not available at this point.
PS: I'm trying to use S60_5th_Edition_SDK_v1.0 on debian lenny and the first point of failure was the Perl statement open PIPE, "set EPOCROOT |"; I have made experiments with wine 1.0.1 and 1.1.19 and with ActivePerl 5.10.0.1004 and StrawberryPerl 5.10.0.4 with the same results. However, Wine 1.1.19 with ActivePerl and `set PATH` is the only test case I have investigated in depth.