From: Jennifer Richards Date: Sat, 21 Apr 2018 04:17:35 +0000 (-0400) Subject: Reimplement TR_GSS_NAMES using GPtrArray X-Git-Tag: 3.4.0~1^2~40^2~10 X-Git-Url: http://www.project-moonshot.org/gitweb/?p=trust_router.git;a=commitdiff_plain;h=fd7bf55e4da2325fd08154f7ee9ab8d5786d1b61 Reimplement TR_GSS_NAMES using GPtrArray --- diff --git a/common/tests/cfg_test.c b/common/tests/cfg_test.c index 97cd03c..cfc1ed2 100644 --- a/common/tests/cfg_test.c +++ b/common/tests/cfg_test.c @@ -98,7 +98,6 @@ static int verify_idp_cfg(TR_CFG *cfg) static int verify_rp_cfg(TR_CFG *cfg) { - int ii=0; TR_NAME *name=NULL; assert(cfg!=NULL); @@ -107,11 +106,9 @@ static int verify_rp_cfg(TR_CFG *cfg) assert(cfg->rp_clients->comm_next==NULL); assert(cfg->rp_clients->gss_names!=NULL); - for (ii=1; iirp_clients->gss_names->names[ii]==NULL); - assert(cfg->rp_clients->gss_names->names[0]!=NULL); + assert(cfg->rp_clients->gss_names->names->len == 1); name=tr_new_name("gss@example.com"); - assert(tr_name_cmp(name, cfg->rp_clients->gss_names->names[0])==0); + assert(tr_name_cmp(name, g_ptr_array_index(cfg->rp_clients->gss_names->names, 0))==0); return 0; } diff --git a/common/tr_gss_names.c b/common/tr_gss_names.c index df15202..318f856 100644 --- a/common/tr_gss_names.c +++ b/common/tr_gss_names.c @@ -33,6 +33,7 @@ */ #include +#include #include #include @@ -40,22 +41,20 @@ static int tr_gss_names_destructor(void *obj) { TR_GSS_NAMES *gss_names=talloc_get_type_abort(obj, TR_GSS_NAMES); - int ii=0; - - for (ii=0; iinames[ii]!=NULL) - tr_free_name(gss_names->names[ii]); - } + if (gss_names->names) + g_ptr_array_unref(gss_names->names); return 0; } TR_GSS_NAMES *tr_gss_names_new(TALLOC_CTX *mem_ctx) { TR_GSS_NAMES *gn=talloc(mem_ctx, TR_GSS_NAMES); - int ii=0; - if (gn!=NULL) { - for (ii=0; iinames[ii]=NULL; + if (gn != NULL) { + gn->names = g_ptr_array_new_with_free_func((GDestroyNotify) tr_free_name); + if (gn->names == NULL) { + talloc_free(gn); + return NULL; + } talloc_set_destructor((void *)gn, tr_gss_names_destructor); } return gn; @@ -69,17 +68,9 @@ 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) { - int ii=0; - - for (ii=0; iinames[ii]==NULL) - break; - } - if (ii!=TR_MAX_GSS_NAMES) { - gn->names[ii]=new; - return 0; - } else - return -1; + guint old_len = gn->names->len; + g_ptr_array_add(gn->names, new); + return (gn->names->len == old_len); /* nonzero if the add failed */ } /** @@ -112,19 +103,21 @@ TR_GSS_NAMES *tr_gss_names_dup(TALLOC_CTX *mem_ctx, TR_GSS_NAMES *orig) talloc_steal(mem_ctx, new); return new; } -int tr_gss_names_matches(TR_GSS_NAMES *gn, TR_NAME *name) + +static gboolean names_equal_helper(gconstpointer a, gconstpointer b) { - int ii=0; + return (tr_name_cmp(a, b) == 0); +} +int tr_gss_names_matches(TR_GSS_NAMES *gn, TR_NAME *name) +{ if (!gn) return 0; - for (ii=0; iinames[ii]!=NULL) && - (0==tr_name_cmp(gn->names[ii], name))) - return 1; - } - return 0; + return(TRUE == g_ptr_array_find_with_equal_func(gn->names, + name, + names_equal_helper, + NULL)); } /* iterators */ @@ -141,19 +134,14 @@ 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) { iter->gn=gn; - iter->ii=-1; + iter->ii=0; return tr_gss_names_iter_next(iter); } TR_NAME *tr_gss_names_iter_next(TR_GSS_NAMES_ITER *iter) { - for (iter->ii++; - (iter->ii < TR_MAX_GSS_NAMES) && (iter->gn->names[iter->ii]==NULL); - iter->ii++) { } - - if (iter->iign->names[iter->ii]; - + if (iter->ii < iter->gn->names->len) + return g_ptr_array_index(iter->gn->names, iter->ii++); return NULL; } diff --git a/include/tr_gss_names.h b/include/tr_gss_names.h index f8f97a2..607c5d5 100644 --- a/include/tr_gss_names.h +++ b/include/tr_gss_names.h @@ -36,17 +36,17 @@ #define __TR_GSS_H__ #include -#include +#include -#define TR_MAX_GSS_NAMES 5 +#include typedef struct tr_gss_names { - TR_NAME *names[TR_MAX_GSS_NAMES]; + GPtrArray *names; } TR_GSS_NAMES; typedef struct tr_gss_names_iter { TR_GSS_NAMES *gn; - int ii; /* which entry did we last output? */ + guint ii; } TR_GSS_NAMES_ITER; TR_GSS_NAMES *tr_gss_names_new(TALLOC_CTX *mem_ctx);