Add ByteData:setString.

This commit is contained in:
Sasha Szpakowski
2023-02-19 20:26:35 -04:00
parent 78de7bdf3c
commit 1909e80409
+21 -1
View File
@@ -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 <typename T>
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 },