X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fuci.git;a=blobdiff_plain;f=cli.c;h=144cddefa285f0fbdfaa4d88514404a6686b6258;hp=7bef7a907d876ecfc24bab0169a7ee41cff88b0e;hb=2e90d2637abcbea12f5f4070be7a158fb4637604;hpb=476db477246a1438f3b2535bf37ab7f9130827c8 diff --git a/cli.c b/cli.c index 7bef7a9..144cdde 100644 --- a/cli.c +++ b/cli.c @@ -98,6 +98,8 @@ uci_lookup_section_ref(struct uci_section *s) } if (!ti) { ti = malloc(sizeof(struct uci_type_list)); + if (!ti) + return NULL; memset(ti, 0, sizeof(struct uci_type_list)); ti->next = type_list; type_list = ti; @@ -110,8 +112,12 @@ uci_lookup_section_ref(struct uci_section *s) } else { typestr = realloc(typestr, maxlen); } - sprintf(typestr, "@%s[%d]", ti->name, ti->idx); + + if (typestr) + sprintf(typestr, "@%s[%d]", ti->name, ti->idx); + ti->idx++; + return typestr; } @@ -224,8 +230,8 @@ static void uci_show_changes(struct uci_package *p) { struct uci_element *e; - uci_foreach_element(&p->saved_history, e) { - struct uci_history *h = uci_to_history(e); + uci_foreach_element(&p->saved_delta, e) { + struct uci_delta *h = uci_to_delta(e); char *prefix = ""; char *op = "="; @@ -252,6 +258,7 @@ static int package_cmd(int cmd, char *tuple) { struct uci_element *e = NULL; struct uci_ptr ptr; + int ret = 0; if (uci_lookup_ptr(ctx, &ptr, tuple, true) != UCI_OK) { cli_perror(); @@ -266,8 +273,10 @@ static int package_cmd(int cmd, char *tuple) case CMD_COMMIT: if (flags & CLI_FLAG_NOCOMMIT) return 0; - if (uci_commit(ctx, &ptr.p, false) != UCI_OK) + if (uci_commit(ctx, &ptr.p, false) != UCI_OK) { cli_perror(); + ret = 1; + } break; case CMD_EXPORT: uci_export(ctx, stdout, ptr.p, true); @@ -276,7 +285,7 @@ static int package_cmd(int cmd, char *tuple) if (!(ptr.flags & UCI_LOOKUP_COMPLETE)) { ctx->err = UCI_ERR_NOTFOUND; cli_perror(); - return 1; + ret = 1; } switch(e->type) { case UCI_TYPE_PACKAGE: @@ -295,8 +304,9 @@ static int package_cmd(int cmd, char *tuple) break; } - uci_unload(ctx, ptr.p); - return 0; + if (ptr.p) + uci_unload(ctx, ptr.p); + return ret; } static int uci_do_import(int argc, char **argv) @@ -444,7 +454,7 @@ static int uci_do_section_cmd(int cmd, int argc, char **argv) ret = uci_add_list(ctx, &ptr); break; case CMD_REORDER: - if (!ptr.s) { + if (!ptr.s || !ptr.value) { ctx->err = UCI_ERR_NOTFOUND; cli_perror(); return 1; @@ -627,6 +637,11 @@ int main(int argc, char **argv) delimiter = optarg; break; case 'f': + if (input != stdin) { + perror("uci"); + return 1; + } + input = fopen(optarg, "r"); if (!input) { perror("uci"); @@ -653,10 +668,10 @@ int main(int argc, char **argv) ctx->flags &= ~UCI_FLAG_EXPORT_NAME; break; case 'p': - uci_add_history_path(ctx, optarg); + uci_add_delta_path(ctx, optarg); break; case 'P': - uci_add_history_path(ctx, ctx->savedir); + uci_add_delta_path(ctx, ctx->savedir); uci_set_savedir(ctx, optarg); flags |= CLI_FLAG_NOCOMMIT; break; @@ -687,10 +702,9 @@ int main(int argc, char **argv) ret = uci_cmd(argc - 1, argv + 1); if (input != stdin) fclose(input); - if (ret == 255) { + + if (ret == 255) uci_usage(); - return 0; - } uci_free_context(ctx);