diff options
author | madmaxoft <github@xoft.cz> | 2014-01-21 22:59:08 +0100 |
---|---|---|
committer | madmaxoft <github@xoft.cz> | 2014-01-21 23:00:35 +0100 |
commit | 2a018cfa49e0a85d2984f6daf6ee3c3372bdafda (patch) | |
tree | ad5fd7e212a7256d3de42f101f3d74296f5b2425 /src/Bindings/PluginLua.cpp | |
parent | Fix a crash but somewhere... (diff) | |
download | cuberite-2a018cfa49e0a85d2984f6daf6ee3c3372bdafda.tar cuberite-2a018cfa49e0a85d2984f6daf6ee3c3372bdafda.tar.gz cuberite-2a018cfa49e0a85d2984f6daf6ee3c3372bdafda.tar.bz2 cuberite-2a018cfa49e0a85d2984f6daf6ee3c3372bdafda.tar.lz cuberite-2a018cfa49e0a85d2984f6daf6ee3c3372bdafda.tar.xz cuberite-2a018cfa49e0a85d2984f6daf6ee3c3372bdafda.tar.zst cuberite-2a018cfa49e0a85d2984f6daf6ee3c3372bdafda.zip |
Diffstat (limited to '')
-rw-r--r-- | src/Bindings/PluginLua.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/Bindings/PluginLua.cpp b/src/Bindings/PluginLua.cpp index 4c4664815..1d8c4c6ed 100644 --- a/src/Bindings/PluginLua.cpp +++ b/src/Bindings/PluginLua.cpp @@ -1469,6 +1469,40 @@ bool cPluginLua::AddHookRef(int a_HookType, int a_FnRefIdx) +int cPluginLua::CallFunctionFromForeignState( + const AString & a_FunctionName, + cLuaState & a_ForeignState, + int a_ParamStart, + int a_ParamEnd +) +{ + cCSLock Lock(m_CriticalSection); + + // Call the function: + int NumReturns = m_LuaState.CallFunctionWithForeignParams(a_FunctionName, a_ForeignState, a_ParamStart, a_ParamEnd); + if (NumReturns < 0) + { + // The call has failed, an error has already been output to the log, so just silently bail out with the same error + return NumReturns; + } + + // Copy all the return values: + int Top = lua_gettop(m_LuaState); + int res = a_ForeignState.CopyStackFrom(m_LuaState, Top - NumReturns + 1, Top); + + // Remove the return values off this stack: + if (NumReturns > 0) + { + lua_pop(m_LuaState, NumReturns); + } + + return res; +} + + + + + AString cPluginLua::HandleWebRequest(const HTTPRequest * a_Request ) { cCSLock Lock(m_CriticalSection); |