diff --git a/include/corosync/confdb.h b/include/corosync/confdb.h index c1506e67..40e72c37 100644 --- a/include/corosync/confdb.h +++ b/include/corosync/confdb.h @@ -151,7 +151,7 @@ cs_error_t confdb_stop_track_changes ( cs_error_t confdb_object_create ( confdb_handle_t handle, hdb_handle_t parent_object_handle, - void *object_name, + const void *object_name, int object_name_len, hdb_handle_t *object_handle); @@ -170,17 +170,17 @@ cs_error_t confdb_object_parent_get ( cs_error_t confdb_key_create ( confdb_handle_t handle, hdb_handle_t parent_object_handle, - void *key_name, + const void *key_name, int key_name_len, - void *value, + const void *value, int value_len); cs_error_t confdb_key_delete ( confdb_handle_t handle, hdb_handle_t parent_object_handle, - void *key_name, + const void *key_name, int key_name_len, - void *value, + const void *value, int value_len); /* @@ -189,7 +189,7 @@ cs_error_t confdb_key_delete ( cs_error_t confdb_key_get ( confdb_handle_t handle, hdb_handle_t parent_object_handle, - void *key_name, + const void *key_name, int key_name_len, void *value, int *value_len); @@ -197,24 +197,24 @@ cs_error_t confdb_key_get ( cs_error_t confdb_key_replace ( confdb_handle_t handle, hdb_handle_t parent_object_handle, - void *key_name, + const void *key_name, int key_name_len, - void *old_value, + const void *old_value, int old_value_len, - void *new_value, + const void *new_value, int new_value_len); cs_error_t confdb_key_increment ( confdb_handle_t handle, hdb_handle_t parent_object_handle, - void *key_name, + const void *key_name, int key_name_len, unsigned int *value); cs_error_t confdb_key_decrement ( confdb_handle_t handle, hdb_handle_t parent_object_handle, - void *key_name, + const void *key_name, int key_name_len, unsigned int *value); @@ -231,7 +231,7 @@ cs_error_t confdb_object_find_start ( cs_error_t confdb_object_find ( confdb_handle_t handle, hdb_handle_t parent_object_handle, - void *object_name, + const void *object_name, int object_name_len, hdb_handle_t *object_handle); @@ -269,5 +269,16 @@ cs_error_t confdb_key_iter ( void *value, int *value_len); +/* + * Get/set context variable + */ + +cs_error_t confdb_context_get ( + confdb_handle_t handle, + const void **context); + +cs_error_t confdb_context_set ( + confdb_handle_t handle, + const void *context); #endif /* COROSYNC_CONFDB_H_DEFINED */ diff --git a/include/corosync/quorum.h b/include/corosync/quorum.h index 2ca07ce5..39690c19 100644 --- a/include/corosync/quorum.h +++ b/include/corosync/quorum.h @@ -101,5 +101,12 @@ cs_error_t quorum_trackstart ( cs_error_t quorum_trackstop ( quorum_handle_t handle); +cs_error_t quorum_context_set ( + quorum_handle_t handle, + const void *context); + +cs_error_t quorum_context_get ( + quorum_handle_t handle, + const void **context); #endif /* COROSYNC_QUORUM_H_DEFINED */ diff --git a/lib/confdb.c b/lib/confdb.c index 848f9666..f9d42fa0 100644 --- a/lib/confdb.c +++ b/lib/confdb.c @@ -66,7 +66,7 @@ struct confdb_inst { int finalize; int standalone; confdb_callbacks_t callbacks; - void *context; + const void *context; pthread_mutex_t response_mutex; pthread_mutex_t dispatch_mutex; @@ -247,7 +247,7 @@ cs_error_t confdb_fd_get ( cs_error_t confdb_context_get ( confdb_handle_t handle, - void **context) + const void **context) { cs_error_t error; struct confdb_inst *confdb_inst; @@ -266,7 +266,7 @@ cs_error_t confdb_context_get ( cs_error_t confdb_context_set ( confdb_handle_t handle, - void *context) + const void *context) { cs_error_t error; struct confdb_inst *confdb_inst; @@ -420,7 +420,7 @@ error_noput: cs_error_t confdb_object_create ( confdb_handle_t handle, hdb_handle_t parent_object_handle, - void *object_name, + const void *object_name, int object_name_len, hdb_handle_t *object_handle) { @@ -683,9 +683,9 @@ cs_error_t confdb_object_iter_destroy( cs_error_t confdb_key_create ( confdb_handle_t handle, hdb_handle_t parent_object_handle, - void *key_name, + const void *key_name, int key_name_len, - void *value, + const void *value, int value_len) { cs_error_t error; @@ -745,9 +745,9 @@ error_exit: cs_error_t confdb_key_delete ( confdb_handle_t handle, hdb_handle_t parent_object_handle, - void *key_name, + const void *key_name, int key_name_len, - void *value, + const void *value, int value_len) { cs_error_t error; @@ -807,7 +807,7 @@ error_exit: cs_error_t confdb_key_get ( confdb_handle_t handle, hdb_handle_t parent_object_handle, - void *key_name, + const void *key_name, int key_name_len, void *value, int *value_len) @@ -871,7 +871,7 @@ error_exit: cs_error_t confdb_key_increment ( confdb_handle_t handle, hdb_handle_t parent_object_handle, - void *key_name, + const void *key_name, int key_name_len, unsigned int *value) { @@ -933,7 +933,7 @@ error_exit: cs_error_t confdb_key_decrement ( confdb_handle_t handle, hdb_handle_t parent_object_handle, - void *key_name, + const void *key_name, int key_name_len, unsigned int *value) { @@ -995,11 +995,11 @@ error_exit: cs_error_t confdb_key_replace ( confdb_handle_t handle, hdb_handle_t parent_object_handle, - void *key_name, + const void *key_name, int key_name_len, - void *old_value, + const void *old_value, int old_value_len, - void *new_value, + const void *new_value, int new_value_len) { cs_error_t error; @@ -1167,7 +1167,7 @@ ret: cs_error_t confdb_object_find ( confdb_handle_t handle, hdb_handle_t parent_object_handle, - void *object_name, + const void *object_name, int object_name_len, hdb_handle_t *object_handle) { @@ -1196,8 +1196,7 @@ cs_error_t confdb_object_find ( if (confdb_sa_object_find(parent_object_handle, &context->find_handle, object_handle, - object_name, &object_name_len, - 0)) + object_name, object_name_len)) error = CS_ERR_ACCESS; goto error_exit; } @@ -1267,11 +1266,11 @@ cs_error_t confdb_object_iter ( error = CS_OK; *object_name_len = 0; - if (confdb_sa_object_find(parent_object_handle, + if (confdb_sa_object_iter(parent_object_handle, &context->find_handle, object_handle, - object_name, object_name_len, - 1)) + NULL, 0, + object_name, object_name_len)) error = CS_ERR_ACCESS; goto sa_exit; } diff --git a/lib/quorum.c b/lib/quorum.c index 6b519152..afe9e7aa 100644 --- a/lib/quorum.c +++ b/lib/quorum.c @@ -53,7 +53,7 @@ struct quorum_inst { void *ipc_ctx; int finalize; - void *context; + const void *context; quorum_callbacks_t callbacks; pthread_mutex_t response_mutex; pthread_mutex_t dispatch_mutex; @@ -222,7 +222,7 @@ cs_error_t quorum_fd_get ( cs_error_t quorum_context_get ( quorum_handle_t handle, - void **context) + const void **context) { cs_error_t error; struct quorum_inst *quorum_inst; @@ -241,7 +241,7 @@ cs_error_t quorum_context_get ( cs_error_t quorum_context_set ( quorum_handle_t handle, - void *context) + const void *context) { cs_error_t error; struct quorum_inst *quorum_inst; diff --git a/lib/sa-confdb.c b/lib/sa-confdb.c index 0dbacd1c..77438d5f 100644 --- a/lib/sa-confdb.c +++ b/lib/sa-confdb.c @@ -51,14 +51,18 @@ #include #include +#include "sa-confdb.h" + static struct objdb_iface_ver0 *objdb; static int num_config_modules; static struct config_iface_ver0 *config_modules[128]; +void main_get_config_modules(struct config_iface_ver0 ***modules, int *num); +char *strstr_rs (const char *haystack, const char *needle); -static int load_objdb() +static int load_objdb(void) { hdb_handle_t objdb_handle; void *objdb_p; @@ -72,7 +76,7 @@ static int load_objdb() "objdb", 0, &objdb_p, - 0); + (void *)0); if (res == -1) { return -1; } @@ -83,7 +87,7 @@ static int load_objdb() return CS_OK; } -static int load_config() +static int load_config(void) { char *config_iface; char *iface; @@ -97,7 +101,7 @@ static int load_config() /* User's bootstrap config service */ config_iface = getenv("COROSYNC_DEFAULT_CONFIG_IFACE"); if (!config_iface) { - config_iface = "corosync_parser"; + config_iface = strdup("corosync_parser"); } /* Make a copy so we can deface it with strtok */ @@ -185,7 +189,7 @@ int confdb_sa_init (void) int confdb_sa_object_create ( hdb_handle_t parent_object_handle, - void *object_name, + const void *object_name, int object_name_len, hdb_handle_t *object_handle) { @@ -209,9 +213,9 @@ int confdb_sa_object_parent_get ( int confdb_sa_key_create ( hdb_handle_t parent_object_handle, - void *key_name, + const void *key_name, int key_name_len, - void *value, + const void *value, int value_len) { return objdb->object_key_create(parent_object_handle, @@ -221,9 +225,9 @@ int confdb_sa_key_create ( int confdb_sa_key_delete ( hdb_handle_t parent_object_handle, - void *key_name, + const void *key_name, int key_name_len, - void *value, + const void *value, int value_len) { return objdb->object_key_delete(parent_object_handle, @@ -232,7 +236,7 @@ int confdb_sa_key_delete ( int confdb_sa_key_get ( hdb_handle_t parent_object_handle, - void *key_name, + const void *key_name, int key_name_len, void *value, int *value_len) @@ -251,7 +255,7 @@ int confdb_sa_key_get ( int confdb_sa_key_increment ( hdb_handle_t parent_object_handle, - void *key_name, + const void *key_name, int key_name_len, unsigned int *value) { @@ -265,7 +269,7 @@ int confdb_sa_key_increment ( int confdb_sa_key_decrement ( hdb_handle_t parent_object_handle, - void *key_name, + const void *key_name, int key_name_len, unsigned int *value) { @@ -280,11 +284,11 @@ int confdb_sa_key_decrement ( int confdb_sa_key_replace ( hdb_handle_t parent_object_handle, - void *key_name, + const void *key_name, int key_name_len, - void *old_value, + const void *old_value, int old_value_len, - void *new_value, + const void *new_value, int new_value_len) { return objdb->object_key_replace(parent_object_handle, @@ -323,24 +327,45 @@ int confdb_sa_object_find ( hdb_handle_t parent_object_handle, hdb_handle_t *find_handle, hdb_handle_t *object_handle, - void *object_name, - int *object_name_len, - int copy_name) + const void *object_name, + int object_name_len) { int res; if (!*find_handle) { objdb->object_find_create(parent_object_handle, - object_name, *object_name_len, + object_name, object_name_len, + find_handle); + } + + res = objdb->object_find_next(*find_handle, + object_handle); + return res; +} + +int confdb_sa_object_iter ( + hdb_handle_t parent_object_handle, + hdb_handle_t *find_handle, + hdb_handle_t *object_handle, + const void *object_name, + int object_name_len, + void *found_object_name, + int *found_object_name_len) +{ + int res; + + if (!*find_handle) { + objdb->object_find_create(parent_object_handle, + object_name, object_name_len, find_handle); } res = objdb->object_find_next(*find_handle, object_handle); /* Return object name if we were called as _iter */ - if (copy_name && !res) { + if (!res) { objdb->object_name_get(*object_handle, - object_name, object_name_len); + found_object_name, found_object_name_len); } return res; } diff --git a/lib/sa-confdb.h b/lib/sa-confdb.h index 67397b28..36a1bedc 100644 --- a/lib/sa-confdb.h +++ b/lib/sa-confdb.h @@ -33,17 +33,18 @@ */ extern int confdb_sa_init(void); -extern int confdb_sa_object_create(hdb_handle_t parent_object_handle, void *object_name, int object_name_len, hdb_handle_t *object_handle); +extern int confdb_sa_object_create(hdb_handle_t parent_object_handle, const void *object_name, int object_name_len, hdb_handle_t *object_handle); extern int confdb_sa_object_destroy(hdb_handle_t object_handle); extern int confdb_sa_object_parent_get(hdb_handle_t object_handle, hdb_handle_t *parent_object_handle); -extern int confdb_sa_key_create(hdb_handle_t parent_object_handle, void *key_name, int key_name_len, void *value, int value_len); -extern int confdb_sa_key_delete(hdb_handle_t parent_object_handle, void *key_name, int key_name_len, void *value, int value_len); -extern int confdb_sa_key_get(hdb_handle_t parent_object_handle, void *key_name, int key_name_len, void *value, int *value_len); -extern int confdb_sa_key_replace(hdb_handle_t parent_object_handle, void *key_name, int key_name_len, void *old_value, int old_value_len, void *new_value, int new_value_len); -extern int confdb_sa_object_find(hdb_handle_t parent_object_handle, hdb_handle_t *find_handle, hdb_handle_t *object_handle, void *object_name, int *object_name_len, int copy_name); +extern int confdb_sa_key_create(hdb_handle_t parent_object_handle, const void *key_name, int key_name_len, const void *value, int value_len); +extern int confdb_sa_key_delete(hdb_handle_t parent_object_handle, const void *key_name, int key_name_len, const void *value, int value_len); +extern int confdb_sa_key_get(hdb_handle_t parent_object_handle, const void *key_name, int key_name_len, void *value, int *value_len); +extern int confdb_sa_key_replace(hdb_handle_t parent_object_handle, const void *key_name, int key_name_len, const void *old_value, int old_value_len, const void *new_value, int new_value_len); +extern int confdb_sa_object_find(hdb_handle_t parent_object_handle, hdb_handle_t *find_handle, hdb_handle_t *object_handle, const void *object_name, int object_name_len); +extern int confdb_sa_object_iter(hdb_handle_t parent_object_handle, hdb_handle_t *find_handle, hdb_handle_t *object_handle, const void *object_name, int object_name_len, void *found_object_name, int *found_object_name_len); extern int confdb_sa_key_iter(hdb_handle_t parent_object_handle, hdb_handle_t start_pos, void *key_name, int *key_name_len, void *value, int *value_len); -extern int confdb_sa_key_increment(hdb_handle_t parent_object_handle, void *key_name, int key_name_len, unsigned int *value); -extern int confdb_sa_key_decrement(hdb_handle_t parent_object_handle, void *key_name, int key_name_len, unsigned int *value); +extern int confdb_sa_key_increment(hdb_handle_t parent_object_handle, const void *key_name, int key_name_len, unsigned int *value); +extern int confdb_sa_key_decrement(hdb_handle_t parent_object_handle, const void *key_name, int key_name_len, unsigned int *value); extern int confdb_sa_find_destroy(hdb_handle_t find_handle); extern int confdb_sa_write(char *error_text); extern int confdb_sa_reload(int flush, char *error_text); diff --git a/test/testconfdb.c b/test/testconfdb.c index dbbee413..074a725f 100644 --- a/test/testconfdb.c +++ b/test/testconfdb.c @@ -115,7 +115,7 @@ static void do_write_tests(confdb_handle_t handle) char error_string[1024]; /* Add a scratch object and put some keys into it */ - res = confdb_object_create(handle, OBJECT_PARENT_HANDLE, (void *)"testconfdb", strlen("testconfdb"), &object_handle); + res = confdb_object_create(handle, OBJECT_PARENT_HANDLE, "testconfdb", strlen("testconfdb"), &object_handle); if (res != CS_OK) { printf( "error creating 'testconfdb' object: %d\n", res); return;