]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
make fr_edit_list_insert_list_after() work for !el situation
authorAlan T. DeKok <aland@freeradius.org>
Wed, 15 Dec 2021 14:47:52 +0000 (09:47 -0500)
committerAlan T. DeKok <aland@freeradius.org>
Thu, 16 Dec 2021 19:25:24 +0000 (14:25 -0500)
src/lib/util/edit.c

index 3581735ccb62e3d972709ff4a786b48dd688944d..e088c86baffd95c0d3469ae635d00e23a2843728 100644 (file)
@@ -537,7 +537,7 @@ static int _edit_list_destructor(fr_edit_list_t *el)
 {
        fr_edit_t *e;
 
-       if (!el) return 0;
+       fr_assert(el != NULL);
 
        for (e = fr_dlist_head(&el->list);
             e != NULL;
@@ -633,10 +633,22 @@ int fr_edit_list_insert_list_after(fr_edit_list_t *el, fr_pair_list_t *list, fr_
 {
        fr_pair_t *prev, *vp;
 
-       if (!el) return 0;
-
        prev = pos;
 
+       if (!el) {
+               /*
+                *      @todo - this should really be an O(1) dlist
+                *      operation.
+                */
+               while ((vp = fr_pair_list_head(to_insert)) != NULL) {
+                       (void) fr_pair_remove(to_insert, vp);
+                       (void) fr_pair_insert_after(list, prev, vp);
+                       prev = vp;
+               }
+
+               return 0;
+       }
+
        /*
         *      We have to record each individual insert as a separate
         *      item.  Some later edit may insert pairs in the middle