lua: simplify add_list changes handling, always create a table for LIST_ADD commands
authorJo-Philipp Wich <jow@openwrt.org>
Sat, 12 Nov 2011 14:16:31 +0000 (15:16 +0100)
committerFelix Fietkau <nbd@openwrt.org>
Mon, 14 Nov 2011 12:19:07 +0000 (13:19 +0100)
lua/uci.c

index ac04c11ca6dc628584755ca4e5f1b92b9292f3a3..cc6f3704d47b2e9b3dcae196a0b117f5be2bd06e 100644 (file)
--- a/lua/uci.c
+++ b/lua/uci.c
@@ -711,20 +711,18 @@ uci_lua_add_change(lua_State *L, struct uci_element *e)
        if (name) {
                lua_getfield(L, -1, name);
 
-               /* there seems to be no value yet so simply push it as string */
+               /* there seems to be no value yet */
                if (lua_isnil(L, -1)) {
-                       lua_pushstring(L, value);
-                       lua_setfield(L, -3, name);
-
-               /* there is already a value, so this change is a list_add,
-                * coerce string into one-element array and append new value */
-               } else if (lua_isstring(L, -1)) {
-                       lua_newtable(L);
-                       lua_pushvalue(L, -2);
-                       lua_rawseti(L, -2, 1);
-                       lua_pushstring(L, value);
-                       lua_rawseti(L, -2, 2);
-                       lua_setfield(L, -3, name);
+                       /* this delta is a list add operation, initialize table */
+                       if (h->cmd == UCI_CMD_LIST_ADD) {
+                               lua_newtable(L);
+                               lua_pushstring(L, value);
+                               lua_rawseti(L, -2, 1);
+                               lua_setfield(L, -3, name);
+                       } else {
+                               lua_pushstring(L, value);
+                               lua_setfield(L, -3, name);
+                       }
 
                /* a table is on the top of the stack so this is a subsequent,
                 * list_add, append this value to table */