diff --git a/libraries/AP_Scripting/docs/docs.lua b/libraries/AP_Scripting/docs/docs.lua index 4f70ca60671..b8f7c806b84 100644 --- a/libraries/AP_Scripting/docs/docs.lua +++ b/libraries/AP_Scripting/docs/docs.lua @@ -3062,6 +3062,11 @@ function scripting:restart_all() end ---@return table -- table of filenames function dirlist(directoryname) end +-- return true if path is a directory +---@param path string +---@return result +function isdirectory(path) end + --desc ---@param filename string function remove(filename) end diff --git a/libraries/AP_Scripting/generator/description/bindings.desc b/libraries/AP_Scripting/generator/description/bindings.desc index d2c25274b35..5d6bf1b39e1 100644 --- a/libraries/AP_Scripting/generator/description/bindings.desc +++ b/libraries/AP_Scripting/generator/description/bindings.desc @@ -812,6 +812,7 @@ userdata uint32_t manual tofloat uint32_t_tofloat 0 global manual dirlist lua_dirlist 1 global manual remove lua_removefile 1 +global manual isdirectory lua_isdirectory 1 global manual print lua_print 1 singleton mavlink depends HAL_GCS_ENABLED diff --git a/libraries/AP_Scripting/lua_bindings.cpp b/libraries/AP_Scripting/lua_bindings.cpp index a3d574e8ed2..ac7b4b83349 100644 --- a/libraries/AP_Scripting/lua_bindings.cpp +++ b/libraries/AP_Scripting/lua_bindings.cpp @@ -720,6 +720,25 @@ int lua_dirlist(lua_State *L) { return 1; /* table is already on top */ } +/* + return true if path is a directory + */ +int lua_isdirectory(lua_State *L) { + binding_argcheck(L, 1); + + const char *path = luaL_checkstring(L, 1); + + struct stat st; + if (AP::FS().stat(path, &st) != 0) { + lua_pushnil(L); /* return nil and ... */ + lua_pushstring(L, strerror(errno)); /* error message */ + return 2; + } + bool ret = (st.st_mode & S_IFMT) == S_IFDIR; + lua_pushboolean(L, ret); + return 1; +} + /* remove a file */ diff --git a/libraries/AP_Scripting/lua_bindings.h b/libraries/AP_Scripting/lua_bindings.h index 797a551b205..41adfd85965 100644 --- a/libraries/AP_Scripting/lua_bindings.h +++ b/libraries/AP_Scripting/lua_bindings.h @@ -12,6 +12,7 @@ int lua_get_CAN_device(lua_State *L); int lua_get_CAN_device2(lua_State *L); int lua_dirlist(lua_State *L); int lua_removefile(lua_State *L); +int lua_isdirectory(lua_State *L); int SRV_Channels_get_safety_state(lua_State *L); int lua_get_PWMSource(lua_State *L); int lua_get_SocketAPM(lua_State *L);