From 1909e804094de74e60375f91a3646ac511796267 Mon Sep 17 00:00:00 2001 From: Sasha Szpakowski Date: Sun, 19 Feb 2023 20:26:35 -0400 Subject: [PATCH] Add ByteData:setString. --- src/modules/data/wrap_ByteData.cpp | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/modules/data/wrap_ByteData.cpp b/src/modules/data/wrap_ByteData.cpp index f34a48d9e..bc480c18a 100644 --- a/src/modules/data/wrap_ByteData.cpp +++ b/src/modules/data/wrap_ByteData.cpp @@ -44,8 +44,27 @@ int w_ByteData_clone(lua_State *L) return 1; } +int w_ByteData_setString(lua_State *L) +{ + Data *t = luax_checkdata(L, 1); + size_t size = 0; + const char *str = luaL_checklstring(L, 2, &size); + int64 offset = (int64)luaL_optnumber(L, 3, 0); + + size = std::min(size, t->getSize()); + + if (size == 0) + return 0; + + if (offset < 0 || offset + size > (int64) t->getSize()) + return luaL_error(L, "The given string offset and size don't fit within the Data's size."); + + memcpy((char *) t->getData() + (size_t) offset, str, size); + return 0; +} + template -int w_ByteData_setT(lua_State *L) +static int w_ByteData_setT(lua_State *L) { ByteData *t = luax_checkbytedata(L, 1); int64 offset = (int64) luaL_checknumber(L, 2); @@ -129,6 +148,7 @@ int w_ByteData_setUInt64(lua_State *L) static const luaL_Reg w_ByteData_functions[] = { { "clone", w_ByteData_clone }, + { "setString", w_ByteData_setString }, { "setFloat", w_ByteData_setFloat }, { "setDouble", w_ByteData_setDouble }, { "setInt8", w_ByteData_setInt8 },