From: Felix Fietkau Date: Sat, 29 Aug 2009 14:30:28 +0000 (+0200) Subject: ucimap: allow sectmaps to specify the option map data structure size (useful for... X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fuci.git;a=commitdiff_plain;h=43ff3a3a5489f214ddcabefe375215148e534f84 ucimap: allow sectmaps to specify the option map data structure size (useful for encapsulating it in another data structure --- diff --git a/ucimap.c b/ucimap.c index dddbafc..e51cd2b 100644 --- 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; diff --git a/ucimap.h b/ucimap.h index 43f54e0..001ae1b 100644 --- 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 {