From: Alan T. DeKok Date: Tue, 5 Apr 2022 12:24:08 +0000 (-0400) Subject: use "free to tail", and don't keep tmp_list X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2d6ecc8663b5ba1ad236a4f56aa1ecdb7697d290;p=thirdparty%2Ffreeradius-server.git use "free to tail", and don't keep tmp_list --- diff --git a/src/lib/util/pair.c b/src/lib/util/pair.c index 16bedff8f1..7e933e5ca6 100644 --- a/src/lib/util/pair.c +++ b/src/lib/util/pair.c @@ -1702,25 +1702,23 @@ mismatch: */ int fr_pair_list_copy(TALLOC_CTX *ctx, fr_pair_list_t *to, fr_pair_list_t const *from) { - fr_pair_list_t tmp_list; - fr_pair_t *vp, *new_vp; + fr_pair_t *vp, *new_vp, *first_added = NULL; int cnt = 0; - fr_pair_list_init(&tmp_list); - for (vp = fr_pair_list_head(from); vp; vp = fr_pair_list_next(from, vp), cnt++) { PAIR_VERIFY(vp); + new_vp = fr_pair_copy(ctx, vp); if (!new_vp) { - fr_pair_list_free(&tmp_list); + fr_pair_order_list_talloc_free_to_tail(&to->order, first_added); return -1; } - fr_pair_append(&tmp_list, new_vp); - } - fr_pair_list_append(to, &tmp_list); + if (!first_added) first_added = new_vp; + fr_pair_append(to, new_vp); + } return cnt; } @@ -1743,8 +1741,7 @@ int fr_pair_list_copy(TALLOC_CTX *ctx, fr_pair_list_t *to, fr_pair_list_t const int fr_pair_list_copy_by_da(TALLOC_CTX *ctx, fr_pair_list_t *to, fr_pair_list_t const *from, fr_dict_attr_t const *da, unsigned int count) { - fr_pair_list_t tmp_list; - fr_pair_t *vp, *new_vp; + fr_pair_t *vp, *new_vp, *first_added = NULL; unsigned int cnt = 0; if (count == 0) count = UINT_MAX; @@ -1754,23 +1751,23 @@ int fr_pair_list_copy_by_da(TALLOC_CTX *ctx, fr_pair_list_t *to, return -1; } - fr_pair_list_init(&tmp_list); - for (vp = fr_pair_list_head(from); vp && (cnt < count); vp = fr_pair_list_next(from, vp)) { + PAIR_VERIFY(vp); + if (!fr_pair_matches_da(vp, da)) continue; + cnt++; - PAIR_VERIFY(vp); new_vp = fr_pair_copy(ctx, vp); if (!new_vp) { - fr_pair_list_free(&tmp_list); + fr_pair_order_list_talloc_free_to_tail(&to->order, first_added); return -1; } - fr_pair_append(&tmp_list, new_vp); /* fr_pair_list_copy sets next pointer to NULL */ - } - fr_pair_list_append(to, &tmp_list); + if (!first_added) first_added = new_vp; + fr_pair_append(to, new_vp); + } return cnt; }