* - 0 if we allocated a new attribute.
* - -1 on failure.
*/
-#define pair_update_request(_attr, _da) fr_pair_update_by_da(request->request_ctx, _attr, &request->request_pairs, _da, 0)
+#define pair_update_request(_attr, _da) fr_pair_update_by_da(request->request_ctx, _attr, _da, 0)
/** Return or allocate a fr_pair_t in the reply list
*
* - 0 if we allocated a new attribute.
* - -1 on failure.
*/
-#define pair_update_reply(_attr, _da) fr_pair_update_by_da(request->reply_ctx, _attr, &request->reply_pairs, _da, 0)
+#define pair_update_reply(_attr, _da) fr_pair_update_by_da(request->reply_ctx, _attr, _da, 0)
/** Return or allocate a fr_pair_t in the control list
*
* - 0 if we allocated a new attribute.
* - -1 on failure.
*/
-#define pair_update_control(_attr, _da) fr_pair_update_by_da(request->control_ctx, _attr, &request->control_pairs, _da, 0)
+#define pair_update_control(_attr, _da) fr_pair_update_by_da(request->control_ctx, _attr, _da, 0)
/** Return or allocate a fr_pair_t in the session_state list
*
* - 0 if we allocated a new attribute.
* - -1 on failure.
*/
-#define pair_update_session_state(_attr, _da) fr_pair_update_by_da(request->session_state_ctx, _attr, &request->session_state_pairs, _da, 0)
+#define pair_update_session_state(_attr, _da) fr_pair_update_by_da(request->session_state_ctx, _attr, _da, 0)
/** Delete one or move fr_pair_t in a list
*
/** Return the first fr_pair_t matching the #fr_dict_attr_t or alloc a new fr_pair_t (and append)
*
- * @param[in] ctx to allocate any new #fr_pair_t in.
+ * @param[in] parent to search for attributes in or append attributes to
* @param[out] out Pair we allocated or found. May be NULL if the caller doesn't
* care about manipulating the fr_pair_t.
- * @param[in,out] list to search for attributes in or append attributes to.
* @param[in] da of attribute to locate or alloc.
* @param[in] n update the n'th instance of this da.
* Note: If we can't find the n'th instance the attribute created
* - 0 if we allocated a new attribute.
* - -1 on failure.
*/
-int fr_pair_update_by_da(TALLOC_CTX *ctx, fr_pair_t **out, fr_pair_list_t *list,
+int fr_pair_update_by_da(fr_pair_t *parent, fr_pair_t **out,
fr_dict_attr_t const *da, unsigned int n)
{
fr_pair_t *vp;
- vp = fr_pair_find_by_da_idx(list, da, n);
+ vp = fr_pair_find_by_da_idx(&parent->vp_group, da, n);
if (vp) {
- PAIR_VERIFY_WITH_LIST(list, vp);
+ PAIR_VERIFY_WITH_LIST(&parent->vp_group, vp);
if (out) *out = vp;
return 1;
}
- vp = fr_pair_afrom_da(ctx, da);
+ vp = fr_pair_afrom_da(parent, da);
if (unlikely(!vp)) {
if (out) *out = NULL;
return -1;
}
- fr_pair_append(list, vp);
+ fr_pair_append(&parent->vp_group, vp);
if (out) *out = vp;
return 0;
int fr_pair_append_by_da_parent(TALLOC_CTX *ctx, fr_pair_t **out, fr_pair_list_t *list,
fr_dict_attr_t const *da) CC_HINT(nonnull(3,4));
-int fr_pair_update_by_da(TALLOC_CTX *ctx, fr_pair_t **out, fr_pair_list_t *list,
- fr_dict_attr_t const *da, unsigned int n) CC_HINT(nonnull(3,4));
+int fr_pair_update_by_da(fr_pair_t *parent, fr_pair_t **out,
+ fr_dict_attr_t const *da, unsigned int n) CC_HINT(nonnull(1,3));
int fr_pair_delete_by_da(fr_pair_list_t *head, fr_dict_attr_t const *da) CC_HINT(nonnull);
static void test_fr_pair_update_by_da(void)
{
- fr_pair_t *vp;
+ fr_pair_t *vp, *group;
+
+ TEST_CHECK((group = fr_pair_afrom_da(autofree, fr_dict_attr_test_group)) != NULL);
TEST_CASE("Update Add using fr_pair_prepend_by_da()");
- TEST_CHECK(fr_pair_update_by_da(autofree, &vp, &test_pairs, fr_dict_attr_test_uint32, 0) == 1); /* attribute already exist */
+ TEST_CHECK(fr_pair_update_by_da(group, &vp, fr_dict_attr_test_uint32, 0) == 0); /* attribute doesn't exist in this group */
vp->vp_uint32 = 54321;
TEST_CASE("Expected fr_dict_attr_test_uint32 (vp->vp_uint32 == 54321)");
- TEST_CHECK((vp = fr_pair_find_by_da(&test_pairs, NULL, fr_dict_attr_test_uint32)) != NULL);
+ TEST_CHECK((vp = fr_pair_find_by_da(&group->vp_group, NULL, fr_dict_attr_test_uint32)) != NULL);
TEST_CASE("Validating PAIR_VERIFY()");
PAIR_VERIFY(vp);
TEST_CASE("Expected (vp == 54321)");
TEST_CHECK(vp && vp->vp_uint32 == 54321);
+
+ talloc_free(group);
}
static void test_fr_pair_delete_by_da(void)