This patch fixes uci when showing only sections or options.

The patch applies to OpenWrt and add a patch in package/uci/patches.

I send it here because I couldn't send it to nbd.

> Please note that currently 'uci show config.section' is broken, so it
> is not fully functionnal with the current trunk. I sent a patch for
> uci to nbd concerning this issue. 
> As it is, it will just ignore parameters but still load modules.

Best regards,

Signed-off-by: Frédéric Moulins <[EMAIL PROTECTED]>

diff --git a/package/uci/patches/100-fix_show_sections.patch 
b/package/uci/patches/100-fix_show_sections.patch
new file mode 100644
--- /dev/null
+++ b/package/uci/patches/100-fix_show_sections.patch
@@ -0,0 +1,78 @@
+===================================================================
+--- uci-0.4.3.orig/cli.c       2008-06-13 13:39:05.000000000 +0200
++++ uci-0.4.3/cli.c    2008-06-13 17:17:29.000000000 +0200
+@@ -91,6 +91,15 @@
+       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 @@
+       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 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, &section, &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 @@
+               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;
+       }
+ 
+
_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
http://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

Reply via email to