Browse Source

ucimap: allow api users to take over allocation of section data structures

Felix Fietkau 14 years ago
parent
commit
ceaa2fbb3c
2 changed files with 12 additions and 2 deletions
  1. 8 2
      ucimap.c
  2. 4 0
      ucimap.h

+ 8 - 2
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;

+ 4 - 0
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);