[BUG] os.execute reports wrong exit code on Windows

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view

[BUG] os.execute reports wrong exit code on Windows

Thijs Schreijer

This exists since Lua 5.2. The culprit is the exit code on Windows having a different format than on unix/posix. The latter has 0-255 as common ground and mostly anything else is undefined. But on Windows the exit code is a 32bit signed integer.

Now this code: https://github.com/lua/lua/blob/f59e6a93c0ad38a27a420e51abf8f13d962446b5/lauxlib.c#L276-L277
Treats -1 as a special case, and goes looking for an error message here: https://github.com/lua/lua/blob/f59e6a93c0ad38a27a420e51abf8f13d962446b5/lauxlib.c#L241-L247

This results in “No error” in the windows case of -1, since it is a valid exit code.

Test output (the actual exit code used, followed by the 3 results of os.execute):
-6 nil exit -6
-5 nil exit -5
-4 nil exit -4
-3 nil exit -3
-2 nil exit -2
-1 nil No error 0
0 true exit 0
1 nil exit 1
2 nil exit 2
3 nil exit 3
4 nil exit 4
5 nil exit 5

On Windows the -1 case should have been “-1 nil exit -1”