Howdy, There are a couple of issues with making all child processes go thru cmd.exe.
Initially, this prevents popen_ex from failing when the actual executable doesn't exist, since "cmd.exe /c c:\foo\bar\xxx.exe" will *always* successfully start a process. This can be seen in bug #43327. Second, is that by having the intermediate process, I'm pretty sure there's some extra-buffering of the input/output streams going on (once for the child proc, and once for the cmd.exe). This (probably along with a too-small pipe buffer) contributes to the behavior found in #44994. Finally, I can't for the life of me see what benefit this brings to the table. Other languages don't need to put cmd.exe in the middle of their children. The only case may be where someone wants to use built-in cmd.exe commands like 'dir' on popen_ex() , which would not be right anyway, and they should explicitly include the command processor in their command line. If fixing this causes a problem elsewhere, we're better off fixing that appropriately, rather than dragging around a redundant copy of the command processor for every child process. Hi! - cmd = (char*)malloc(strlen(command)+strlen(TWG(comspec))+sizeof(" /c ")+2); - sprintf(cmd, "%s /c \"%s\"", TWG(comspec), command); - if (!CreateProcess(NULL, cmd, &security, &security, security.bInheritHandle, dwCreateFlags, env, cwd, &startup, &process)) { + if (!CreateProcess(NULL, command, &security, &security, security.bInheritHandle, dwCreateFlags, env, cwd, &startup, &process)) { return NULL; Could you explain this change? It seems to change the semantics of popen in a significant way... -- Garrett Serack | Open Source Software Developer | Microsoft Corporation Office:(425)706-7939 email/messenger: garre...@microsoft.com blog: http://fearthecowboy.com -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php