in reply to Re^3: Can't spawn "cmd.exe":
in thread Can't spawn "cmd.exe":
The problem is with Perl's handling of Windows return codes. Trying to force fit a 32-bit signed int into an unsigned char doesn't go :)
That's quite wrong.
For starters, Windows error codes are unsigned.
ExitProcess
GetExitCodeProcess
The problem occurs when coercing the 32-bit unsigned value into 31-bits (a 32-bit signed value where negative has a special meaning).
DWORD status; ... GetExitCodeProcess(ProcessInformation.hProcess, &status); ret = (int)status;
Forcing the value into 8 bits doesn't even happen when you see that warning.
if (status < 0) { if (ckWARN(WARN_EXEC)) Perl_warner(aTHX_ packWARN(WARN_EXEC), "Can't spawn \"%s\": %s +", argv[0], strerror(errno)); status = 255 * 256; } else status *= 256; <---- coercion into 8 bits PL_statusvalue = status; }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^5: Can't spawn "cmd.exe":
by BrowserUk (Patriarch) on Mar 18, 2009 at 23:11 UTC | |
by ikegami (Patriarch) on Mar 19, 2009 at 04:00 UTC | |
by BrowserUk (Patriarch) on Mar 19, 2009 at 11:01 UTC | |
by ikegami (Patriarch) on Mar 19, 2009 at 13:12 UTC | |
by BrowserUk (Patriarch) on Mar 19, 2009 at 14:02 UTC | |
|