diff options
-rw-r--r-- | src/backend.c | 2 | ||||
-rw-r--r-- | src/map.c | 17 | ||||
-rw-r--r-- | src/map.h | 3 |
3 files changed, 19 insertions, 3 deletions
diff --git a/src/backend.c b/src/backend.c index cd2d8f2..e4839e6 100644 --- a/src/backend.c +++ b/src/backend.c @@ -161,7 +161,7 @@ backend_map_config_entry(struct plugin_state *state, Slapi_Entry *e, state->plugin_desc->spd_id, "initializing map %s in %s (2)\n", map, domain); - map_data_set_map(state, domain, map); + map_data_set_map(state, domain, map, NULL, NULL); map_data_clear_map(state, domain, map); for (i = 0; (base != NULL) && (base[i] != NULL); i++) { slapi_log_error(SLAPI_LOG_PLUGIN, @@ -33,6 +33,8 @@ struct { char *value; unsigned int value_len; } *entries; + void *backend_data; + void (*free_backend_data)(void *backend_data); } *maps; int n_maps; } *domains; @@ -276,6 +278,9 @@ map_data_unset_map(struct plugin_state *state, map = &domain->maps[i]; /* Free the contents. */ free(map->name); + if (map->free_backend_data != NULL) { + map->free_backend_data(map->backend_data); + } map_data_clear_map_map(state, map); /* Close the hole in the array. */ domain->n_maps--; @@ -314,7 +319,9 @@ map_data_unset_map(struct plugin_state *state, void map_data_set_map(struct plugin_state *state, const char *domain_name, - const char *map_name) + const char *map_name, + void *backend_data, + void (*free_backend_data)(void *backend_data)) { struct domain *domain, *domains; struct map *map, *maps; @@ -368,6 +375,8 @@ map_data_set_map(struct plugin_state *state, map = &maps[domain->n_maps]; memset(map, 0, sizeof(*map)); map->name = strdup(map_name); + map->backend_data = backend_data; + map->free_backend_data = free_backend_data; if (map->name != NULL) { /* Copy in existing data. */ memcpy(maps, domain->maps, @@ -382,6 +391,12 @@ map_data_set_map(struct plugin_state *state, return; } } + } else { + if (map->free_backend_data != NULL) { + map->free_backend_data(map->backend_data); + } + map->backend_data = backend_data; + map->free_backend_data = free_backend_data; } } @@ -32,7 +32,8 @@ void map_data_clear_map(struct plugin_state *state, void map_data_unset_map(struct plugin_state *state, const char *domain_name, const char *map_name); void map_data_set_map(struct plugin_state *state, - const char *domain_name, const char *map_name); + const char *domain_name, const char *map_name, + void *backend_data, void (*free_backend_data)(void *p)); void map_data_unset_entry_key(struct plugin_state *state, const char *domain_name, const char *map_name, unsigned int key_len, const char *key); |