CMD_EXPORT,
CMD_COMMIT,
/* other cmds */
+ CMD_ADD,
CMD_IMPORT,
CMD_HELP,
};
"\texport [<config>]\n"
"\timport [<config>]\n"
"\tchanges [<config>]\n"
+ "\tcommit [<config>]\n"
+ "\tadd <config> <section-type>\n"
"\tshow [<config>[.<section>[.<option>]]]\n"
"\tget <config>.<section>[.<option>]\n"
"\tset <config>.<section>[.<option>]=<value>\n"
struct uci_package *p = NULL;
int ret;
- if (cmd == CMD_CHANGES)
- ctx->flags |= UCI_FLAG_SAVED_HISTORY;
ret = uci_load(ctx, package, &p);
- if (cmd == CMD_CHANGES)
- ctx->flags &= ~UCI_FLAG_SAVED_HISTORY;
if (ret != UCI_OK) {
cli_perror();
return 0;
}
+static int uci_do_add(int argc, char **argv)
+{
+ struct uci_package *p = NULL;
+ struct uci_section *s = NULL;
+ int ret;
+
+ if (argc != 3)
+ return 255;
+
+ ret = uci_load(ctx, argv[1], &p);
+ if (ret != UCI_OK)
+ goto done;
+
+ ret = uci_add_section(ctx, p, argv[2], &s);
+ if (ret != UCI_OK)
+ goto done;
+
+ ret = uci_save(ctx, p);
+
+done:
+ if (ret != UCI_OK)
+ cli_perror();
+ else if (s)
+ fprintf(stdout, "%s\n", s->e.name);
+
+ return ret;
+}
static int uci_do_section_cmd(int cmd, int argc, char **argv)
{
}
if (uci_parse_tuple(ctx, argv[1], &package, §ion, &option, ptr) != UCI_OK)
return 1;
+ if (section && !section[0])
+ return 1;
if (uci_load(ctx, package, &p) != UCI_OK) {
cli_perror();
ret = uci_revert(ctx, &p, section, option);
break;
case CMD_SET:
- ret = uci_set(ctx, p, section, option, value);
+ ret = uci_set(ctx, p, section, option, value, NULL);
break;
case CMD_DEL:
ret = uci_delete(ctx, p, section, option);
fprintf(stderr, "Unknown command\n");
/* clean up */
- uci_cleanup(ctx);
uci_foreach_element_safe(&ctx->root, tmp, e) {
uci_unload(ctx, uci_to_package(e));
}
cmd = CMD_IMPORT;
else if (!strcasecmp(argv[0], "help"))
cmd = CMD_HELP;
+ else if (!strcasecmp(argv[0], "add"))
+ cmd = CMD_ADD;
else
cmd = -1;
return uci_do_package_cmd(cmd, argc, argv);
case CMD_IMPORT:
return uci_do_import(argc, argv);
+ case CMD_ADD:
+ return uci_do_add(argc, argv);
case CMD_HELP:
uci_usage();
return 0;