]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
unify fr_pair_print() and fr_pair_list_print() functions
authorAlan T. DeKok <aland@freeradius.org>
Mon, 7 Aug 2023 13:53:37 +0000 (09:53 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Mon, 7 Aug 2023 13:53:37 +0000 (09:53 -0400)
so that they call each other.  i.e. less code.

And clean up various other bits

src/bin/unit_test_attribute.c
src/lib/util/pair.h
src/lib/util/pair_print.c

index 58626b7df6fd144ea22d405233be1f2152ea22a8..66cb49e4cfb6f11db2ea5392387ffa10febe9ece 100644 (file)
@@ -1193,7 +1193,7 @@ static size_t command_normalise_attribute(command_result_t *result, command_file
         *      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();
@@ -1597,7 +1597,7 @@ static size_t command_decode_pair(command_result_t *result, command_file_ctx_t *
         *      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();
@@ -1682,7 +1682,7 @@ static size_t command_decode_proto(command_result_t *result, command_file_ctx_t
        /*
         *      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();
@@ -2023,7 +2023,7 @@ static size_t command_read_file(command_result_t *result, command_file_ctx_t *cc
        /*
         *      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();
@@ -2535,7 +2535,7 @@ static size_t command_pair(command_result_t *result, command_file_ctx_t *cc,
 
        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();
index 18e886ebc5544bf3acc999757c9861e0359f84e0..d2ed0e6888287b84b8b57c19ad68fdfef768b280 100644 (file)
@@ -769,20 +769,20 @@ static inline fr_slen_t CC_HINT(nonnull(2,3))
                                            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);
index 61e13f58866d2436ff5b39941922054b824f8aed..5241d2d35a98487f3a272020897abf488af3a65a 100644 (file)
@@ -38,8 +38,6 @@
 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);
 
@@ -54,12 +52,9 @@ ssize_t fr_pair_print_value_quoted(fr_sbuff_t *out, fr_pair_t const *vp, fr_toke
                 */
                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);
@@ -88,11 +83,10 @@ ssize_t fr_pair_print_value_quoted(fr_sbuff_t *out, fr_pair_t const *vp, fr_toke
  *     - 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);
 
@@ -102,10 +96,13 @@ ssize_t fr_pair_print(fr_sbuff_t *out, fr_pair_t const *parent, fr_pair_t const
                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, ' ');
@@ -136,11 +133,10 @@ ssize_t fr_pair_print(fr_sbuff_t *out, fr_pair_t const *parent, fr_pair_t const
  *     - 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);
 
@@ -150,10 +146,13 @@ ssize_t fr_pair_print_secure(fr_sbuff_t *out, fr_pair_t const *parent, fr_pair_t
                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, ' ');
@@ -190,7 +189,7 @@ ssize_t fr_pair_print_secure(fr_sbuff_t *out, fr_pair_t const *parent, fr_pair_t
                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, ' ', '}');
@@ -202,12 +201,13 @@ ssize_t fr_pair_print_secure(fr_sbuff_t *out, fr_pair_t const *parent, fr_pair_t
 /** 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);
@@ -219,13 +219,7 @@ ssize_t fr_pair_list_print(fr_sbuff_t *out, fr_pair_list_t const *list)
        }
 
        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;