cli: fix uci show output for anonymous sections (#21781)
authorFelix Fietkau <nbd@openwrt.org>
Tue, 2 Feb 2016 17:12:54 +0000 (18:12 +0100)
committerFelix Fietkau <nbd@openwrt.org>
Tue, 2 Feb 2016 17:13:04 +0000 (18:13 +0100)
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
cli.c

diff --git a/cli.c b/cli.c
index e42555468d9f8c44a071a5d2997954bd0ae3629b..f8b45dba091f088f84e22dc98503fe9e6e1fd7e3 100644 (file)
--- a/cli.c
+++ b/cli.c
@@ -87,9 +87,10 @@ static char *
 uci_lookup_section_ref(struct uci_section *s)
 {
        struct uci_type_list *ti = type_list;
+       char *ret;
        int maxlen;
 
-       if (!s->anonymous || !(flags & CLI_FLAG_SHOW_EXT))
+       if (!(flags & CLI_FLAG_SHOW_EXT))
                return s->e.name;
 
        /* look up in section type list */
@@ -108,19 +109,25 @@ uci_lookup_section_ref(struct uci_section *s)
                ti->name = s->type;
        }
 
-       maxlen = strlen(s->type) + 1 + 2 + 10;
-       if (!typestr) {
-               typestr = malloc(maxlen);
+       if (s->anonymous) {
+               maxlen = strlen(s->type) + 1 + 2 + 10;
+               if (!typestr) {
+                       typestr = malloc(maxlen);
+               } else {
+                       typestr = realloc(typestr, maxlen);
+               }
+
+               if (typestr)
+                       sprintf(typestr, "@%s[%d]", ti->name, ti->idx);
+
+               ret = typestr;
        } else {
-               typestr = realloc(typestr, maxlen);
+               ret = s->e.name;
        }
 
-       if (typestr)
-               sprintf(typestr, "@%s[%d]", ti->name, ti->idx);
-
        ti->idx++;
 
-       return typestr;
+       return ret;
 }
 
 static void uci_usage(void)