uci/lua: add list_configs() function
authorDirk Feytons <dirk.feytons@gmail.com>
Thu, 29 Sep 2016 15:39:56 +0000 (17:39 +0200)
committerJohn Crispin <john@phrozen.org>
Thu, 27 Oct 2016 10:37:15 +0000 (12:37 +0200)
Returns an array with all the available configs.

Signed-off-by: Dirk Feytons <dirk.feytons@gmail.com>
lua/uci.c

index 47d59c883ab9320b39304fdd46297576c3550fa1..ddb9c5cc23c1db81348f7a2091a2ca5e250d3d73 100644 (file)
--- a/lua/uci.c
+++ b/lua/uci.c
@@ -910,6 +910,26 @@ uci_lua_set_savedir(lua_State *L)
        return uci_push_status(L, ctx, false);
 }
 
+static int
+uci_lua_list_configs(lua_State *L)
+{
+       struct uci_context *ctx;
+       char **configs = NULL;
+       char **ptr;
+       int i = 1;
+
+       ctx = find_context(L, NULL);
+       if ((uci_list_configs(ctx, &configs) != UCI_OK) || !configs)
+               return uci_push_status(L, ctx, false);
+       lua_newtable(L);
+       for (ptr = configs; *ptr; ptr++) {
+               lua_pushstring(L, *ptr);
+               lua_rawseti(L, -2, i++);
+       }
+       free(configs);
+       return 1;
+}
+
 static int
 uci_lua_gc(lua_State *L)
 {
@@ -971,6 +991,7 @@ static const luaL_Reg uci[] = {
        { "set_confdir", uci_lua_set_confdir },
        { "get_savedir", uci_lua_get_savedir },
        { "set_savedir", uci_lua_set_savedir },
+       { "list_configs", uci_lua_list_configs },
        { NULL, NULL },
 };