]> pilppa.com Git - uci.git/commitdiff
ucimap: allow sectmaps to specify the option map data structure size (useful for...
authorFelix Fietkau <nbd@openwrt.org>
Sat, 29 Aug 2009 14:30:28 +0000 (16:30 +0200)
committerFelix Fietkau <nbd@openwrt.org>
Sat, 29 Aug 2009 14:31:36 +0000 (16:31 +0200)
ucimap.c
ucimap.h

index dddbafc92d410cbca6f5fab0cec2051dd8258d47..e51cd2b8bc77e3436427c7f31aa6f6fcce821fb0 100644 (file)
--- a/ucimap.c
+++ b/ucimap.c
@@ -216,12 +216,20 @@ ucimap_parse_options(struct uci_map *map, struct uci_sectmap *sm, struct uci_sec
        section = (unsigned long) sd + sizeof(struct uci_sectmap_data);
        uci_foreach_element(&s->options, e) {
                struct uci_optmap *om = NULL;
+               void *ptr = sm->options;
+               int size = sm->options_size;
+
+               if (!size)
+                       size = sizeof(struct uci_optmap);
 
                for (i = 0; i < sm->n_options; i++) {
-                       if (strcmp(e->name, sm->options[i].name) == 0) {
-                               om = &sm->options[i];
+                       struct uci_optmap *tmp = ptr;
+
+                       if (strcmp(e->name, tmp->name) == 0) {
+                               om = ptr;
                                break;
                        }
+                       ptr = (unsigned char *)ptr + size;
                }
                if (!om)
                        continue;
index 43f54e047c7931c3ecc44a30bc55d153cf9806a9..001ae1b206338f426cc3debe6c2abf02ef16c0ab 100644 (file)
--- a/ucimap.h
+++ b/ucimap.h
@@ -98,6 +98,7 @@ struct uci_sectmap {
        /* list of option mappings for this section */
        struct uci_optmap *options;
        unsigned int n_options;
+       unsigned int options_size;
 };
 
 struct uci_optmap {