diff --git a/src/modules/filesystem/wrap_Filesystem.cpp b/src/modules/filesystem/wrap_Filesystem.cpp index 9d6f45907..c90d9495e 100644 --- a/src/modules/filesystem/wrap_Filesystem.cpp +++ b/src/modules/filesystem/wrap_Filesystem.cpp @@ -305,10 +305,11 @@ File *luax_getfile(lua_State *L, int idx) return file; } -FileData *luax_getfiledata(lua_State *L, int idx, bool ioerror) +FileData *luax_getfiledata(lua_State *L, int idx, bool ioerror, int &nresults) { FileData *data = nullptr; File *file = nullptr; + nresults = 0; if (lua_isstring(L, idx) || luax_istype(L, idx, File::type)) { @@ -322,7 +323,7 @@ FileData *luax_getfiledata(lua_State *L, int idx, bool ioerror) if (!data && !file) { - luaL_argerror(L, idx, "filename, File, or FileData expected"); + nresults = luaL_argerror(L, idx, "filename, File, or FileData expected"); return nullptr; // Never reached. } else if (file && !data) @@ -335,10 +336,10 @@ FileData *luax_getfiledata(lua_State *L, int idx, bool ioerror) { file->release(); if (ioerror) - luax_ioError(L, "%s", e.what()); + nresults = luax_ioError(L, "%s", e.what()); else - luaL_error(L, "%s", e.what()); - return nullptr; // Never reached. + nresults = luaL_error(L, "%s", e.what()); + return nullptr; // Never reached if ioerror is false. } file->release(); @@ -349,7 +350,8 @@ FileData *luax_getfiledata(lua_State *L, int idx, bool ioerror) FileData *luax_getfiledata(lua_State *L, int idx) { - return luax_getfiledata(L, idx, false); + int nresults = 0; + return luax_getfiledata(L, idx, false, nresults); } Data *luax_getdata(lua_State *L, int idx) @@ -404,7 +406,10 @@ int w_newFileData(lua_State *L) // Single argument: treat as filepath or File. if (lua_gettop(L) == 1) { - FileData *data = luax_getfiledata(L, 1, true); + int nresults = 0; + FileData *data = luax_getfiledata(L, 1, true, nresults); + if (data == nullptr) + return nresults; luax_pushtype(L, data); data->release(); return 1;