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 \
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
#include <tr_idp.h>
#include <tr_config.h>
#include <tr_debug.h>
+#include <tr_gss_names.h>
static void tr_talloc_log(const char *msg)
{
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;
}
#include <tr_gss_names.h>
#include <tr_debug.h>
+/**
+ * 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;
/* 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 */
}
/**
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)
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.
*
#define __TR_GSS_H__
#include <talloc.h>
-#include <glib.h>
+#include <tr_list.h>
#include <tr_name_internal.h>
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);
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);