Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/core
diff options
context:
space:
mode:
Diffstat (limited to 'source/core')
-rw-r--r--source/core/StarLua.cpp12
-rw-r--r--source/core/StarLua.hpp4
-rw-r--r--source/core/StarLuaConverters.hpp6
3 files changed, 14 insertions, 8 deletions
diff --git a/source/core/StarLua.cpp b/source/core/StarLua.cpp
index 901e875..41355b1 100644
--- a/source/core/StarLua.cpp
+++ b/source/core/StarLua.cpp
@@ -461,7 +461,7 @@ ByteArray LuaEngine::compile(ByteArray const& contents, String const& name) {
LuaString LuaEngine::createString(String const& str) {
lua_checkstack(m_state, 1);
- if (m_nullTerminated)
+ if (m_nullTerminated > 0)
lua_pushstring(m_state, str.utf8Ptr());
else
lua_pushlstring(m_state, str.utf8Ptr(), str.utf8Size());
@@ -556,6 +556,10 @@ LuaNullEnforcer LuaEngine::nullTerminate() {
return LuaNullEnforcer(*this);
}
+void LuaEngine::setNullTerminated(bool nullTerminated) {
+ m_nullTerminated = nullTerminated ? 0 : INT_MIN;
+}
+
LuaEngine* LuaEngine::luaEnginePtr(lua_State* state) {
return (*reinterpret_cast<LuaEngine**>(lua_getextraspace(state)));
}
@@ -723,7 +727,7 @@ char const* LuaEngine::stringPtr(int handleIndex) {
}
size_t LuaEngine::stringLength(int handleIndex) {
- if (m_nullTerminated)
+ if (m_nullTerminated > 0)
return strlen(lua_tostring(m_handleThread, handleIndex));
else {
size_t len = 0;
@@ -733,7 +737,7 @@ size_t LuaEngine::stringLength(int handleIndex) {
}
String LuaEngine::string(int handleIndex) {
- if (m_nullTerminated)
+ if (m_nullTerminated > 0)
return String(lua_tostring(m_handleThread, handleIndex));
else {
size_t len = 0;
@@ -743,7 +747,7 @@ String LuaEngine::string(int handleIndex) {
}
StringView LuaEngine::stringView(int handleIndex) {
- if (m_nullTerminated)
+ if (m_nullTerminated > 0)
return StringView(lua_tostring(m_handleThread, handleIndex));
else {
size_t len = 0;
diff --git a/source/core/StarLua.hpp b/source/core/StarLua.hpp
index 0deb76f..792dc09 100644
--- a/source/core/StarLua.hpp
+++ b/source/core/StarLua.hpp
@@ -600,6 +600,8 @@ public:
// Enforce null-terminated string conversion as long as the returned enforcer object is in scope.
LuaNullEnforcer nullTerminate();
+ // Disables null-termination enforcement
+ void setNullTerminated(bool nullTerminated);
private:
friend struct LuaDetail::LuaHandle;
@@ -729,7 +731,7 @@ private:
uint64_t m_instructionCount;
unsigned m_recursionLevel;
unsigned m_recursionLimit;
- unsigned m_nullTerminated;
+ int m_nullTerminated;
HashMap<tuple<String, unsigned>, shared_ptr<LuaProfileEntry>> m_profileEntries;
};
diff --git a/source/core/StarLuaConverters.hpp b/source/core/StarLuaConverters.hpp
index 72ab763..3270d16 100644
--- a/source/core/StarLuaConverters.hpp
+++ b/source/core/StarLuaConverters.hpp
@@ -15,16 +15,16 @@ template <typename T>
struct LuaConverter<LuaNullTermWrapper<T>> : LuaConverter<T> {
static LuaValue from(LuaEngine& engine, LuaNullTermWrapper<T>&& v) {
auto enforcer = engine.nullTerminate();
- return LuaConverter<T>::from(std::forward<T>(v));
+ return LuaConverter<T>::from(engine, std::forward<T>(v));
}
static LuaValue from(LuaEngine& engine, LuaNullTermWrapper<T> const& v) {
auto enforcer = engine.nullTerminate();
- return LuaConverter<T>::from(v);
+ return LuaConverter<T>::from(engine, v);
}
static LuaNullTermWrapper<T> to(LuaEngine& engine, LuaValue const& v) {
- return LuaConverter<T>::to(v);
+ return LuaConverter<T>::to(engine, v);
}
};