From eea119487cfbaa5ca693aa1d8ac162d0238bf31e Mon Sep 17 00:00:00 2001 From: BanceDev Date: Wed, 4 Sep 2024 09:04:00 -0400 Subject: added exists function to lua api --- .lush/scripts/example.lua | 5 +++++ src/lua_api.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/.lush/scripts/example.lua b/.lush/scripts/example.lua index 8da0435..04cb516 100644 --- a/.lush/scripts/example.lua +++ b/.lush/scripts/example.lua @@ -44,3 +44,8 @@ print(cwd) lush.cd("~/.lush/scripts") lush.exec('cat "example.lua" | grep "hello" | sort | uniq') lush.cd(cwd) + +-- exists allows you to check if a file or directory exists +if lush.exists("~/.lush/scripts/example.lua") then + print("example.lua exists") +end diff --git a/src/lua_api.c b/src/lua_api.c index 4dc2149..9f4bdc8 100644 --- a/src/lua_api.c +++ b/src/lua_api.c @@ -154,6 +154,46 @@ static int l_cd(lua_State *L) { return 1; } +static int l_exists(lua_State *L) { + bool rc; + uid_t uid = getuid(); + struct passwd *pw = getpwuid(uid); + if (!pw) { + perror("retrieve home dir"); + rc = false; + lua_pushboolean(L, rc); + return 1; + } + + const char *check_item = luaL_checkstring(L, 1); + if (check_item == NULL) { + // passed nothing + rc = false; + lua_pushboolean(L, rc); + return 1; + } else { + char path[PATH_MAX]; + char extended_path[PATH_MAX]; + char *tilda = strchr(check_item, '~'); + if (tilda) { + strcpy(path, pw->pw_dir); + strcat(path, tilda + 1); + } else { + strcpy(path, check_item); + } + char *exp_path = realpath(path, extended_path); + // if the path doesnt exist + if (!exp_path) { + rc = false; + lua_pushboolean(L, rc); + return 1; + } + } + rc = true; + lua_pushboolean(L, rc); + return 1; +} + // -- register Lua functions -- void lua_register_api(lua_State *L) { @@ -168,6 +208,8 @@ void lua_register_api(lua_State *L) { lua_setfield(L, -2, "debug"); lua_pushcfunction(L, l_cd); lua_setfield(L, -2, "cd"); + lua_pushcfunction(L, l_exists); + lua_setfield(L, -2, "exists"); // set the table as global lua_setglobal(L, "lush"); } -- cgit v1.2.3-59-g8ed1b