So, your "That's quite wrong", is quite wrong.
What part? You didn't contradict anything I said.
But if it makes you happy, the following is also true.
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.
The problem occurs when coercing the 32-bit unsigned value into 31 unsigned 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; }
In reply to Re^6: Can't spawn "cmd.exe":
by ikegami
in thread Can't spawn "cmd.exe":
by emalossi
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |