From: Felix Fietkau Date: Sun, 17 Aug 2008 13:40:33 +0000 (+0200) Subject: Fix uci show for sections and options. X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fuci.git;a=commitdiff_plain;h=e7f08cbbc35f6e761579634e7154b5660ac427e5 Fix uci show for sections and options. Signed-off-by: Frédéric Moulins --- diff --git a/cli.c b/cli.c index 8227987..6e2a5ff 100644 --- a/cli.c +++ b/cli.c @@ -91,6 +91,15 @@ static void cli_perror(void) uci_perror(ctx, appname); } +static void uci_show_option(struct uci_option *o) +{ + printf("%s.%s.%s=%s\n", + o->section->package->e.name, + o->section->e.name, + o->e.name, + o->value); +} + static void uci_show_section(struct uci_section *p) { struct uci_element *e; @@ -100,7 +109,7 @@ static void uci_show_section(struct uci_section *p) sname = p->e.name; printf("%s.%s=%s\n", cname, sname, p->type); uci_foreach_element(&p->options, e) { - printf("%s.%s.%s=%s\n", cname, sname, e->name, uci_to_option(e)->value); + uci_show_option(uci_to_option(e)); } } @@ -131,11 +140,21 @@ static void uci_show_changes(struct uci_package *p) } } -static int package_cmd(int cmd, char *package) +static int package_cmd(int cmd, char *tuple) { struct uci_package *p = NULL; + struct uci_element *e = NULL; + char *package = NULL; + char *section = NULL; + char *option = NULL; + char **ptr = NULL; int ret; + if (uci_parse_tuple(ctx, tuple, &package, §ion, &option, ptr) != UCI_OK) + return 1; + if (section && !section[0]) + return 1; + ret = uci_load(ctx, package, &p); if (ret != UCI_OK) { @@ -158,7 +177,24 @@ static int package_cmd(int cmd, char *package) uci_export(ctx, stdout, p, true); break; case CMD_SHOW: - uci_show_package(p); + if (!section) { + uci_show_package(p); + return 0; + } + if (uci_lookup(ctx, &e, p, section, option) != UCI_OK) + return 1; + + switch(e->type) { + case UCI_TYPE_SECTION: + uci_show_section(uci_to_section(e)); + break; + case UCI_TYPE_OPTION: + uci_show_option(uci_to_option(e)); + break; + default: + /* should not happen */ + return 1; + } break; }