From 5dda1e5dfea5f8ed70e19bb29d2ed6f220adf133 Mon Sep 17 00:00:00 2001 From: Michal Sojka Date: Wed, 7 Jan 2009 16:22:11 +0100 Subject: [PATCH] Updated to addition of const qualifier to GAVL keys in ULUT library --- src/forb.c | 22 +++++++++++----------- src/object.h | 2 +- src/regref.c | 6 +++--- src/regref.h | 14 +++++++++++--- src/request.c | 3 ++- 5 files changed, 28 insertions(+), 19 deletions(-) diff --git a/src/forb.c b/src/forb.c index 1b9cb96..5878b0f 100644 --- a/src/forb.c +++ b/src/forb.c @@ -233,7 +233,7 @@ void forb_destroy(forb_orb orb) /* Unregister all registered references */ while ((regref = forb_regref_first(forb))) { - forb_unregister_reference(orb, regref->name); + forb_unregister_reference(orb, regref->name.str); } ul_list_for_each_cut(forb_port, forb, port) { @@ -397,16 +397,16 @@ forb_register_reference(forb_object object, const char *name) FILE *f; int ret; - strncpy(regname, name, FORB_REGREF_NAME_LEN-1); - regname[FORB_REGREF_NAME_LEN-1]='\0'; + strncpy(regname.str, name, FORB_REGREF_NAME_LEN-1); + regname.str[FORB_REGREF_NAME_LEN-1]='\0'; regref = forb_regref_new(object, regname); if (!regref) goto err; forb_regref_insert(forb, regref); - snprintf(fn, sizeof(fn), FORB_TMP_DIR "/%s", regname); - snprintf(fntmp, sizeof(fntmp), FORB_TMP_DIR "/%s.%s", regname, + snprintf(fn, sizeof(fn), FORB_TMP_DIR "/%s", regname.str); + snprintf(fntmp, sizeof(fntmp), FORB_TMP_DIR "/%s.%s", regname.str, forb->server_id_str); f = fopen(fntmp, "w"); @@ -475,8 +475,8 @@ forb_unregister_reference(forb_orb orb, const char *name) forb_t *forb = forb_object_to_forb(orb); char fn[100]; - strncpy(regname, name, FORB_REGREF_NAME_LEN-1); - regname[FORB_REGREF_NAME_LEN-1]='\0'; + strncpy(regname.str, name, FORB_REGREF_NAME_LEN-1); + regname.str[FORB_REGREF_NAME_LEN-1]='\0'; regref = forb_regref_find(forb, ®name); if (!regref) goto err; @@ -484,7 +484,7 @@ forb_unregister_reference(forb_orb orb, const char *name) forb_regref_delete(forb, regref); forb_regref_release(regref); - snprintf(fn, sizeof(fn), FORB_TMP_DIR "/%s", regname); + snprintf(fn, sizeof(fn), FORB_TMP_DIR "/%s", regname.str); return unlink(fn); return 0; @@ -512,10 +512,10 @@ forb_resolve_reference(const forb_orb orb, const char *name) int fd, ret; forb_object object; - strncpy(regname, name, FORB_REGREF_NAME_LEN-1); - regname[FORB_REGREF_NAME_LEN-1]='\0'; + strncpy(regname.str, name, FORB_REGREF_NAME_LEN-1); + regname.str[FORB_REGREF_NAME_LEN-1]='\0'; - snprintf(fn, sizeof(fn), FORB_TMP_DIR "/%s", regname); + snprintf(fn, sizeof(fn), FORB_TMP_DIR "/%s", regname.str); fd = open(fn, 0); if (fd < 0) { diff --git a/src/object.h b/src/object.h index 56ce523..3d09aa9 100644 --- a/src/object.h +++ b/src/object.h @@ -168,7 +168,7 @@ forb_object_to_forb(forb_object obj) forb_object_key forb_object_to_key(forb_object obj); forb_object forb_key_to_object(forb_t *forb, forb_object_key key); -static inline int forb_objkey_cmp(forb_object_key *a, forb_object_key *b) +static inline int forb_objkey_cmp(const forb_object_key *a, const forb_object_key *b) { return (*a<*b) ? -1 : ((*a>*b) ? +1 : diff --git a/src/regref.c b/src/regref.c index afa9166..1d0565a 100644 --- a/src/regref.c +++ b/src/regref.c @@ -47,9 +47,9 @@ #include "regref.h" #include "object.h" -static inline int forb_regref_cmp(forb_regref_name_t *a, forb_regref_name_t *b) +static inline int forb_regref_cmp(const forb_regref_name_t *a, const forb_regref_name_t *b) { - return strncmp(*a, *b, FORB_REGREF_NAME_LEN); + return strncmp(a->str, b->str, FORB_REGREF_NAME_LEN); } GAVL_CUST_NODE_INT_IMP(forb_regref_nolock /* cust_prefix */, @@ -78,7 +78,7 @@ forb_regref_new(forb_object object, forb_regref_name_t name) regref = forb_malloc(sizeof(*regref)); if (regref) { - memcpy(regref->name, name, sizeof(regref->name)); + regref->name = name; regref->object = forb_object_duplicate(object); } return regref; diff --git a/src/regref.h b/src/regref.h index 3b4c737..1ec9c54 100644 --- a/src/regref.h +++ b/src/regref.h @@ -63,8 +63,16 @@ #define FORB_REGREF_NAME_LEN 32 -/** Type for registered names */ -typedef char forb_regref_name_t[FORB_REGREF_NAME_LEN]; +/** + * Type for registered names + * + * We must encapsulate the array in structure in order to behave as + * normal C object. This is necessary for usage as GAVL key. The + * reason is that typeof(&array) == typeof(array). + */ +typedef struct { + char str[FORB_REGREF_NAME_LEN]; +} forb_regref_name_t; struct forb_regref { forb_regref_name_t name; /**< Name of the registered reference */ @@ -107,7 +115,7 @@ forb_regref_delete(forb_t *forb, forb_regref_t *regref) } static inline forb_regref_t * -forb_regref_find(forb_t *forb, forb_regref_name_t *name) +forb_regref_find(forb_t *forb, forb_regref_name_t const *name) { forb_regref_t *regref; pthread_mutex_lock(&forb->regref_mutex); diff --git a/src/request.c b/src/request.c index bf83fa7..b0906e5 100644 --- a/src/request.c +++ b/src/request.c @@ -65,7 +65,8 @@ extern UL_LOG_CUST(ulogd_forb_request); -static inline int forb_request_cmp(CORBA_unsigned_long *a, CORBA_unsigned_long *b) +static inline int forb_request_cmp(const CORBA_unsigned_long *a, + const CORBA_unsigned_long *b) { return (*a<*b) ? -1 : ((*a>*b) ? +1 : -- 2.39.2