diff --git a/res/modules/bit_converter.lua b/res/modules/bit_converter.lua index 2686c2c2..86afa334 100644 --- a/res/modules/bit_converter.lua +++ b/res/modules/bit_converter.lua @@ -68,19 +68,19 @@ local function floatOrDoubleToBytes(val, opt) if opt == 'd' then val = mantissa for i = 1, 6 do - table.insert(bytes, math.floor(val) % (2 ^ 8)) + bytes[#bytes + 1] = math.floor(val) % (2 ^ 8) val = math.floor(val / (2 ^ 8)) end else - table.insert(bytes, math.floor(mantissa) % (2 ^ 8)) + bytes[#bytes + 1] = math.floor(mantissa) % (2 ^ 8) val = math.floor(mantissa / (2 ^ 8)) - table.insert(bytes, math.floor(val) % (2 ^ 8)) + bytes[#bytes + 1] = math.floor(val) % (2 ^ 8) val = math.floor(val / (2 ^ 8)) end - table.insert(bytes, math.floor(exponent * ((opt == 'd') and 16 or 128) + val) % (2 ^ 8)) + bytes[#bytes + 1] = math.floor(exponent * ((opt == 'd') and 16 or 128) + val) % (2 ^ 8) val = math.floor((exponent * ((opt == 'd') and 16 or 128) + val) / (2 ^ 8)) - table.insert(bytes, math.floor(sign * 128 + val) % (2 ^ 8)) + bytes[#bytes + 1] = math.floor(sign * 128 + val) % (2 ^ 8) val = math.floor((sign * 128 + val) / (2 ^ 8)) if not endianness then diff --git a/src/logic/scripting/lua/libfile.cpp b/src/logic/scripting/lua/libfile.cpp index e3e88d17..3a00e0dd 100644 --- a/src/logic/scripting/lua/libfile.cpp +++ b/src/logic/scripting/lua/libfile.cpp @@ -141,10 +141,13 @@ static int l_file_write_bytes(lua::State* L) { fs::path path = resolve_path(lua::require_string(L, pathIndex)); + if (auto bytearray = lua::touserdata(L, -1)) { + auto& bytes = bytearray->data(); + return lua::pushboolean(L, files::write_bytes(path, bytes.data(), bytes.size())); + } + std::vector bytes; - int result = read_bytes_from_table(L, -1, bytes); - if(result != 1) { return result; } else {