*/
fr_pair_list_tainted(out);
}
+
+/*
+ * print.c doesn't include pair.h, and doing so causes too many knock-on effects.
+ */
+void fr_fprintf_pair(FILE *fp, char const *msg, fr_pair_t const *vp)
+{
+ if (msg) fputs(msg, fp);
+
+ fr_fprintf(fp, "%s = %pV\n", vp->da->name, &vp->data);
+}
+
+static const char spaces[] = " ";
+
+static void fprintf_pair_list(FILE *fp, fr_pair_list_t const *list, int depth)
+{
+ fr_pair_t *vp;
+
+ for (vp = fr_pair_list_head(list);
+ vp != NULL;
+ vp = fr_pair_list_next(list, vp)) {
+ fprintf(fp, "%.*s", depth, spaces);
+
+ if (fr_type_is_leaf(vp->da->type)) {
+ fr_fprintf(fp, "%s = %pV\n", vp->da->name, &vp->data);
+ continue;
+ }
+
+ fprintf(fp, "%s = {\n", vp->da->name);
+ fprintf_pair_list(fp, &vp->vp_group, depth + 1);
+ fprintf(fp, "%.*s}\n", depth, spaces);
+ }
+}
+
+void fr_fprintf_pair_list(FILE *fp, fr_pair_list_t const *list)
+{
+ fprintf_pair_list(fp, list, 0);
+}
ssize_t fr_pair_ctx_afrom_str(fr_pair_ctx_t *pair_ctx, char const *in, size_t inlen) CC_HINT(nonnull);
void fr_pair_ctx_reset(fr_pair_ctx_t *pair_ctx, fr_dict_t const *dict) CC_HINT(nonnull);
+void fr_fprintf_pair(FILE *fp, char const *msg, fr_pair_t const *vp);
+void fr_fprintf_pair_list(FILE *fp, fr_pair_list_t const *list);
+
#undef _CONST
#ifdef __cplusplus
}