/** Allocate one or more fr_pair_ts from a #vp_list_mod_t
*
*/
-static fr_pair_list_t *map_list_mod_to_vps(TALLOC_CTX *ctx, vp_list_mod_t const *vlm)
+static void map_list_mod_to_vps(TALLOC_CTX *ctx, fr_pair_list_t *list, vp_list_mod_t const *vlm)
{
map_t *mod;
- fr_pair_list_t *head;
- head = fr_pair_list_alloc(ctx);
fr_assert(vlm->mod);
/*
if (!vlm->mod->next && !tmpl_value(vlm->mod->rhs)->next) {
fr_pair_t *vp;
vp = map_list_mod_to_vp(ctx, vlm->mod->lhs, tmpl_value(vlm->mod->rhs));
- fr_pair_add(head, vp);
- return head;
+ fr_pair_add(list, vp);
+ return;
}
/*
vb = vb->next) {
vp = map_list_mod_to_vp(ctx, mod->lhs, vb);
if (!vp) {
- fr_pair_list_free(head);
- return head;
+ fr_pair_list_free(list);
}
- fr_pair_add(head, vp);
+ fr_pair_add(list, vp);
}
}
-
- return head;
}
/** Print debug for a modification map
case T_OP_SET:
{
- fr_pair_list_t *tmp_list;
+ fr_pair_list_t tmp_list;
+ fr_pair_list_init(&tmp_list);
fr_pair_list_free(vp_list); /* Clear the existing list */
- tmp_list = map_list_mod_to_vps(parent, vlm); /* Replace with a new list */
- fr_tmp_pair_list_move(vp_list, tmp_list);
+ map_list_mod_to_vps(parent, &tmp_list, vlm); /* Replace with a new list */
+ fr_tmp_pair_list_move(vp_list, &tmp_list);
goto finish;
}
{
bool exists = false;
fr_dcursor_t from, to, to_insert;
- fr_pair_list_t *vp_from, vp_to_insert;
+ fr_pair_list_t vp_from, vp_to_insert;
fr_pair_t *vp, *vp_to = NULL;
+ fr_pair_list_init(&vp_from);
fr_pair_list_init(&vp_to_insert);
- vp_from = map_list_mod_to_vps(parent, vlm);
- if (fr_pair_list_empty(vp_from)) goto finish;
+ map_list_mod_to_vps(parent, &vp_from, vlm);
+ if (fr_pair_list_empty(&vp_from)) goto finish;
- fr_dcursor_init(&from, vp_from);
+ fr_dcursor_init(&from, &vp_from);
fr_dcursor_init(&to_insert, &vp_to_insert);
fr_dcursor_init(&to, vp_list);
case T_OP_ADD:
{
- fr_pair_list_t *vp_from;
+ fr_pair_list_t vp_from;
- vp_from = map_list_mod_to_vps(parent, vlm);
- fr_assert(!fr_pair_list_empty(vp_from));
+ fr_pair_list_init(&vp_from);
+ map_list_mod_to_vps(parent, &vp_from, vlm);
+ fr_assert(!fr_pair_list_empty(&vp_from));
- fr_tmp_pair_list_move(vp_list, vp_from);
+ fr_tmp_pair_list_move(vp_list, &vp_from);
}
goto finish;
case T_OP_ADD:
do_add:
{
- fr_pair_list_t *vp_from;
+ fr_pair_list_t vp_from;
- vp_from = map_list_mod_to_vps(parent, vlm);
- if (fr_pair_list_empty(vp_from)) goto finish;
+ fr_pair_list_init(&vp_from);
+ map_list_mod_to_vps(parent, &vp_from, vlm);
+ if (fr_pair_list_empty(&vp_from)) goto finish;
- fr_tmp_pair_list_move(vp_list, vp_from);
+ fr_tmp_pair_list_move(vp_list, &vp_from);
}
goto finish;
*/
if (tmpl_num(map->lhs) != NUM_ALL) {
fr_dcursor_t from;
- fr_pair_list_t *vp_from;
+ fr_pair_list_t vp_from;
- vp_from = map_list_mod_to_vps(parent, vlm);
- if (fr_pair_list_empty(vp_from)) goto finish;
+ fr_pair_list_init(&vp_from);
+ map_list_mod_to_vps(parent, &vp_from, vlm);
+ if (fr_pair_list_empty(&vp_from)) goto finish;
- fr_dcursor_init(&from, vp_from);
+ fr_dcursor_init(&from, &vp_from);
fr_dcursor_merge(&list, &from); /* Merge first (insert after current attribute) */
fr_dcursor_free_item(&list); /* Then free the current attribute */