From: Jennifer Richards Date: Wed, 25 Apr 2018 16:47:19 +0000 (-0400) Subject: Use TR_LIST for TR_GSS_NAMES X-Git-Tag: 3.4.0~1^2~40^2 X-Git-Url: http://www.project-moonshot.org/gitweb/?p=trust_router.git;a=commitdiff_plain;h=0ef90df451bc016bd83cf96515859eb11aea8938 Use TR_LIST for TR_GSS_NAMES --- diff --git a/Makefile.am b/Makefile.am index 60efb3b..42179a0 100644 --- a/Makefile.am +++ b/Makefile.am @@ -157,6 +157,7 @@ common/tr_name.c \ common/tr_gss_names.c \ common/tr_debug.c \ common/tr_util.c \ +common/tr_list.c \ trp/trp_route.c \ trp/trp_route_encoders.c \ trp/trp_rtable.c \ @@ -278,6 +279,7 @@ noinst_HEADERS = include/gsscon.h include/tr_config.h \ include/tr_cfgwatch.h include/tr_event.h \ include/tr_mq.h include/trp_peer.h include/trp_ptable.h \ include/trp_rtable.h include/tr_util.h \ + include/tr_list.h \ include/tr_name_internal.h include/tr_gss.h pkgdata_DATA=schema.sql diff --git a/common/tests/cfg_test.c b/common/tests/cfg_test.c index cfc1ed2..29a949d 100644 --- a/common/tests/cfg_test.c +++ b/common/tests/cfg_test.c @@ -41,6 +41,7 @@ #include #include #include +#include static void tr_talloc_log(const char *msg) { @@ -106,9 +107,9 @@ static int verify_rp_cfg(TR_CFG *cfg) assert(cfg->rp_clients->comm_next==NULL); assert(cfg->rp_clients->gss_names!=NULL); - assert(cfg->rp_clients->gss_names->names->len == 1); + assert(tr_gss_names_length(cfg->rp_clients->gss_names) == 1); name=tr_new_name("gss@example.com"); - assert(tr_name_cmp(name, g_ptr_array_index(cfg->rp_clients->gss_names->names, 0))==0); + assert(tr_name_cmp(name, tr_gss_names_index(cfg->rp_clients->gss_names, 0))==0); return 0; } diff --git a/common/tr_gss_names.c b/common/tr_gss_names.c index 249a8b9..416ba8c 100644 --- a/common/tr_gss_names.c +++ b/common/tr_gss_names.c @@ -38,19 +38,29 @@ #include #include +/** + * Helper for tr_gss_names_destructor - calls tr_free_name on its first argument + * + * @param item void pointer to a TR_NAME + * @param cookie ignored + */ +static void gss_names_destruct_helper(void *item, void *cookie) +{ + TR_NAME *name = (TR_NAME *) item; + tr_free_name(name); +} static int tr_gss_names_destructor(void *obj) { TR_GSS_NAMES *gss_names=talloc_get_type_abort(obj, TR_GSS_NAMES); if (gss_names->names) - g_ptr_array_unref(gss_names->names); + tr_list_foreach(gss_names->names, gss_names_destruct_helper, NULL); return 0; } TR_GSS_NAMES *tr_gss_names_new(TALLOC_CTX *mem_ctx) { - TR_GSS_NAMES *gn=talloc(mem_ctx, TR_GSS_NAMES); - + TR_GSS_NAMES *gn = talloc(mem_ctx, TR_GSS_NAMES); if (gn != NULL) { - gn->names = g_ptr_array_new_with_free_func((GDestroyNotify) tr_free_name); + gn->names = tr_list_new(gn); if (gn->names == NULL) { talloc_free(gn); return NULL; @@ -68,9 +78,7 @@ void tr_gss_names_free(TR_GSS_NAMES *gn) /* returns 0 on success */ int tr_gss_names_add(TR_GSS_NAMES *gn, TR_NAME *new) { - guint old_len = gn->names->len; - g_ptr_array_add(gn->names, new); - return (gn->names->len == old_len); /* nonzero if the add failed */ + return (NULL == tr_list_add(gn->names, new, 0)); /* nonzero if the add failed */ } /** @@ -104,50 +112,21 @@ TR_GSS_NAMES *tr_gss_names_dup(TALLOC_CTX *mem_ctx, TR_GSS_NAMES *orig) return new; } -static gboolean names_equal_helper(gconstpointer a, gconstpointer b) -{ - return (tr_name_cmp(a, b) == 0); -} - int tr_gss_names_matches(TR_GSS_NAMES *gn, TR_NAME *name) { - if (!gn) - return 0; + TR_GSS_NAMES_ITER iter={0}; + TR_NAME *this = NULL; - return(TRUE == g_ptr_array_find_with_equal_func(gn->names, - name, - names_equal_helper, - NULL)); -} + if ((!gn) || (!name)) + return 0; -/* iterators */ -TR_GSS_NAMES_ITER *tr_gss_names_iter_new(TALLOC_CTX *mem_ctx) -{ - TR_GSS_NAMES_ITER *iter=talloc(mem_ctx, TR_GSS_NAMES_ITER); - if (iter!=NULL) { - iter->gn=NULL; - iter->ii=0; + for (this = tr_gss_names_iter_first(&iter, gn); + this != NULL; + this = tr_gss_names_iter_next(&iter)) { + if (tr_name_cmp(name, this) == 0) + return 1; } - return iter; -} - -TR_NAME *tr_gss_names_iter_first(TR_GSS_NAMES_ITER *iter, TR_GSS_NAMES *gn) -{ - iter->gn=gn; - iter->ii=0; - return tr_gss_names_iter_next(iter); -} - -TR_NAME *tr_gss_names_iter_next(TR_GSS_NAMES_ITER *iter) -{ - if (iter->ii < iter->gn->names->len) - return g_ptr_array_index(iter->gn->names, iter->ii++); - return NULL; -} - -void tr_gss_names_iter_free(TR_GSS_NAMES_ITER *iter) -{ - talloc_free(iter); + return 0; } json_t *tr_gss_names_to_json_array(TR_GSS_NAMES *gss_names) diff --git a/common/tr_list.c b/common/tr_list.c index 2dbd07b..e3269f4 100644 --- a/common/tr_list.c +++ b/common/tr_list.c @@ -92,11 +92,6 @@ void *tr_list_add(TR_LIST *list, void *item, int steal) return item; } -size_t tr_list_length(TR_LIST *list) -{ - return (size_t) (*list)->len; -} - /** * Call func(item, cookie) on each item in the list. * diff --git a/include/tr_gss_names.h b/include/tr_gss_names.h index 607c5d5..c6192be 100644 --- a/include/tr_gss_names.h +++ b/include/tr_gss_names.h @@ -36,29 +36,29 @@ #define __TR_GSS_H__ #include -#include +#include #include typedef struct tr_gss_names { - GPtrArray *names; + TR_LIST *names; } TR_GSS_NAMES; -typedef struct tr_gss_names_iter { - TR_GSS_NAMES *gn; - guint ii; -} TR_GSS_NAMES_ITER; +typedef TR_LIST_ITER TR_GSS_NAMES_ITER; + +/* Iterator for TR_FILTER lines */ +#define tr_gss_names_iter_new(CTX) (tr_list_iter_new(CTX)) +#define tr_gss_names_iter_free(ITER) (tr_list_iter_free(ITER)) +#define tr_gss_names_iter_first(ITER, GSSN) ((TR_NAME *) tr_list_iter_first((ITER), (GSSN)->names)) +#define tr_gss_names_iter_next(ITER) ((TR_NAME *) tr_list_iter_next(ITER)) TR_GSS_NAMES *tr_gss_names_new(TALLOC_CTX *mem_ctx); void tr_gss_names_free(TR_GSS_NAMES *gn); int tr_gss_names_add(TR_GSS_NAMES *gn, TR_NAME *new); TR_GSS_NAMES *tr_gss_names_dup(TALLOC_CTX *mem_ctx, TR_GSS_NAMES *orig); int tr_gss_names_matches(TR_GSS_NAMES *gn, TR_NAME *name); - -TR_GSS_NAMES_ITER *tr_gss_names_iter_new(TALLOC_CTX *mem_ctx); -TR_NAME *tr_gss_names_iter_first(TR_GSS_NAMES_ITER *iter, TR_GSS_NAMES *gn); -TR_NAME *tr_gss_names_iter_next(TR_GSS_NAMES_ITER *iter); -void tr_gss_names_iter_free(TR_GSS_NAMES_ITER *iter); +#define tr_gss_names_length(GSSN) (tr_list_length((GSSN)->names)) +#define tr_gss_names_index(GSSN, INDEX) (tr_list_index((GSSN)->names, (INDEX))) json_t *tr_gss_names_to_json_array(TR_GSS_NAMES *gss_names); diff --git a/include/tr_list.h b/include/tr_list.h index 2634cc6..8bfca38 100644 --- a/include/tr_list.h +++ b/include/tr_list.h @@ -47,11 +47,12 @@ typedef struct tr_list_iter{ guint index; } TR_LIST_ITER; +#define tr_list_index(LIST, INDEX) (g_ptr_array_index(*(LIST),(INDEX))) +#define tr_list_length(LIST) ((size_t)((*(LIST))->len)) + TR_LIST *tr_list_new(TALLOC_CTX *mem_ctx); void tr_list_free(TR_LIST *list); void *tr_list_add(TR_LIST *list, void *item, int steal); -void *tr_list_index(TR_LIST *list, size_t index); -size_t tr_list_length(TR_LIST *list); TR_LIST_ITER *tr_list_iter_new(TALLOC_CTX *mem_ctx); void tr_list_iter_free(TR_LIST_ITER *iter);