+ p = find_package(L, package, AUTOLOAD_ON);
+ if (!p) {
+ err = UCI_ERR_NOTFOUND;
+ goto error;
+ }
+ err = uci_delete(ctx, p, section, option);
+
+error:
+ if (err)
+ uci_lua_perror(L, "uci.set");
+ lua_pushboolean(L, (err == 0));
+ return 1;
+}
+
+static int
+uci_lua_set(lua_State *L)
+{
+ struct uci_package *p;
+ const char *package = NULL;
+ const char *section = NULL;
+ const char *option = NULL;
+ const char *value = NULL;
+ const char *s;
+ int err = UCI_ERR_MEM;
+ int nargs;
+
+ nargs = lua_gettop(L);
+
+ s = luaL_checkstring(L, 1);
+ switch(nargs) {
+ case 1:
+ /* Format: uci.set("p.s.o=v") or uci.set("p.s=v") */
+ s = strdup(s);
+ if (!s)
+ goto error;
+
+ if ((err = uci_parse_tuple(ctx, (char *) s, (char **) &package, (char **) §ion, (char **) &option, (char **) &value)))
+ goto error;
+ break;
+ case 4:
+ /* Format: uci.set("p", "s", "o", "v") */
+ option = luaL_checkstring(L, 3);
+ /* fall through */
+ case 3:
+ /* Format: uci.set("p", "s", "v") */
+ package = s;
+ section = luaL_checkstring(L, 2);
+ value = luaL_checkstring(L, nargs);
+ break;
+ default:
+ err = UCI_ERR_INVAL;