From dd1e5b1d7a75e777bd307f8b0702c818fb463e65 Mon Sep 17 00:00:00 2001 From: Vas Crabb Date: Thu, 17 Mar 2022 16:47:19 +1100 Subject: Lua engine: Enable checks for debug builds, kill sol::buffer. (#9419) --- src/frontend/mame/luaengine.cpp | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) (limited to 'src/frontend/mame/luaengine.cpp') diff --git a/src/frontend/mame/luaengine.cpp b/src/frontend/mame/luaengine.cpp index b6fc0014a4c..6981ebfe41b 100644 --- a/src/frontend/mame/luaengine.cpp +++ b/src/frontend/mame/luaengine.cpp @@ -95,18 +95,6 @@ template <> struct is_container : std::true_type { }; template <> struct is_container : std::true_type { }; -sol::buffer *sol_lua_get(sol::types, lua_State *L, int index, sol::stack::record &tracking) -{ - return new sol::buffer(stack::get(L, index), L); -} - -int sol_lua_push(sol::types, lua_State *L, buffer *value) -{ - delete value; - return 1; -} - - template struct usertype_container > : lua_engine::immutable_collection_helper, T> { @@ -834,7 +822,15 @@ void lua_engine::initialize() } new (&file) emu_file(path, flags); })); - file_type.set("read", [](emu_file &file, sol::buffer *buff) { buff->set_len(file.read(buff->get_ptr(), buff->get_len())); return buff; }); + file_type.set("read", + [] (emu_file &file, sol::this_state s, size_t len) + { + buffer_helper buf(s); + auto space = buf.prepare(len); + space.add(file.read(space.get(), len)); + buf.push(); + return sol::stack::pop(s); + }); file_type.set("write", [](emu_file &file, const std::string &data) { return file.write(data.data(), data.size()); }); file_type.set("puts", &emu_file::puts); file_type.set("open", static_cast(&emu_file::open)); @@ -1001,16 +997,18 @@ void lua_engine::initialize() } return sol::make_object(sol(), ret); }); - item_type.set("read_block", [](save_item &item, int offset, sol::buffer *buff) { - if(!item.base || ((offset + buff->get_len()) > (item.size * item.count))) + item_type.set("read_block", [](save_item &item, sol::this_state s, int offset, size_t len) { + buffer_helper buf(s); + auto space = buf.prepare(len); + if(!item.base || ((offset + len) > (item.size * item.count))) { - buff->set_len(0); + space.add(0); } else { const uint32_t blocksize = item.size * item.valcount; - uint32_t remaining = buff->get_len(); - uint8_t *dest = reinterpret_cast(buff->get_ptr()); + size_t remaining = len; + uint8_t *dest = reinterpret_cast(space.get()); while(remaining) { const uint32_t blockno = offset / blocksize; @@ -1022,8 +1020,10 @@ void lua_engine::initialize() remaining -= chunk; dest += chunk; } + space.add(len); } - return buff; + buf.push(); + return sol::stack::pop(s); }); item_type.set("write", [](save_item &item, int offset, uint64_t value) { if(!item.base || (offset >= item.count)) -- cgit v1.2.3-70-g09d2