int LS_VirtualDrive_FileOpen(LuaState* state, LuaStackObject* args) { VirtualDrive* drive = VirtualDriveFromLua(state, args[1]); const char* fileName = NULL; int entryIndex = -1; if (args[2].IsString()) fileName = args[2].GetString(); else if (args[2].IsNumber()) entryIndex = args[2].GetInteger(); else luaL_error(*state, "Argument 2 is not a string or integer."); VirtualFileHandle* file = PushVirtualFileHandleObj(state); if (fileName) { if (!drive->FileOpen(fileName, *file)) return 0; } else { if (!drive->FileOpenIndex((size_t)entryIndex, *file)) return 0; } return 1; }