From bc4aea67c9c7a9be23ecce7b6e71e21b7bb4b258 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Tue, 24 Dec 2024 08:08:44 +0300 Subject: [PATCH] add file.is_writeable --- dev/tests/filesystem.lua | 6 ++++++ doc/en/scripting/builtins/libfile.md | 6 ++++++ doc/ru/scripting/builtins/libfile.md | 6 ++++++ src/logic/scripting/lua/libs/libfile.cpp | 11 +++++++++++ 4 files changed, 29 insertions(+) diff --git a/dev/tests/filesystem.lua b/dev/tests/filesystem.lua index ac3e5e30..a9ff58ce 100644 --- a/dev/tests/filesystem.lua +++ b/dev/tests/filesystem.lua @@ -42,3 +42,9 @@ end debug.log("delete file") file.remove("config:binary") assert(not file.exists("config:binary")) + +debug.log("checking entry points for writeability") +assert(file.is_writeable("config:")) +assert(file.is_writeable("export:")) +assert(not file.is_writeable("user:")) +assert(not file.is_writeable("res:")) diff --git a/doc/en/scripting/builtins/libfile.md b/doc/en/scripting/builtins/libfile.md index fe02bed1..1e683b65 100644 --- a/doc/en/scripting/builtins/libfile.md +++ b/doc/en/scripting/builtins/libfile.md @@ -25,6 +25,12 @@ file.read_bytes(path: str) -> array of integers Read file into bytes array. +```lua +file.is_writeable(path: str) -> bool +``` + +Checks if the specified path is writable. + ```python file.write(path: str, text: str) -> nil ``` diff --git a/doc/ru/scripting/builtins/libfile.md b/doc/ru/scripting/builtins/libfile.md index a9a9c273..d7ed7792 100644 --- a/doc/ru/scripting/builtins/libfile.md +++ b/doc/ru/scripting/builtins/libfile.md @@ -25,6 +25,12 @@ file.read_bytes(путь: str) -> array of integers Читает файл в массив байт. +```lua +file.is_writeable(путь: str) -> bool +``` + +Проверяет, доступно ли право записи по указанному пути. + ```python file.write(путь: str, текст: str) -> nil ``` diff --git a/src/logic/scripting/lua/libs/libfile.cpp b/src/logic/scripting/lua/libs/libfile.cpp index 940aaa53..6e9cac5c 100644 --- a/src/logic/scripting/lua/libs/libfile.cpp +++ b/src/logic/scripting/lua/libs/libfile.cpp @@ -243,6 +243,16 @@ static int l_read_combined_object(lua::State* L) { return lua::pushvalue(L, engine->getResPaths()->readCombinedObject(path)); } +static int l_is_writeable(lua::State* L) { + std::string rawpath = lua::require_string(L, 1); + fs::path path = resolve_path(rawpath); + auto entryPoint = rawpath.substr(0, rawpath.find(':')); + if (writeable_entry_points.find(entryPoint) == writeable_entry_points.end()) { + return lua::pushboolean(L, false); + } + return lua::pushboolean(L, true); +} + const luaL_Reg filelib[] = { {"exists", lua::wrap}, {"find", lua::wrap}, @@ -263,4 +273,5 @@ const luaL_Reg filelib[] = { {"gzip_decompress", lua::wrap}, {"read_combined_list", lua::wrap}, {"read_combined_object", lua::wrap}, + {"is_writeable", lua::wrap}, {NULL, NULL}};