aboutsummaryrefslogtreecommitdiff
path: root/lauxlib.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2020-05-22 15:39:29 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2020-05-22 15:39:29 -0300
commitefcf24be0c22cba57b298161bf4ab0561fd3c08e (patch)
tree5e6846467880a472a00ec02f3e27ca800884e161 /lauxlib.c
parent17dbaa8639505c9ad1a9946591f5960123fbd741 (diff)
downloadlua-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.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/lauxlib.c b/lauxlib.c
index a5e9e4b5..f2ba704f 100644
--- a/lauxlib.c
+++ b/lauxlib.c
@@ -284,7 +284,7 @@ LUALIB_API int luaL_fileresult (lua_State *L, int stat, const char *fname) {
284 284
285LUALIB_API int luaL_execresult (lua_State *L, int stat) { 285LUALIB_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 */