diff options
Diffstat (limited to 'src/lua')
-rw-r--r-- | src/lua/lua_config.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/lua/lua_config.c b/src/lua/lua_config.c index ae1f9b0f0..3d3270984 100644 --- a/src/lua/lua_config.c +++ b/src/lua/lua_config.c @@ -429,6 +429,7 @@ lua_config_get_all_opt (lua_State * L) const gchar *mname; const ucl_object_t *obj, *cur, *cur_elt; ucl_object_iter_t it = NULL; + gint i; if (cfg) { mname = luaL_checkstring (L, 2); @@ -436,7 +437,8 @@ lua_config_get_all_opt (lua_State * L) if (mname) { obj = ucl_obj_get_key (cfg->rcl_obj, mname); /* Flatten object */ - if (obj != NULL && ucl_object_type (obj) == UCL_OBJECT) { + if (obj != NULL && (ucl_object_type (obj) == UCL_OBJECT || + ucl_object_type (obj) == UCL_ARRAY)) { lua_newtable (L); it = ucl_object_iterate_new (obj); @@ -455,6 +457,18 @@ lua_config_get_all_opt (lua_State * L) return 1; } + else if (obj != NULL) { + lua_newtable (L); + i = 1; + + LL_FOREACH (obj, cur) { + lua_pushnumber (L, i++); + ucl_object_push_lua (L, cur, true); + lua_settable (L, -3); + } + + return 1; + } } } lua_pushnil (L); |