]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Call map_list_mod_to_vps() with a fr_pair_list_t to populate
authorNick Porter <nick@portercomputing.co.uk>
Fri, 22 Jan 2021 11:04:04 +0000 (11:04 +0000)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Fri, 22 Jan 2021 14:52:03 +0000 (14:52 +0000)
rather than allocating a new list in the function.

src/lib/server/map_async.c

index 634c78e17518a34d140e907c00d556b51f60194e..5f6584c1a70660f2f9e7a7744328f834cf4d6ab2 100644 (file)
@@ -801,12 +801,10 @@ static inline fr_pair_t *map_list_mod_to_vp(TALLOC_CTX *ctx, tmpl_t const *attr,
 /** 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);
 
        /*
@@ -815,8 +813,8 @@ static fr_pair_list_t *map_list_mod_to_vps(TALLOC_CTX *ctx, vp_list_mod_t const
        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;
        }
 
        /*
@@ -833,14 +831,11 @@ static fr_pair_list_t *map_list_mod_to_vps(TALLOC_CTX *ctx, vp_list_mod_t const
                     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
@@ -998,10 +993,11 @@ int map_list_mod_apply(request_t *request, vp_list_mod_t const *vlm)
 
                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;
                }
 
@@ -1013,14 +1009,15 @@ int map_list_mod_apply(request_t *request, vp_list_mod_t const *vlm)
                {
                        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);
 
@@ -1048,12 +1045,13 @@ int map_list_mod_apply(request_t *request, vp_list_mod_t const *vlm)
 
                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;
 
@@ -1158,12 +1156,13 @@ int map_list_mod_apply(request_t *request, vp_list_mod_t const *vlm)
        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;
 
@@ -1188,12 +1187,13 @@ int map_list_mod_apply(request_t *request, vp_list_mod_t const *vlm)
                 */
                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 */