* it if so.
*/
- slen = fr_pair_list_print(&FR_SBUFF_OUT(data, COMMAND_OUTPUT_MAX), &head);
+ slen = fr_pair_list_print(&FR_SBUFF_OUT(data, COMMAND_OUTPUT_MAX), NULL, &head);
if (slen <= 0) {
fr_assert(0);
RETURN_OK_WITH_ERROR();
* Output may be an error, and we ignore
* it if so.
*/
- slen = fr_pair_list_print(&FR_SBUFF_OUT(data, COMMAND_OUTPUT_MAX), &head);
+ slen = fr_pair_list_print(&FR_SBUFF_OUT(data, COMMAND_OUTPUT_MAX), NULL, &head);
if (slen <= 0) {
fr_assert(0);
RETURN_OK_WITH_ERROR();
/*
* Print the pairs.
*/
- slen = fr_pair_list_print(&FR_SBUFF_OUT(data, COMMAND_OUTPUT_MAX), &head);
+ slen = fr_pair_list_print(&FR_SBUFF_OUT(data, COMMAND_OUTPUT_MAX), NULL, &head);
if (slen <= 0) {
fr_assert(0);
RETURN_OK_WITH_ERROR();
/*
* Print the pairs.
*/
- slen = fr_pair_list_print(&FR_SBUFF_OUT(data, COMMAND_OUTPUT_MAX), &head);
+ slen = fr_pair_list_print(&FR_SBUFF_OUT(data, COMMAND_OUTPUT_MAX), NULL, &head);
if (slen <= 0) {
fr_assert(0);
RETURN_OK_WITH_ERROR();
PAIR_LIST_VERIFY(&head);
- slen = fr_pair_list_print(&FR_SBUFF_OUT(data, COMMAND_OUTPUT_MAX), &head);
+ slen = fr_pair_list_print(&FR_SBUFF_OUT(data, COMMAND_OUTPUT_MAX), NULL, &head);
if (slen <= 0) {
fr_assert(0);
RETURN_OK_WITH_ERROR();
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,
+ssize_t fr_pair_print(fr_sbuff_t *out, fr_dict_attr_t const *parent,
fr_pair_t const *vp) CC_HINT(nonnull(1,3));
-ssize_t fr_pair_print_secure(fr_sbuff_t *out, fr_pair_t const *parent,
+ssize_t fr_pair_print_secure(fr_sbuff_t *out, fr_dict_attr_t const *parent,
fr_pair_t const *vp) CC_HINT(nonnull(1,3));
-ssize_t fr_pair_list_print(fr_sbuff_t *out, fr_pair_list_t const *list);
+ssize_t fr_pair_list_print(fr_sbuff_t *out, fr_dict_attr_t const *parent, fr_pair_list_t const *list);
static inline fr_slen_t CC_HINT(nonnull(2,4))
- fr_pair_aprint(TALLOC_CTX *ctx, char **out, fr_pair_t const *parent, fr_pair_t const *vp)
+ fr_pair_aprint(TALLOC_CTX *ctx, char **out, fr_dict_attr_t const *parent, fr_pair_t const *vp)
SBUFF_OUT_TALLOC_FUNC_NO_LEN_DEF(fr_pair_print, parent, vp)
static inline fr_slen_t CC_HINT(nonnull(2,4))
- fr_pair_aprint_secure(TALLOC_CTX *ctx, char **out, fr_pair_t const *parent, fr_pair_t const *vp)
+ fr_pair_aprint_secure(TALLOC_CTX *ctx, char **out, fr_dict_attr_t const *parent, fr_pair_t const *vp)
SBUFF_OUT_TALLOC_FUNC_NO_LEN_DEF(fr_pair_print_secure, parent, vp)
void fr_pair_fprint(FILE *, fr_pair_t const *vp) CC_HINT(nonnull);
ssize_t fr_pair_print_value_quoted(fr_sbuff_t *out, fr_pair_t const *vp, fr_token_t quote)
{
fr_sbuff_t our_out;
- fr_pair_t *child;
- fr_dcursor_t cursor;
PAIR_VERIFY(vp);
*/
our_out = FR_SBUFF(out);
FR_SBUFF_IN_CHAR_RETURN(&our_out, '{', ' ');
- for (child = fr_pair_dcursor_init(&cursor, &vp->vp_group);
- child != NULL;
- child = fr_dcursor_next(&cursor)) {
- FR_SBUFF_RETURN(fr_pair_print, &our_out, vp, child);
- if (fr_dcursor_next_peek(&cursor)) FR_SBUFF_IN_CHAR_RETURN(&our_out, ',', ' ');
- }
+
+ FR_SBUFF_RETURN(fr_pair_list_print, &our_out, vp->da, &vp->vp_group);
+
FR_SBUFF_IN_CHAR_RETURN(&our_out, ' ', '}');
FR_SBUFF_SET_RETURN(out, &our_out);
* - Length of data written to out.
* - value >= outlen on truncation.
*/
-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_dict_attr_t const *parent, fr_pair_t const *vp)
{
char const *token = NULL;
fr_sbuff_t our_out = FR_SBUFF(out);
- fr_dict_attr_t const *parent_da = NULL;
PAIR_VERIFY(vp);
token = "<INVALID-TOKEN>";
}
- if (parent && (parent->vp_type != FR_TYPE_GROUP)) parent_da = parent->da;
+ /*
+ * Groups are printed from the root.
+ */
+ if (parent && (parent->type == FR_TYPE_GROUP)) parent = NULL;
if (vp->da->flags.is_raw) FR_SBUFF_IN_STRCPY_LITERAL_RETURN(&our_out, "raw.");
- FR_DICT_ATTR_OID_PRINT_RETURN(&our_out, parent_da, vp->da, false);
+ FR_DICT_ATTR_OID_PRINT_RETURN(&our_out, parent, vp->da, false);
FR_SBUFF_IN_CHAR_RETURN(&our_out, ' ');
FR_SBUFF_IN_STRCPY_RETURN(&our_out, token);
FR_SBUFF_IN_CHAR_RETURN(&our_out, ' ');
* - Length of data written to out.
* - value >= outlen on truncation.
*/
-ssize_t fr_pair_print_secure(fr_sbuff_t *out, fr_pair_t const *parent, fr_pair_t const *vp)
+ssize_t fr_pair_print_secure(fr_sbuff_t *out, fr_dict_attr_t const *parent, fr_pair_t const *vp)
{
char const *token = NULL;
fr_sbuff_t our_out = FR_SBUFF(out);
- fr_dict_attr_t const *parent_da = NULL;
PAIR_VERIFY(vp);
token = "<INVALID-TOKEN>";
}
- if (parent && (parent->vp_type != FR_TYPE_GROUP)) parent_da = parent->da;
+ /*
+ * Groups are printed from the root.
+ */
+ if (parent && (parent->type == FR_TYPE_GROUP)) parent = NULL;
if (vp->da->flags.is_raw) FR_SBUFF_IN_STRCPY_LITERAL_RETURN(&our_out, "raw.");
- FR_DICT_ATTR_OID_PRINT_RETURN(&our_out, parent_da, vp->da, false);
+ FR_DICT_ATTR_OID_PRINT_RETURN(&our_out, parent, vp->da, false);
FR_SBUFF_IN_CHAR_RETURN(&our_out, ' ');
FR_SBUFF_IN_STRCPY_RETURN(&our_out, token);
FR_SBUFF_IN_CHAR_RETURN(&our_out, ' ');
for (child = fr_pair_dcursor_init(&cursor, &vp->vp_group);
child != NULL;
child = fr_dcursor_next(&cursor)) {
- FR_SBUFF_RETURN(fr_pair_print_secure, &our_out, vp, child);
+ FR_SBUFF_RETURN(fr_pair_print_secure, &our_out, vp->da, child);
if (fr_dcursor_next_peek(&cursor)) FR_SBUFF_IN_CHAR_RETURN(&our_out, ',', ' ');
}
FR_SBUFF_IN_CHAR_RETURN(&our_out, ' ', '}');
/** Print a pair list
*
* @param[in] out Where to write the string.
+ * @param[in] parent parent da to start from.
* @param[in] list pair list
* @return
* - Length of data written to out.
* - value >= outlen on truncation.
*/
-ssize_t fr_pair_list_print(fr_sbuff_t *out, fr_pair_list_t const *list)
+ssize_t fr_pair_list_print(fr_sbuff_t *out, fr_dict_attr_t const *parent, fr_pair_list_t const *list)
{
fr_pair_t *vp;
fr_sbuff_t our_out = FR_SBUFF(out);
}
while (true) {
- ssize_t slen;
-
- slen = fr_pair_print(&our_out, NULL, vp);
- if (slen <= 0) {
- fr_assert(0);
- return slen;
- }
+ FR_SBUFF_RETURN(fr_pair_print, &our_out, parent, vp);
vp = fr_pair_list_next(list, vp);
if (!vp) break;