diff options
author | Tycho <work.tycho+git@gmail.com> | 2014-01-22 18:13:12 +0100 |
---|---|---|
committer | Tycho <work.tycho+git@gmail.com> | 2014-01-22 18:13:12 +0100 |
commit | c832fbeb8e3f06849adc6bf02f2310c3f0331bc8 (patch) | |
tree | b990d233e6d63ecc398f77354975a01bf47466c5 /src/Bindings/PluginLua.cpp | |
parent | Actually implemented interfaces (diff) | |
parent | Merge pull request #574 from tonibm19/patch-1 (diff) | |
download | cuberite-c832fbeb8e3f06849adc6bf02f2310c3f0331bc8.tar cuberite-c832fbeb8e3f06849adc6bf02f2310c3f0331bc8.tar.gz cuberite-c832fbeb8e3f06849adc6bf02f2310c3f0331bc8.tar.bz2 cuberite-c832fbeb8e3f06849adc6bf02f2310c3f0331bc8.tar.lz cuberite-c832fbeb8e3f06849adc6bf02f2310c3f0331bc8.tar.xz cuberite-c832fbeb8e3f06849adc6bf02f2310c3f0331bc8.tar.zst cuberite-c832fbeb8e3f06849adc6bf02f2310c3f0331bc8.zip |
Diffstat (limited to 'src/Bindings/PluginLua.cpp')
-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); |