From: Felix Fietkau Date: Sat, 29 Aug 2009 20:59:02 +0000 (+0200) Subject: ucimap: allow api users to take over allocation of section data structures X-Git-Url: http://pilppa.com/gitweb/?a=commitdiff_plain;h=ceaa2fbb3ce565b8d952179f2ac4cfe9190580ef;p=uci.git ucimap: allow api users to take over allocation of section data structures --- diff --git a/ucimap.c b/ucimap.c index 455cf36..d4dc05f 100644 --- a/ucimap.c +++ b/ucimap.c @@ -282,11 +282,17 @@ ucimap_parse_section(struct uci_map *map, struct uci_sectionmap *sm, struct uci_ int n_alloc = 2; int err; - sd = malloc(sm->alloc_len); + if (sm->alloc) { + sd = sm->alloc(map, sm, s); + memset(sd, 0, sizeof(struct ucimap_section_data)); + } else { + sd = malloc(sm->alloc_len); + memset(sd, 0, sm->alloc_len); + } + if (!sd) return UCI_ERR_MEM; - memset(sd, 0, sm->alloc_len); INIT_LIST_HEAD(&sd->list); sd->map = map; sd->sm = sm; diff --git a/ucimap.h b/ucimap.h index 4254b1e..921ab4e 100644 --- a/ucimap.h +++ b/ucimap.h @@ -109,6 +109,10 @@ struct uci_sectionmap { /* sectionmap offset */ unsigned int smap_offset; + /* allocate a new data structure and return a pointer to the section map data */ + struct ucimap_section_data *(*alloc)(struct uci_map *map, + struct uci_sectionmap *sm, struct uci_section *s); + /* give the caller time to initialize the preallocated struct */ int (*init)(struct uci_map *map, void *section, struct uci_section *s);