#include <freeradius-devel/util/value.h>
#include "edit.h"
+typedef enum {
+ FR_EDIT_INVALID = 0,
+ FR_EDIT_DELETE, //!< delete a VP
+ FR_EDIT_VALUE, //!< edit a VP in place
+ FR_EDIT_INSERT, //!< insert a VP into a list, after another one.
+} fr_edit_op_t;
+
/** Track a series of edits.
*
*/
* other modification to structural types, we MUST instead call
* insert / delete on the vp_group.
*/
-int fr_edit_list_record(fr_edit_list_t *el, fr_edit_op_t op, fr_pair_t *vp, fr_pair_list_t *list, fr_pair_t *ref)
+static int edit_record(fr_edit_list_t *el, fr_edit_op_t op, fr_pair_t *vp, fr_pair_list_t *list, fr_pair_t *ref)
{
fr_edit_t *e;
return 0;
}
+int fr_edit_list_insert(fr_edit_list_t *el, fr_pair_t *vp, fr_pair_list_t *list, fr_pair_t *prev)
+{
+ return edit_record(el, FR_EDIT_INSERT, vp, list, prev);
+}
+
+int fr_edit_list_delete(fr_edit_list_t *el, fr_pair_t *vp, fr_pair_list_t *list)
+{
+ return edit_record(el, FR_EDIT_DELETE, vp, list, NULL);
+}
+
+int fr_edit_list_record(fr_edit_list_t *el, fr_pair_t *vp)
+{
+ return edit_record(el, FR_EDIT_VALUE, vp, NULL, NULL);
+}
+
+
/** Finalize the edits when we destroy the edit list.
*
* Which in large part means freeing the VPs which have been deleted,
extern "C" {
#endif
-typedef enum {
- FR_EDIT_INVALID = 0,
- FR_EDIT_DELETE, //!< delete a VP
- FR_EDIT_VALUE, //!< edit a VP in place
- FR_EDIT_INSERT, //!< insert a VP into a list, after another one.
-} fr_edit_op_t;
-
typedef struct fr_edit_list_s fr_edit_list_t;
fr_edit_list_t *fr_edit_list_alloc(TALLOC_CTX *ctx);
void fr_edit_list_abort(fr_edit_list_t *el);
-int fr_edit_list_record(fr_edit_list_t *el, fr_edit_op_t op, fr_pair_t *vp, fr_pair_list_t *list, fr_pair_t *prev);
+int fr_edit_list_insert(fr_edit_list_t *el, fr_pair_t *vp, fr_pair_list_t *list, fr_pair_t *prev);
+
+int fr_edit_list_delete(fr_edit_list_t *el, fr_pair_t *vp, fr_pair_list_t *list);
+
+int fr_edit_list_record(fr_edit_list_t *el, fr_pair_t *vp);
#ifdef __cplusplus
}
el = fr_edit_list_alloc(NULL);
fr_assert(el != NULL);
- rcode = fr_edit_list_record(el, FR_EDIT_DELETE, vp, &local_pairs, NULL);
+ rcode = fr_edit_list_delete(el, vp, &local_pairs);
TEST_CHECK(rcode == 0);
talloc_free(el);
el = fr_edit_list_alloc(NULL);
fr_assert(el != NULL);
- rcode = fr_edit_list_record(el, FR_EDIT_DELETE, vp, &local_pairs, NULL);
+ rcode = fr_edit_list_delete(el, vp, &local_pairs);
TEST_CHECK(rcode == 0);
count = fr_pair_list_len(&local_pairs);
el = fr_edit_list_alloc(NULL);
fr_assert(el != NULL);
- rcode = fr_edit_list_record(el, FR_EDIT_DELETE, vp, &local_pairs, NULL);
+ rcode = fr_edit_list_delete(el, vp, &local_pairs);
TEST_CHECK(rcode == 0);
talloc_free(el);
el = fr_edit_list_alloc(NULL);
fr_assert(el != NULL);
- rcode = fr_edit_list_record(el, FR_EDIT_DELETE, middle, &local_pairs, NULL);
+ rcode = fr_edit_list_delete(el, middle, &local_pairs);
TEST_CHECK(rcode == 0);
count = fr_pair_list_len(&local_pairs);
el = fr_edit_list_alloc(NULL);
fr_assert(el != NULL);
- rcode = fr_edit_list_record(el, FR_EDIT_DELETE, vp, &local_pairs, NULL); /* middle */
+ rcode = fr_edit_list_delete(el, vp, &local_pairs); /* middle */
TEST_CHECK(rcode == 0);
vp = fr_pair_list_tail(&local_pairs);
fr_assert(vp != NULL);
- rcode = fr_edit_list_record(el, FR_EDIT_DELETE, vp, &local_pairs, NULL); /* tail */
+ rcode = fr_edit_list_delete(el, vp, &local_pairs); /* tail */
TEST_CHECK(rcode == 0);
talloc_free(el);
el = fr_edit_list_alloc(NULL);
fr_assert(el != NULL);
- rcode = fr_edit_list_record(el, FR_EDIT_DELETE, vp, &local_pairs, NULL); /* middle */
+ rcode = fr_edit_list_delete(el, vp, &local_pairs); /* middle */
TEST_CHECK(rcode == 0);
vp = fr_pair_list_tail(&local_pairs);
fr_assert(vp != NULL);
- rcode = fr_edit_list_record(el, FR_EDIT_DELETE, vp, &local_pairs, NULL); /* tail */
+ rcode = fr_edit_list_delete(el, vp, &local_pairs); /* tail */
TEST_CHECK(rcode == 0);
count = fr_pair_list_len(&local_pairs);
el = fr_edit_list_alloc(NULL);
fr_assert(el != NULL);
- rcode = fr_edit_list_record(el, FR_EDIT_VALUE, vp, NULL, NULL);
+ rcode = fr_edit_list_record(el, vp);
TEST_CHECK(rcode == 0);
TEST_CHECK(vp->vp_uint32 == 0);
el = fr_edit_list_alloc(NULL);
fr_assert(el != NULL);
- rcode = fr_edit_list_record(el, FR_EDIT_VALUE, vp, NULL, NULL);
+ rcode = fr_edit_list_record(el, vp);
TEST_CHECK(rcode == 0);
TEST_CHECK(vp->vp_uint32 == 0);