From 43ff3a3a5489f214ddcabefe375215148e534f84 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Sat, 29 Aug 2009 16:30:28 +0200 Subject: [PATCH 1/1] ucimap: allow sectmaps to specify the option map data structure size (useful for encapsulating it in another data structure --- ucimap.c | 12 ++++++++++-- ucimap.h | 1 + 2 files changed, 11 insertions(+), 2 deletions(-) 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 { -- 2.11.0