diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2020-05-22 15:39:29 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2020-05-22 15:39:29 -0300 |
commit | efcf24be0c22cba57b298161bf4ab0561fd3c08e (patch) | |
tree | 5e6846467880a472a00ec02f3e27ca800884e161 /lauxlib.c | |
parent | 17dbaa8639505c9ad1a9946591f5960123fbd741 (diff) | |
download | lua-efcf24be0c22cba57b298161bf4ab0561fd3c08e.tar.gz lua-efcf24be0c22cba57b298161bf4ab0561fd3c08e.tar.bz2 lua-efcf24be0c22cba57b298161bf4ab0561fd3c08e.zip |
'luaL_execresult' does not assume -1 status as error
ISO C is silent about the return of 'system'. Windows sets 'errno' in
case of errors. Linux has several different error cases, with different
return values. ISO C allows 'system' to set 'errno' even if there are no
errors. Here we assume that a status==0 is success (which is the case
on several platforms), otherwise it is an error. If there is an error
number, gives the error based on it. (The worst a spurious 'errno'
can do is to generate a bad error message.) Otherwise uses the normal
results.
Diffstat (limited to 'lauxlib.c')
-rw-r--r-- | lauxlib.c | 2 |
1 files changed, 1 insertions, 1 deletions
@@ -284,7 +284,7 @@ LUALIB_API int luaL_fileresult (lua_State *L, int stat, const char *fname) { | |||
284 | 284 | ||
285 | LUALIB_API int luaL_execresult (lua_State *L, int stat) { | 285 | LUALIB_API int luaL_execresult (lua_State *L, int stat) { |
286 | const char *what = "exit"; /* type of termination */ | 286 | const char *what = "exit"; /* type of termination */ |
287 | if (stat == -1) /* error? */ | 287 | if (stat != 0 && errno != 0) /* error with an 'errno'? */ |
288 | return luaL_fileresult(L, 0, NULL); | 288 | return luaL_fileresult(L, 0, NULL); |
289 | else { | 289 | else { |
290 | l_inspectstat(stat, what); /* interpret result */ | 290 | l_inspectstat(stat, what); /* interpret result */ |