*
* Copy all pairs from 'from' regardless of tag, attribute or vendor, starting at 'item'.
*
- * @param[in] ctx for new #fr_pair_t (s) to be allocated in.
- * @param[in] to where to copy attributes to.
- * @param[in] from whence to copy #fr_pair_t (s).
- * @param[in] item to start copying at
+ * @param[in] ctx for new #fr_pair_t (s) to be allocated in.
+ * @param[in] to where to copy attributes to.
+ * @param[in] from whence to copy #fr_pair_t (s).
+ * @param[in] start first pair to start copying from.
+ * @param[in] count How many instances to copy.
+ * Use 0 for all attributes.
* @return
* - >0 the number of attributes copied.
* - 0 if no attributes copied.
* - -1 on error.
*/
-int fr_pair_sublist_copy(TALLOC_CTX *ctx, fr_pair_list_t *to, fr_pair_list_t const *from, fr_pair_t *item)
+int fr_pair_sublist_copy(TALLOC_CTX *ctx, fr_pair_list_t *to,
+ fr_pair_list_t const *from, fr_pair_t const *start, unsigned int count)
{
- fr_pair_t *vp, *new_vp;
- int cnt = 0;
+ fr_pair_t const *vp;
+ fr_pair_t *new_vp;
+ unsigned int cnt = 0;
- for (vp = item;
- vp;
+ if (!start) start = fr_pair_list_head(from);
+
+ for (vp = start;
+ vp && ((count == 0) || (cnt < count));
vp = fr_pair_list_next(from, vp), cnt++) {
VP_VERIFY(vp);
new_vp = fr_pair_copy(ctx, vp);
}
}
+/** Appends a list of fr_pair_t from a temporary list to a destination list
+ *
+ * @param dst list to move pairs into
+ * @param src list from which to take pairs
+ */
+void fr_pair_list_append(fr_pair_list_t *dst, fr_pair_list_t *src)
+{
+ fr_dlist_move(&dst->order, &src->order);
+}
+
+/** Move a list of fr_pair_t from a temporary list to the head of a destination list
+ *
+ * @param dst list to move pairs into
+ * @param src from which to take pairs
+ */
+void fr_pair_list_prepend(fr_pair_list_t *dst, fr_pair_list_t *src)
+{
+ fr_dlist_move_head(&dst->order, &src->order);
+}
+
+/** Evaluation function for matching if vp matches a given da
+ *
+ * Can be used as a filter function for fr_dcursor_filter_next()
+ *
+ * @param item pointer to a fr_pair_t
+ * @param uctx da to match
+ *
+ * @return true if the pair matches the da
+ */
+bool fr_pair_matches_da(void const *item, void const *uctx)
+{
+ fr_pair_t const *vp = item;
+ fr_dict_attr_t const *da = uctx;
+ return da == vp->da;
+}
+
+/** Get the length of a list of fr_pair_t
+ *
+ * @param[in] list to return the length of
+ *
+ * @return number of entries in the list
+ */
+size_t fr_pair_list_len(fr_pair_list_t const *list)
+{
+ return fr_dlist_num_elements(&list->order);
+}
/** Parse a list of VPs from a value box.
*
*/
fr_pair_list_tainted(out);
}
-
-/** Appends a list of fr_pair_t from a temporary list to a destination list
- *
- * @param dst list to move pairs into
- * @param src list from which to take pairs
- */
-void fr_pair_list_append(fr_pair_list_t *dst, fr_pair_list_t *src)
-{
- fr_dlist_move(&dst->order, &src->order);
-}
-
-/** Move a list of fr_pair_t from a temporary list to the head of a destination list
- *
- * @param dst list to move pairs into
- * @param src from which to take pairs
- */
-void fr_pair_list_prepend(fr_pair_list_t *dst, fr_pair_list_t *src)
-{
- fr_dlist_move_head(&dst->order, &src->order);
-}
-
-/** Evaluation function for matching if vp matches a given da
- *
- * Can be used as a filter function for fr_dcursor_filter_next()
- *
- * @param item pointer to a fr_pair_t
- * @param uctx da to match
- *
- * @return true if the pair matches the da
- */
-bool fr_pair_matches_da(void const *item, void const *uctx)
-{
- fr_pair_t const *vp = item;
- fr_dict_attr_t const *da = uctx;
- return da == vp->da;
-}
-
-/** Get the length of a list of fr_pair_t
- *
- * @param[in] list to return the length of
- *
- * @return number of entries in the list
- */
-size_t fr_pair_list_len(fr_pair_list_t const *list)
-{
- return fr_dlist_num_elements(&list->order);
-}
#define ATTRIBUTE_EQ(_x, _y) ((_x && _y) && (_x->da == _y->da))
# ifdef WITH_VERIFY_PTR
-void fr_pair_verify(char const *file, int line, fr_pair_t const *vp);
-void fr_pair_list_verify(char const *file, int line, TALLOC_CTX const *expected, fr_pair_list_t const *list);
+void fr_pair_verify(char const *file, int line, fr_pair_t const *vp) CC_HINT(nonnull(3));
+void fr_pair_list_verify(char const *file, int line,
+ TALLOC_CTX const *expected, fr_pair_list_t const *list) CC_HINT(nonnull(4));
# endif
/* Initialisation */
-void fr_pair_list_init(fr_pair_list_t *head);
+void fr_pair_list_init(fr_pair_list_t *head) CC_HINT(nonnull);
/*
* Temporary macro to point the head of a pair_list to a specific vp
fr_pair_t *fr_pair_afrom_child_num(TALLOC_CTX *ctx, fr_dict_attr_t const *parent, unsigned int attr) CC_HINT(warn_unused_result);
-fr_pair_t *fr_pair_copy(TALLOC_CTX *ctx, fr_pair_t const *vp) CC_HINT(warn_unused_result);
+fr_pair_t *fr_pair_copy(TALLOC_CTX *ctx, fr_pair_t const *vp) CC_HINT(nonnull(2)) CC_HINT(warn_unused_result);
-int fr_pair_steal(TALLOC_CTX *ctx, fr_pair_t *vp);
+int fr_pair_steal(TALLOC_CTX *ctx, fr_pair_t *vp) CC_HINT(nonnull);
-int fr_pair_steal_append(TALLOC_CTX *nctx, fr_pair_list_t *list, fr_pair_t *vp);
+int fr_pair_steal_append(TALLOC_CTX *nctx, fr_pair_list_t *list, fr_pair_t *vp) CC_HINT(nonnull);
-int fr_pair_steal_prepend(TALLOC_CTX *nctx, fr_pair_list_t *list, fr_pair_t *vp);
+int fr_pair_steal_prepend(TALLOC_CTX *nctx, fr_pair_list_t *list, fr_pair_t *vp) CC_HINT(nonnull);
/** @hidecallergraph */
-void fr_pair_list_free(fr_pair_list_t *list);
+void fr_pair_list_free(fr_pair_list_t *list) CC_HINT(nonnull);
/** @hidecallergraph */
bool fr_pair_list_empty(fr_pair_list_t const *list) CC_HINT(nonnull);
size_t fr_pair_list_len(fr_pair_list_t const *list) CC_HINT(nonnull);
/* Searching and list modification */
-int fr_pair_to_unknown(fr_pair_t *vp);
-void *fr_pair_iter_next_by_da(fr_dlist_head_t *list, void *to_eval, void *uctx);
+int fr_pair_to_unknown(fr_pair_t *vp) CC_HINT(nonnull);
-void *fr_pair_iter_next_by_ancestor(fr_dlist_head_t *list, void *to_eval, void *uctx);
-bool fr_pair_matches_da(void const *item, void const *uctx);
+void *fr_pair_iter_next_by_da(fr_dlist_head_t *list,
+ void *to_eval, void *uctx) CC_HINT(nonnull);
+
+void *fr_pair_iter_next_by_ancestor(fr_dlist_head_t *list,
+ void *to_eval, void *uctx) CC_HINT(nonnull);
+
+bool fr_pair_matches_da(void const *item, void const *uctx) CC_HINT(nonnull);
/** Initialise a cursor that will return only attributes matching the specified #fr_dict_attr_t
*
* - The first matching pair.
* - NULL if no pairs match.
*/
-static inline fr_pair_t *fr_dcursor_iter_by_da_init(fr_dcursor_t *cursor,
- fr_pair_list_t *list, fr_dict_attr_t const *da)
+static inline CC_HINT(nonnull)
+fr_pair_t *fr_dcursor_iter_by_da_init(fr_dcursor_t *cursor,
+ fr_pair_list_t *list, fr_dict_attr_t const *da)
{
return fr_dcursor_talloc_iter_init(cursor, &list->order, fr_pair_iter_next_by_da, da, fr_pair_t);
}
* - The first matching pair.
* - NULL if no pairs match.
*/
-static inline fr_pair_t *fr_dcursor_iter_by_ancestor_init(fr_dcursor_t *cursor,
- fr_pair_list_t *list, fr_dict_attr_t const *da)
+static inline CC_HINT(nonnull)
+fr_pair_t *fr_dcursor_iter_by_ancestor_init(fr_dcursor_t *cursor,
+ fr_pair_list_t *list, fr_dict_attr_t const *da)
{
return fr_dcursor_talloc_iter_init(cursor, &list->order, fr_pair_iter_next_by_ancestor, da, fr_pair_t);
}
/** @hidecallergraph */
-unsigned int fr_pair_count_by_da(fr_pair_list_t const *list, fr_dict_attr_t const *da) CC_HINT(nonnull);
+unsigned int fr_pair_count_by_da(fr_pair_list_t const *list, fr_dict_attr_t const *da)
+ CC_HINT(nonnull);
-fr_pair_t *fr_pair_find_by_da(fr_pair_list_t const *list, fr_dict_attr_t const *da, unsigned int n);
+fr_pair_t *fr_pair_find_by_da(fr_pair_list_t const *list,
+ fr_dict_attr_t const *da, unsigned int n) CC_HINT(nonnull);
-fr_pair_t *fr_pair_find_by_ancestor(fr_pair_list_t const *list, fr_dict_attr_t const *ancestor);
+fr_pair_t *fr_pair_find_by_ancestor(fr_pair_list_t const *list,
+ fr_dict_attr_t const *ancestor) CC_HINT(nonnull);
-fr_pair_t *fr_pair_find_by_child_num(fr_pair_list_t *list, fr_dict_attr_t const *parent, unsigned int attr);
+fr_pair_t *fr_pair_find_by_child_num(fr_pair_list_t *list,
+ fr_dict_attr_t const *parent, unsigned int attr) CC_HINT(nonnull);
-int fr_pair_append(fr_pair_list_t *list, fr_pair_t *vp);
+int fr_pair_append(fr_pair_list_t *list, fr_pair_t *vp) CC_HINT(nonnull);
-int fr_pair_prepend(fr_pair_list_t *list, fr_pair_t *vp);
+int fr_pair_prepend(fr_pair_list_t *list, fr_pair_t *vp) CC_HINT(nonnull);
-void fr_pair_replace(fr_pair_list_t *list, fr_pair_t *add);
+void fr_pair_replace(fr_pair_list_t *list, fr_pair_t *add) CC_HINT(nonnull);
-int fr_pair_delete_by_child_num(fr_pair_list_t *list, fr_dict_attr_t const *parent, unsigned int attr);
+int fr_pair_delete_by_child_num(fr_pair_list_t *list,
+ fr_dict_attr_t const *parent, unsigned int attr) CC_HINT(nonnull);
-int fr_pair_append_by_da(TALLOC_CTX *ctx, fr_pair_t **out, fr_pair_list_t *list, fr_dict_attr_t const *da);
+int fr_pair_append_by_da(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_prepend_by_da(TALLOC_CTX *ctx, fr_pair_t **out, fr_pair_list_t *list, fr_dict_attr_t const *da);
+int fr_pair_prepend_by_da(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);
+ fr_dict_attr_t const *da, unsigned int n) CC_HINT(nonnull(3,4));
-int fr_pair_delete_by_da(fr_pair_list_t *head, fr_dict_attr_t const *da);
+int fr_pair_delete_by_da(fr_pair_list_t *head, fr_dict_attr_t const *da) CC_HINT(nonnull);
-fr_pair_t *fr_pair_remove(fr_pair_list_t *list, fr_pair_t *vp);
+fr_pair_t *fr_pair_remove(fr_pair_list_t *list, fr_pair_t *vp) CC_HINT(nonnull);
-fr_pair_t *fr_pair_delete(fr_pair_list_t *list, fr_pair_t *vp);
+fr_pair_t *fr_pair_delete(fr_pair_list_t *list, fr_pair_t *vp) CC_HINT(nonnull);
/* functions for FR_TYPE_STRUCTURAL */
-fr_pair_list_t *fr_pair_children(fr_pair_t *head);
+fr_pair_list_t *fr_pair_children(fr_pair_t *head) CC_HINT(nonnull);
/** Compare two attributes using and operator.
*
* - -1 on failure.
*/
#define fr_pair_cmp_op(_op, _a, _b) fr_value_box_cmp_op(_op, &_a->data, &_b->data)
+
int8_t fr_pair_cmp_by_da(void const *a, void const *b);
+
int8_t fr_pair_cmp_by_parent_num(void const *a, void const *b);
+
int fr_pair_cmp(fr_pair_t const *a, fr_pair_t const *b);
-int fr_pair_list_cmp(fr_pair_list_t const *a, fr_pair_list_t const *b);
+
+int fr_pair_list_cmp(fr_pair_list_t const *a, fr_pair_list_t const *b) CC_HINT(nonnull);
+
void fr_pair_list_sort(fr_pair_list_t *list, fr_cmp_t cmp) CC_HINT(nonnull);
/* Filtering */
-void fr_pair_validate_debug(TALLOC_CTX *ctx, fr_pair_t const *failed[2]);
-bool fr_pair_validate(fr_pair_t const *failed[2], fr_pair_list_t *filter, fr_pair_list_t *list) CC_HINT(nonnull(2,3));
-bool fr_pair_validate_relaxed(fr_pair_t const *failed[2], fr_pair_list_t *filter, fr_pair_list_t *list) CC_HINT(nonnull(2,3));
+void fr_pair_validate_debug(TALLOC_CTX *ctx, fr_pair_t const *failed[2]) CC_HINT(nonnull(2));
+
+bool fr_pair_validate(fr_pair_t const *failed[2], fr_pair_list_t *filter,
+ fr_pair_list_t *list) CC_HINT(nonnull(2,3));
+
+bool fr_pair_validate_relaxed(fr_pair_t const *failed[2], fr_pair_list_t *filter,
+ fr_pair_list_t *list) CC_HINT(nonnull(2,3));
/* Lists */
int fr_pair_list_copy(TALLOC_CTX *ctx, fr_pair_list_t *to, fr_pair_list_t const *from);
+
int fr_pair_list_copy_by_da(TALLOC_CTX *ctx, fr_pair_list_t *to,
fr_pair_list_t *from, fr_dict_attr_t const *da, unsigned int count);
+
int fr_pair_list_copy_by_ancestor(TALLOC_CTX *ctx, fr_pair_list_t *to,
- fr_pair_list_t *from, fr_dict_attr_t const *parent_da, unsigned int count);
-int fr_pair_sublist_copy(TALLOC_CTX *ctx, fr_pair_list_t *to, fr_pair_list_t const *from, fr_pair_t *item);
+ fr_pair_list_t *from, fr_dict_attr_t const *parent_da, unsigned int count)
+ CC_HINT(nonnull);
+
+int fr_pair_sublist_copy(TALLOC_CTX *ctx, fr_pair_list_t *to,
+ fr_pair_list_t const *from, fr_pair_t const *start, unsigned int count)
+ CC_HINT(nonnull);
+
void fr_pair_list_append(fr_pair_list_t *dst, fr_pair_list_t *src);
+
void fr_pair_list_prepend(fr_pair_list_t *dst, fr_pair_list_t *src);
/** @hidecallergraph */
-void *fr_pair_list_head(fr_pair_list_t const *list);
+void *fr_pair_list_head(fr_pair_list_t const *list) CC_HINT(nonnull);
/** @hidecallergraph */
-void *fr_pair_list_next(fr_pair_list_t const *list, fr_pair_t const *item);
+void *fr_pair_list_next(fr_pair_list_t const *list, fr_pair_t const *item) CC_HINT(nonnull);
-void *fr_pair_list_prev(fr_pair_list_t const *list, fr_pair_t const *item);
+void *fr_pair_list_prev(fr_pair_list_t const *list, fr_pair_t const *item) CC_HINT(nonnull);
-void *fr_pair_list_tail(fr_pair_list_t const *list);
+void *fr_pair_list_tail(fr_pair_list_t const *list) CC_HINT(nonnull);
/** @name Pair to pair copying
*
* @{
*/
-void fr_pair_value_clear(fr_pair_t *vp);
+void fr_pair_value_clear(fr_pair_t *vp) CC_HINT(nonnull);
-int fr_pair_value_copy(fr_pair_t *dst, fr_pair_t *src);
+int fr_pair_value_copy(fr_pair_t *dst, fr_pair_t *src) CC_HINT(nonnull);
/** @} */
/** @name Assign and manipulate binary-unsafe C strings
*
* @{
*/
-int fr_pair_value_from_str(fr_pair_t *vp, char const *value, ssize_t len, char quote, bool tainted);
+int fr_pair_value_from_str(fr_pair_t *vp,
+ char const *value, ssize_t len, char quote, bool tainted) CC_HINT(nonnull);
int fr_pair_value_strdup(fr_pair_t *vp, char const *src, bool tainted) CC_HINT(nonnull);
-int fr_pair_value_strdup_shallow(fr_pair_t *vp, char const *src, bool tainted);
+int fr_pair_value_strdup_shallow(fr_pair_t *vp, char const *src, bool tainted) CC_HINT(nonnull);
-int fr_pair_value_strtrim(fr_pair_t *vp);
+int fr_pair_value_strtrim(fr_pair_t *vp) CC_HINT(nonnull);
-int fr_pair_value_aprintf(fr_pair_t *vp, char const *fmt, ...) CC_HINT(format (printf, 2, 3));
+int fr_pair_value_aprintf(fr_pair_t *vp,
+ char const *fmt, ...) CC_HINT(nonnull) CC_HINT(format (printf, 2, 3));
/** @} */
/** @name Assign and manipulate binary-safe strings
*
* @{
*/
-int fr_pair_value_bstr_alloc(fr_pair_t *vp, char **out, size_t size, bool tainted);
+int fr_pair_value_bstr_alloc(fr_pair_t *vp, char **out, size_t size, bool tainted) CC_HINT(nonnull(1));
-int fr_pair_value_bstr_realloc(fr_pair_t *vp, char **out, size_t size);
+int fr_pair_value_bstr_realloc(fr_pair_t *vp, char **out, size_t size) CC_HINT(nonnull(1));
-int fr_pair_value_bstrndup(fr_pair_t *vp, char const *src, size_t len, bool tainted);
+int fr_pair_value_bstrndup(fr_pair_t *vp, char const *src, size_t len, bool tainted) CC_HINT(nonnull(1));
-int fr_pair_value_bstrdup_buffer(fr_pair_t *vp, char const *src, bool tainted);
+int fr_pair_value_bstrdup_buffer(fr_pair_t *vp, char const *src, bool tainted) CC_HINT(nonnull);
-int fr_pair_value_bstrndup_shallow(fr_pair_t *vp, char const *src, size_t len, bool tainted);
+int fr_pair_value_bstrndup_shallow(fr_pair_t *vp, char const *src, size_t len, bool tainted) CC_HINT(nonnull(1));
-int fr_pair_value_bstrdup_buffer_shallow(fr_pair_t *vp, char const *src, bool tainted);
+int fr_pair_value_bstrdup_buffer_shallow(fr_pair_t *vp, char const *src, bool tainted) CC_HINT(nonnull);
-int fr_pair_value_bstrn_append(fr_pair_t *vp, char const *src, size_t len, bool tainted);
+int fr_pair_value_bstrn_append(fr_pair_t *vp, char const *src, size_t len, bool tainted) CC_HINT(nonnull(1));
-int fr_pair_value_bstr_append_buffer(fr_pair_t *vp, char const *src, bool tainted);
+int fr_pair_value_bstr_append_buffer(fr_pair_t *vp, char const *src, bool tainted) CC_HINT(nonnull);
/** @} */
/** @name Assign and manipulate octets strings
*
* @{
*/
-int fr_pair_value_mem_alloc(fr_pair_t *vp, uint8_t **out, size_t size, bool tainted);
+int fr_pair_value_mem_alloc(fr_pair_t *vp, uint8_t **out, size_t size, bool tainted) CC_HINT(nonnull(1));
-int fr_pair_value_mem_realloc(fr_pair_t *vp, uint8_t **out, size_t size);
+int fr_pair_value_mem_realloc(fr_pair_t *vp, uint8_t **out, size_t size) CC_HINT(nonnull(1));
-int fr_pair_value_memdup(fr_pair_t *vp, uint8_t const *src, size_t len, bool tainted);
+int fr_pair_value_memdup(fr_pair_t *vp, uint8_t const *src, size_t len, bool tainted) CC_HINT(nonnull(1));
-int fr_pair_value_memdup_buffer(fr_pair_t *vp, uint8_t const *src, bool tainted);
+int fr_pair_value_memdup_buffer(fr_pair_t *vp, uint8_t const *src, bool tainted) CC_HINT(nonnull);
-int fr_pair_value_memdup_shallow(fr_pair_t *vp, uint8_t const *src, size_t len, bool tainted);
+int fr_pair_value_memdup_shallow(fr_pair_t *vp, uint8_t const *src, size_t len, bool tainted) CC_HINT(nonnull(1));
-int fr_pair_value_memdup_buffer_shallow(fr_pair_t *vp, uint8_t const *src, bool tainted);
+int fr_pair_value_memdup_buffer_shallow(fr_pair_t *vp, uint8_t const *src, bool tainted) CC_HINT(nonnull);
-int fr_pair_value_mem_append(fr_pair_t *vp, uint8_t *src, size_t len, bool tainted);
+int fr_pair_value_mem_append(fr_pair_t *vp, uint8_t *src, size_t len, bool tainted) CC_HINT(nonnull(1));
-int fr_pair_value_mem_append_buffer(fr_pair_t *vp, uint8_t *src, bool tainted);
+int fr_pair_value_mem_append_buffer(fr_pair_t *vp, uint8_t *src, bool tainted) CC_HINT(nonnull(1));
/** @} */
/** @name Enum functions
*
* @{
*/
-char const *fr_pair_value_enum(fr_pair_t const *vp, char buff[static 20]);
+char const *fr_pair_value_enum(fr_pair_t const *vp, char buff[static 20]) CC_HINT(nonnull);
-int fr_pair_value_enum_box(fr_value_box_t const **out, fr_pair_t *vp);
+int fr_pair_value_enum_box(fr_value_box_t const **out, fr_pair_t *vp) CC_HINT(nonnull);
/** @} */
/** @name Printing functions
* @{
*/
ssize_t fr_pair_print_value_quoted(fr_sbuff_t *out,
- fr_pair_t const *vp, fr_token_t quote);
+ fr_pair_t const *vp, fr_token_t quote) CC_HINT(nonnull);
-static inline size_t fr_pair_aprint_value_quoted(TALLOC_CTX *ctx, char **out,
+static inline size_t CC_HINT(nonnull(2,3))
+ fr_pair_aprint_value_quoted(TALLOC_CTX *ctx, char **out,
fr_pair_t const *vp, fr_token_t quote)
{
SBUFF_OUT_TALLOC_FUNC_NO_LEN_DEF(fr_pair_print_value_quoted, vp, quote)
}
-ssize_t fr_pair_print(fr_sbuff_t *out, fr_pair_t const *parent, fr_pair_t const *vp);
+ssize_t fr_pair_print(fr_sbuff_t *out, fr_pair_t const *parent,
+ fr_pair_t const *vp) CC_HINT(nonnull(1,3));
-static inline size_t fr_pair_aprint(TALLOC_CTX *ctx, char **out, fr_pair_t const *parent, fr_pair_t const *vp)
+static inline size_t CC_HINT(nonnull(2,4))
+ fr_pair_aprint(TALLOC_CTX *ctx, char **out, fr_pair_t const *parent, fr_pair_t const *vp)
{
SBUFF_OUT_TALLOC_FUNC_NO_LEN_DEF(fr_pair_print, parent, vp)
}
-void fr_pair_fprint(FILE *, fr_pair_t const *vp);
+void fr_pair_fprint(FILE *, fr_pair_t const *vp) CC_HINT(nonnull);
#define fr_pair_list_log(_log, _list) _fr_pair_list_log(_log, 4, NULL, _list, __FILE__, __LINE__);
-void _fr_pair_list_log(fr_log_t const *log, int lvl, fr_pair_t *parent, fr_pair_list_t const *list, char const *file, int line);
+void _fr_pair_list_log(fr_log_t const *log, int lvl, fr_pair_t *parent,
+ fr_pair_list_t const *list, char const *file, int line)
+ CC_HINT(nonnull(1,4));
-void fr_pair_list_debug(fr_pair_list_t const *list);
-void fr_pair_debug(fr_pair_t const *pair);
+void fr_pair_list_debug(fr_pair_list_t const *list) CC_HINT(nonnull);
+void fr_pair_debug(fr_pair_t const *pair) CC_HINT(nonnull);
/** @} */
-void fr_pair_list_tainted(fr_pair_list_t *vps);
-void fr_pair_list_afrom_box(TALLOC_CTX *ctx, fr_pair_list_t *out, fr_dict_t const *dict, fr_value_box_t *box);
+void fr_pair_list_tainted(fr_pair_list_t *vps) CC_HINT(nonnull);
+
+void fr_pair_list_afrom_box(TALLOC_CTX *ctx, fr_pair_list_t *out,
+ fr_dict_t const *dict, fr_value_box_t *box) CC_HINT(nonnull(1,2,3));
/* Tokenization */
typedef struct {