parent
72d312ac9b
commit
865ae82114
@ -173,6 +173,31 @@ void cLuaState::Detach(void)
|
||||
|
||||
|
||||
|
||||
void cLuaState::AddPackagePath(const AString & a_PathVariable, const AString & a_Path)
|
||||
{
|
||||
// Get the current path:
|
||||
lua_getfield(m_LuaState, LUA_GLOBALSINDEX, "package"); // Stk: <package>
|
||||
lua_getfield(m_LuaState, -1, a_PathVariable.c_str()); // Stk: <package> <package.path>
|
||||
size_t len = 0;
|
||||
const char * PackagePath = lua_tolstring(m_LuaState, -1, &len);
|
||||
|
||||
// Append the new path:
|
||||
AString NewPackagePath(PackagePath, len);
|
||||
NewPackagePath.append(LUA_PATHSEP);
|
||||
NewPackagePath.append(a_Path);
|
||||
|
||||
// Set the new path to the environment:
|
||||
lua_pop(m_LuaState, 1); // Stk: <package>
|
||||
lua_pushlstring(m_LuaState, NewPackagePath.c_str(), NewPackagePath.length()); // Stk: <package> <NewPackagePath>
|
||||
lua_setfield(m_LuaState, -2, a_PathVariable.c_str()); // Stk: <package>
|
||||
lua_pop(m_LuaState, 1);
|
||||
lua_pop(m_LuaState, 1); // Stk: -
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
bool cLuaState::LoadFile(const AString & a_FileName)
|
||||
{
|
||||
ASSERT(IsValid());
|
||||
@ -1251,6 +1276,7 @@ void cLuaState::LogStack(lua_State * a_LuaState, const char * a_Header)
|
||||
case LUA_TLIGHTUSERDATA: Printf(Value, "%p", lua_touserdata(a_LuaState, i)); break;
|
||||
case LUA_TNUMBER: Printf(Value, "%f", (double)lua_tonumber(a_LuaState, i)); break;
|
||||
case LUA_TSTRING: Printf(Value, "%s", lua_tostring(a_LuaState, i)); break;
|
||||
case LUA_TTABLE: Printf(Value, "%p", lua_topointer(a_LuaState, i)); break;
|
||||
default: break;
|
||||
}
|
||||
LOGD(" Idx %d: type %d (%s) %s", i, Type, lua_typename(a_LuaState, Type), Value.c_str());
|
||||
|
@ -154,6 +154,9 @@ public:
|
||||
/** Returns true if the m_LuaState is valid */
|
||||
bool IsValid(void) const { return (m_LuaState != NULL); }
|
||||
|
||||
/** Adds the specified path to package.<a_PathVariable> */
|
||||
void AddPackagePath(const AString & a_PathVariable, const AString & a_Path);
|
||||
|
||||
/** Loads the specified file
|
||||
Returns false and logs a warning to the console if not successful (but the LuaState is kept open).
|
||||
m_SubsystemName is displayed in the warning log message.
|
||||
|
@ -82,6 +82,14 @@ bool cPluginLua::Initialize(void)
|
||||
lua_pushstring(m_LuaState, GetName().c_str());
|
||||
lua_setglobal(m_LuaState, LUA_PLUGIN_NAME_VAR_NAME);
|
||||
|
||||
// Add the plugin's folder to the package.path and package.cpath variables (#693):
|
||||
m_LuaState.AddPackagePath("path", FILE_IO_PREFIX + GetLocalFolder() + "/?.lua");
|
||||
#ifdef _WIN32
|
||||
m_LuaState.AddPackagePath("cpath", GetLocalFolder() + "\\?.dll");
|
||||
#else
|
||||
m_LuaState.AddPackagePath("cpath", FILE_IO_PREFIX + GetLocalFolder() + "/?.so");
|
||||
#endif
|
||||
|
||||
tolua_pushusertype(m_LuaState, this, "cPluginLua");
|
||||
lua_setglobal(m_LuaState, "g_Plugin");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user