]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Expose dict flag printing function
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Sun, 29 Apr 2018 10:22:29 +0000 (22:22 +1200)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Sun, 29 Apr 2018 10:22:56 +0000 (22:22 +1200)
src/include/dict.h
src/lib/util/dict.c

index da176c1a1a3ea79091ddacf9cc465716961493dd..101f050f7668beea4a4937da89dae1e3a4baf2c8 100644 (file)
@@ -235,6 +235,8 @@ fr_dict_attr_t const        *fr_dict_attr_known(fr_dict_t *dict, fr_dict_attr_t const *
  *
  * @{
  */
+ssize_t                        fr_dict_snprint_flags(char *out, size_t outlen, fr_dict_attr_flags_t const *flags);
+
 void                   fr_dict_print(fr_dict_attr_t const *da, int depth);
 
 fr_dict_attr_t const   *fr_dict_parent_common(fr_dict_attr_t const *a, fr_dict_attr_t const *b, bool is_ancestor);
index 2430bc0a40b2e2d78d4c06bfcdf1389ee922acfb..3af302280c36b6a0be436957a65994028b39d63d 100644 (file)
@@ -2527,7 +2527,7 @@ fr_dict_attr_t const *fr_dict_attr_known(fr_dict_t *dict, fr_dict_attr_t const *
        return NULL;
 }
 
-static void dict_snprint_flags(char *out, size_t outlen, fr_dict_attr_flags_t flags)
+ssize_t fr_dict_snprint_flags(char *out, size_t outlen, fr_dict_attr_flags_t const *flags)
 {
        char *p = out, *end = p + outlen;
        size_t len;
@@ -2536,15 +2536,16 @@ static void dict_snprint_flags(char *out, size_t outlen, fr_dict_attr_flags_t fl
 
 #define FLAG_SET(_flag) \
 do { \
-       if (flags._flag) {\
+       if (flags->_flag) {\
                p += strlcpy(p, STRINGIFY(_flag)",", end - p);\
-               if (p >= end) return;\
+               if (p >= end) return -1;\
        }\
 } while (0)
 
        FLAG_SET(is_root);
        FLAG_SET(is_unknown);
        FLAG_SET(is_raw);
+       FLAG_SET(is_reference);
        FLAG_SET(internal);
        FLAG_SET(has_tag);
        FLAG_SET(array);
@@ -2552,24 +2553,27 @@ do { \
        FLAG_SET(concat);
        FLAG_SET(virtual);
        FLAG_SET(compare);
+       FLAG_SET(named);
 
-       if (flags.encrypt) {
-               p += snprintf(p, end - p, "encrypt=%i,", flags.encrypt);
-               if (p >= end) return;
+       if (flags->encrypt) {
+               p += snprintf(p, end - p, "encrypt=%i,", flags->encrypt);
+               if (p >= end) return -1;
        }
 
-       if (flags.length) {
-               p += snprintf(p, end - p, "length=%i,", flags.length);
-               if (p >= end) return;
+       if (flags->length) {
+               p += snprintf(p, end - p, "length=%i,", flags->length);
+               if (p >= end) return -1;
        }
 
-       if (!out[0]) return;
+       if (!out[0]) return -1;
 
        /*
         *      Trim the comma
         */
        len = strlen(out);
        if (out[len - 1] == ',') out[len - 1] = '\0';
+
+       return len;
 }
 
 void fr_dict_print(fr_dict_attr_t const *da, int depth)
@@ -2578,7 +2582,7 @@ void fr_dict_print(fr_dict_attr_t const *da, int depth)
        unsigned int i;
        char const *name;
 
-       dict_snprint_flags(buff, sizeof(buff), da->flags);
+       fr_dict_snprint_flags(buff, sizeof(buff), &da->flags);
 
        switch (da->type) {
        case FR_TYPE_VSA: