summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNalin Dahyabhai <nalin@localhost.localdomain>2008-04-23 16:06:25 -0400
committerNalin Dahyabhai <nalin@localhost.localdomain>2008-04-23 16:06:25 -0400
commit47980ce9afc677ca6ef93f7d95b0174f24441d74 (patch)
tree4aa7dc158bda98521bd92c9e2d2e257e815d78cc
parent1ed71edbd0cb40ac00a4fd8f3664bfc179fc1de1 (diff)
downloadslapi-nis-47980ce9afc677ca6ef93f7d95b0174f24441d74.tar.gz
slapi-nis-47980ce9afc677ca6ef93f7d95b0174f24441d74.tar.xz
slapi-nis-47980ce9afc677ca6ef93f7d95b0174f24441d74.zip
- add some callback data to map definitions
-rw-r--r--src/backend.c2
-rw-r--r--src/map.c17
-rw-r--r--src/map.h3
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,
diff --git a/src/map.c b/src/map.c
index 0caf00c..10be1be 100644
--- a/src/map.c
+++ b/src/map.c
@@ -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;
}
}
diff --git a/src/map.h b/src/map.h
index ec32f4b..ec8e4ce 100644
--- a/src/map.h
+++ b/src/map.h
@@ -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);