From 0cca02e765e5d7568bf79f9770b6a8ca6302170c Mon Sep 17 00:00:00 2001 From: Matthew Budd Date: Sat, 31 Oct 2020 16:08:22 -0400 Subject: [PATCH] Bug fix for issue #215. MacOS was not changing the current working directory to the lua script location when loading a lua script. --- src/lua-engine.cpp | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/lua-engine.cpp b/src/lua-engine.cpp index 2e7d21c2..4b27d8ff 100644 --- a/src/lua-engine.cpp +++ b/src/lua-engine.cpp @@ -7,6 +7,7 @@ #include #elif __APPLE__ #include +#include #include #include #endif @@ -616,7 +617,18 @@ static int emu_loadrom(lua_State *L) #else const char *nameo2 = luaL_checkstring(L,1); char nameo[2048]; - strncpy(nameo, nameo2, sizeof(nameo)); + + if ( nameo2[0] == '/' ) + { + strncpy(nameo, nameo2, sizeof(nameo)); + } + else + { + char cwd[1024]; + getcwd( cwd, sizeof(cwd) ); + snprintf( nameo, sizeof(nameo), "%s/%s", cwd, nameo2 ); + } + //printf("Load ROM: '%s'\n", nameo ); if (!LoadGame(nameo, true)) { reloadLastGame(); @@ -6183,7 +6195,8 @@ void FCEU_LuaFrameBoundary() * * Returns true on success, false on failure. */ -int FCEU_LoadLuaCode(const char *filename, const char *arg) { +int FCEU_LoadLuaCode(const char *filename, const char *arg) +{ if (!DemandLua()) { return 0; @@ -6195,13 +6208,11 @@ int FCEU_LoadLuaCode(const char *filename, const char *arg) { luaScriptName = strdup(filename); } -#if defined(WIN32) || defined(__linux) std::string getfilepath = filename; getfilepath = getfilepath.substr(0,getfilepath.find_last_of("/\\") + 1); SetCurrentDir(getfilepath.c_str()); -#endif //stop any lua we might already have had running FCEU_LuaStop();