#include <freeradius-devel/util/proto.h>
#include <freeradius-devel/util/regex.h>
+FR_DLIST_NEW_TYPE(pair_dlist, fr_pair_list_t, order, fr_pair_t, order_entry)
/** Initialise a pair list header
*
* in the list and allows us to iterate over
* all of them.
*/
- fr_dlist_talloc_init(&list->order, fr_pair_t, order_entry);
+ fr_pair_dlist_talloc_init(list);
}
/** Free a fr_pair_t
*/
static inline CC_HINT(always_inline) void pair_init_null(fr_pair_t *vp)
{
- fr_dlist_entry_init(&vp->order_entry);
+ fr_pair_dlist_entry_init(vp);
/*
* Legacy cruft
*/
int fr_pair_steal_append(TALLOC_CTX *list_ctx, fr_pair_list_t *list, fr_pair_t *vp)
{
- if (fr_dlist_entry_in_list(&vp->order_entry)) {
+ if (fr_pair_dlist_in_list(list, vp)) {
fr_strerror_printf("Pair %pV is a list member, cannot be moved", vp);
return -1;
}
*/
int fr_pair_steal_prepend(TALLOC_CTX *list_ctx, fr_pair_list_t *list, fr_pair_t *vp)
{
- if (fr_dlist_entry_in_list(&vp->order_entry)) {
+ if (fr_pair_dlist_in_list(list, vp)) {
fr_strerror_printf("Pair %pV is a list member, cannot be moved", vp);
return -1;
}
*/
void fr_pair_list_free(fr_pair_list_t *list)
{
- fr_dlist_talloc_free(&list->order);
+ fr_pair_dlist_talloc_free(list);
}
/** Is a valuepair list empty
*/
bool fr_pair_list_empty(fr_pair_list_t const *list)
{
- return fr_dlist_empty(&list->order);
+ return fr_pair_dlist_empty(list);
}
/** Mark malformed or unrecognised attributed as unknown
/** Iterate over pairs with a specified da
*
- * @param[in] list to itterate over.
+ * @param[in] list to iterate over.
* @param[in] to_eval The fr_pair_t after cursor->current. Will be checked to
* see if it matches the specified fr_dict_attr_t.
* @param[in] uctx The fr_dict_attr_t to search for.
fr_pair_t *vp = NULL;
unsigned int count = 0;
- if (fr_dlist_empty(&list->order)) return 0;
+ if (fr_pair_dlist_empty(list)) return 0;
- while ((vp = fr_pair_list_next(list, vp))) if (da == vp->da) count++;
+ while ((vp = fr_pair_dlist_next(list, vp))) if (da == vp->da) count++;
return count;
}
{
fr_pair_t *vp = UNCONST(fr_pair_t *, prev);
- if (fr_dlist_empty(&list->order)) return NULL;
+ if (fr_pair_dlist_empty(list)) return NULL;
PAIR_LIST_VERIFY(list);
- while ((vp = fr_pair_list_next(list, vp))) if (da == vp->da) return vp;
+ while ((vp = fr_pair_dlist_next(list, vp))) if (da == vp->da) return vp;
return NULL;
}
{
fr_pair_t *vp = NULL;
- if (fr_dlist_empty(&list->order)) return NULL;
+ if (fr_pair_dlist_empty(list)) return NULL;
PAIR_LIST_VERIFY(list);
fr_dict_attr_t const *da;
/* List head may be NULL if it contains no VPs */
- if (fr_dlist_empty(&list->order)) return NULL;
+ if (fr_pair_dlist_empty(list)) return NULL;
PAIR_LIST_VERIFY(list);
fr_dict_attr_t const *da;
/* List head may be NULL if it contains no VPs */
- if (fr_dlist_empty(&list->order)) return NULL;
+ if (fr_pair_dlist_empty(list)) return NULL;
PAIR_LIST_VERIFY(list);
*/
fr_pair_t *fr_pair_list_head(fr_pair_list_t const *list)
{
- return fr_dlist_head(&list->order);
+ return fr_pair_dlist_head(list);
}
/** Get the next item in a valuepair list after a specific entry
*/
fr_pair_t *fr_pair_list_next(fr_pair_list_t const *list, fr_pair_t const *item)
{
- return fr_dlist_next(&list->order, item);
+ return fr_pair_dlist_next(list, item);
}
/** Get the previous item in a valuepair list before a specific entry
*/
fr_pair_t *fr_pair_list_prev(fr_pair_list_t const *list, fr_pair_t const *item)
{
- return fr_dlist_prev(&list->order, item);
+ return fr_pair_dlist_prev(list, item);
}
/** Get the tail of a valuepair list
*/
fr_pair_t *fr_pair_list_tail(fr_pair_list_t const *list)
{
- return fr_dlist_tail(&list->order);
+ return fr_pair_dlist_tail(list);
}
/** Add a VP to the start of the list.
{
PAIR_VERIFY(to_add);
- if (fr_dlist_entry_in_list(&to_add->order_entry)) {
+ if (fr_pair_dlist_in_list(list, to_add)) {
fr_strerror_printf("Pair %pV already inserted into list", to_add);
return -1;
}
- fr_dlist_insert_head(&list->order, to_add);
+ fr_pair_dlist_insert_head(list, to_add);
return 0;
}
{
PAIR_VERIFY(to_add);
- if (fr_dlist_entry_in_list(&to_add->order_entry)) {
+ if (fr_pair_dlist_in_list(list, to_add)) {
fr_strerror_printf("Pair %pV already inserted into list", to_add);
return -1;
}
- fr_dlist_insert_tail(&list->order, to_add);
+ fr_pair_dlist_insert_tail(list, to_add);
return 0;
}
{
PAIR_VERIFY(to_add);
- if (fr_dlist_entry_in_list(&to_add->order_entry)) {
+ if (fr_pair_dlist_in_list(list, to_add)) {
fr_strerror_printf("Pair %pV already inserted into list", to_add);
return -1;
}
- if (pos && !fr_dlist_entry_in_list(&pos->order_entry)) {
+ if (pos && !fr_pair_dlist_in_list(list, pos)) {
fr_strerror_printf("Pair %pV not in list", pos);
return -1;
}
- fr_dlist_insert_after(fr_pair_list_order(list), pos, to_add);
+ fr_pair_dlist_insert_after(list, pos, to_add);
return 0;
}
{
PAIR_VERIFY(to_add);
- if (fr_dlist_entry_in_list(&to_add->order_entry)) {
+ if (fr_pair_dlist_in_list(list, to_add)) {
fr_strerror_printf("Pair %pV already inserted into list", to_add);
return -1;
}
- if (pos && !fr_dlist_entry_in_list(&pos->order_entry)) {
+ if (pos && !fr_pair_dlist_in_list(list, pos)) {
fr_strerror_printf("Pair %pV not in list", pos);
return -1;
}
- fr_dlist_insert_before(fr_pair_list_order(list), pos, to_add);
+ fr_pair_dlist_insert_before(list, pos, to_add);
return 0;
}
{
fr_pair_t *prev;
- prev = fr_pair_list_prev(list, vp);
- fr_dlist_remove(&list->order, vp);
+ prev = fr_pair_dlist_prev(list, vp);
+ fr_pair_dlist_remove(list, vp);
return prev;
}
{
fr_pair_t *prev;
- prev = fr_pair_list_prev(list, vp);
- fr_dlist_remove(&list->order, vp);
+ prev = fr_pair_dlist_prev(list, vp);
+ fr_pair_dlist_remove(list, vp);
talloc_free(vp);
return prev;
*/
void fr_pair_list_sort(fr_pair_list_t *list, fr_cmp_t cmp)
{
- fr_dlist_sort(&list->order, cmp);
+ fr_pair_dlist_sort(list, cmp);
}
/** Write an error to the library errorbuff detailing the mismatch
{
fr_pair_t *check, *match;
- if (fr_dlist_empty(&filter->order) && fr_dlist_empty(&list->order)) {
+ if (fr_pair_dlist_empty(filter) && fr_pair_dlist_empty(list)) {
return true;
}
{
fr_pair_t *check, *last_check = NULL, *match = NULL;
- if (fr_dlist_empty(&filter->order) && fr_dlist_empty(&list->order)) {
+ if (fr_pair_dlist_empty(filter) && fr_pair_dlist_empty(list)) {
return true;
}
break;
case FR_TYPE_STRUCTURAL:
- if (!fr_dlist_empty(&vp->vp_group.order)) return;
+ if (!fr_pair_dlist_empty(&vp->vp_group)) return;
- while ((child = fr_dlist_pop_tail(&vp->vp_group.order))) {
+ while ((child = fr_pair_dlist_pop_tail(&vp->vp_group))) {
fr_pair_value_clear(child);
talloc_free(child);
}
*/
void fr_pair_list_append(fr_pair_list_t *dst, fr_pair_list_t *src)
{
- fr_dlist_move(&dst->order, &src->order);
+ fr_pair_dlist_move(dst, src);
}
/** Move a list of fr_pair_t from a temporary list to the head of a destination list
*/
void fr_pair_list_prepend(fr_pair_list_t *dst, fr_pair_list_t *src)
{
- fr_dlist_move_head(&dst->order, &src->order);
+ fr_pair_dlist_move_head(dst, src);
}
/** Evaluation function for matching if vp matches a given da
*/
size_t fr_pair_list_len(fr_pair_list_t const *list)
{
- return fr_dlist_num_elements(&list->order);
+ return fr_pair_dlist_num_elements(list);
}
/** Parse a list of VPs from a value box.