remove static libraries/binaries
[oweals/uci.git] / cli.c
diff --git a/cli.c b/cli.c
index 144cddefa285f0fbdfaa4d88514404a6686b6258..41a78cbccd34d4dfef1b20bb5042d0a85ed492eb 100644 (file)
--- a/cli.c
+++ b/cli.c
@@ -38,6 +38,7 @@ enum {
        CMD_GET,
        CMD_SET,
        CMD_ADD_LIST,
+       CMD_DEL_LIST,
        CMD_DEL,
        CMD_RENAME,
        CMD_REVERT,
@@ -133,10 +134,11 @@ static void uci_usage(void)
                "\tcommit     [<config>]\n"
                "\tadd        <config> <section-type>\n"
                "\tadd_list   <config>.<section>.<option>=<string>\n"
+               "\tdel_list   <config>.<section>.<option>=<string>\n"
                "\tshow       [<config>[.<section>[.<option>]]]\n"
                "\tget        <config>.<section>[.<option>]\n"
                "\tset        <config>.<section>[.<option>]=<value>\n"
-               "\tdelete     <config>[.<section[.<option>]]\n"
+               "\tdelete     <config>[.<section>[[.<option>][=<id>]]]\n"
                "\trename     <config>.<section>[.<option>]=<name>\n"
                "\trevert     <config>[.<section>[.<option>]]\n"
                "\treorder    <config>.<section>=<position>\n"
@@ -242,6 +244,9 @@ static void uci_show_changes(struct uci_package *p)
                case UCI_CMD_LIST_ADD:
                        op = "+=";
                        break;
+               case UCI_CMD_LIST_DEL:
+                       op = "-=";
+                       break;
                default:
                        break;
                }
@@ -409,6 +414,7 @@ static int uci_do_section_cmd(int cmd, int argc, char **argv)
        struct uci_element *e;
        struct uci_ptr ptr;
        int ret = UCI_OK;
+       int dummy;
 
        if (argc != 2)
                return 255;
@@ -418,7 +424,9 @@ static int uci_do_section_cmd(int cmd, int argc, char **argv)
                return 1;
        }
 
-       if (ptr.value && (cmd != CMD_SET) && (cmd != CMD_ADD_LIST) && (cmd != CMD_RENAME) && (cmd != CMD_REORDER))
+       if (ptr.value && (cmd != CMD_SET) && (cmd != CMD_DEL) &&
+           (cmd != CMD_ADD_LIST) && (cmd != CMD_DEL_LIST) &&
+           (cmd != CMD_RENAME) && (cmd != CMD_REORDER))
                return 1;
 
        e = ptr.last;
@@ -453,6 +461,9 @@ static int uci_do_section_cmd(int cmd, int argc, char **argv)
        case CMD_ADD_LIST:
                ret = uci_add_list(ctx, &ptr);
                break;
+       case CMD_DEL_LIST:
+               ret = uci_del_list(ctx, &ptr);
+               break;
        case CMD_REORDER:
                if (!ptr.s || !ptr.value) {
                        ctx->err = UCI_ERR_NOTFOUND;
@@ -462,6 +473,8 @@ static int uci_do_section_cmd(int cmd, int argc, char **argv)
                ret = uci_reorder_section(ctx, ptr.s, strtoul(ptr.value, NULL, 10));
                break;
        case CMD_DEL:
+               if (ptr.value && !sscanf(ptr.value, "%d", &dummy))
+                       return 1;
                ret = uci_delete(ctx, &ptr);
                break;
        }
@@ -585,11 +598,14 @@ static int uci_cmd(int argc, char **argv)
                cmd = CMD_ADD;
        else if (!strcasecmp(argv[0], "add_list"))
                cmd = CMD_ADD_LIST;
+       else if (!strcasecmp(argv[0], "del_list"))
+               cmd = CMD_DEL_LIST;
        else
                cmd = -1;
 
        switch(cmd) {
                case CMD_ADD_LIST:
+               case CMD_DEL_LIST:
                case CMD_GET:
                case CMD_SET:
                case CMD_DEL: