From d5d3f94aa5eacab4a8d6a1a2beb244798330ec6a Mon Sep 17 00:00:00 2001 From: BanceDev Date: Tue, 3 Sep 2024 10:51:42 -0400 Subject: update lua api to table and added getcwd to api --- src/lua_api.c | 27 +++++++++++++++++++++++---- src/lush.c | 6 ++++-- 2 files changed, 27 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/lua_api.c b/src/lua_api.c index 5a92b58..554c0c9 100644 --- a/src/lua_api.c +++ b/src/lua_api.c @@ -20,6 +20,7 @@ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. #include #include #include +#include #include #include #include @@ -57,7 +58,7 @@ void lua_load_script(lua_State *L, const char *script) { } // -- C funtions -- -static void execute_command(lua_State *L, const char *line) { +static int execute_command(lua_State *L, const char *line) { int status = 0; char **commands = lush_split_pipes((char *)line); char ***args = lush_split_args(commands, &status); @@ -72,17 +73,35 @@ static void execute_command(lua_State *L, const char *line) { } free(args); free(commands); + return status; } // -- Lua wrappers -- static int l_execute_command(lua_State *L) { const char *command = luaL_checkstring(L, 1); - execute_command(L, command); - return 0; + int status = execute_command(L, command); + bool rc = status == 0 ? true : false; + lua_pushboolean(L, rc); + return 1; +} + +static int l_get_cwd(lua_State *L) { + char *cwd = getcwd(NULL, 0); + lua_pushstring(L, cwd); + free(cwd); + return 1; } // -- register Lua functions -- void lua_register_api(lua_State *L) { - lua_register(L, "exec", l_execute_command); + // global table for api functions + lua_newtable(L); + + lua_pushcfunction(L, l_execute_command); + lua_setfield(L, -2, "exec"); + lua_pushcfunction(L, l_get_cwd); + lua_setfield(L, -2, "getcwd"); + // set the table as global + lua_setglobal(L, "lush"); } diff --git a/src/lush.c b/src/lush.c index bf5a283..bdb9ba5 100644 --- a/src/lush.c +++ b/src/lush.c @@ -123,9 +123,11 @@ int lush_time(lua_State *L, char ***args) { } int lush_lush(lua_State *L, char ***args) { - // run the lua file given + // move past lush command args[0]++; - lua_load_script(L, *args[0]); + + // run the lua file given + lua_load_script(L, args[0][0]); // return pointer back for free() args[0]--; -- cgit v1.2.3-59-g8ed1b