From d9d4d2b305628ba184931d7283f881ab2ccda851 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Sun, 6 Apr 2025 14:39:21 +0300 Subject: [PATCH] fix: missing Bytearray option in file.read_bytes --- doc/en/scripting/builtins/libfile.md | 4 ++-- doc/ru/scripting/builtins/libfile.md | 4 ++-- src/logic/scripting/lua/libs/libfile.cpp | 16 ++++++++++------ 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/doc/en/scripting/builtins/libfile.md b/doc/en/scripting/builtins/libfile.md index 80f7752b..73d286af 100644 --- a/doc/en/scripting/builtins/libfile.md +++ b/doc/en/scripting/builtins/libfile.md @@ -20,10 +20,10 @@ file.read(path: str) -> str Read whole text file. ```python -file.read_bytes(path: str) -> array of integers +file.read_bytes(path: str, [optional] usetable) -> array of integers ``` -Read file into bytes array. +Read file into bytes array. If usetable = false , returns Bytearray instead of table. ```lua file.is_writeable(path: str) -> bool diff --git a/doc/ru/scripting/builtins/libfile.md b/doc/ru/scripting/builtins/libfile.md index f764ed56..6f35306d 100644 --- a/doc/ru/scripting/builtins/libfile.md +++ b/doc/ru/scripting/builtins/libfile.md @@ -20,10 +20,10 @@ file.read(путь: str) -> str Читает весь текстовый файл и возвращает в виде строки ```python -file.read_bytes(путь: str) -> array of integers +file.read_bytes(путь: str, [опционально] usetable) -> array of integers ``` -Читает файл в массив байт. +Читает файл в массив байт. При значении usetable = false возвращает Bytearray вместо table. ```lua file.is_writeable(путь: str) -> bool diff --git a/src/logic/scripting/lua/libs/libfile.cpp b/src/logic/scripting/lua/libs/libfile.cpp index 546fe4d7..51c63e82 100644 --- a/src/logic/scripting/lua/libs/libfile.cpp +++ b/src/logic/scripting/lua/libs/libfile.cpp @@ -125,14 +125,18 @@ static int l_read_bytes(lua::State* L) { if (io::is_regular_file(path)) { size_t length = static_cast(io::file_size(path)); - auto bytes = io::read_bytes(path, length); + auto bytes = io::read_bytes(path); - lua::createtable(L, length, 0); - int newTable = lua::gettop(L); + if (lua::gettop(L) < 2 || !lua::toboolean(L, 2)) { + lua::newuserdata(L, std::move(bytes)); + } else { + lua::createtable(L, length, 0); + int newTable = lua::gettop(L); - for (size_t i = 0; i < length; i++) { - lua::pushinteger(L, bytes[i]); - lua::rawseti(L, i + 1, newTable); + for (size_t i = 0; i < length; i++) { + lua::pushinteger(L, bytes[i]); + lua::rawseti(L, i + 1, newTable); + } } return 1; }