diff options
-rw-r--r-- | ucimap.c | 12 | ||||
-rw-r--r-- | ucimap.h | 1 |
2 files changed, 11 insertions, 2 deletions
@@ -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; @@ -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 { |