]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-json: unify JSON_BUILD_PAIR_IN?_ADDR_*
authorMike Yuan <me@yhndnzj.com>
Sun, 15 Feb 2026 01:06:19 +0000 (02:06 +0100)
committerMike Yuan <me@yhndnzj.com>
Mon, 16 Feb 2026 08:44:54 +0000 (09:44 +0100)
This also swaps family and address params for
plain JSON_BUILD(_PAIR)_IN_ADDR, aligning with
_WITH_STRING flavors.

src/core/varlink-cgroup.c
src/libsystemd/sd-json/json-util.h
src/libsystemd/sd-json/sd-json.c
src/network/networkd-json.c
src/resolve/resolved-dns-server.c

index ffa3b7ca6d08e5981a57f614d15d1ce1b4799de4..2e0c086f952ee5cf7ef12b7d160c426cbf5a94ec 100644 (file)
@@ -112,7 +112,7 @@ static int ip_address_access_build_json(sd_json_variant **ret, const char *name,
                 r = sd_json_variant_append_arraybo(
                                 &v,
                                 SD_JSON_BUILD_PAIR_INTEGER("family", i->family),
-                                JSON_BUILD_PAIR_IN_ADDR("address", &i->address, i->family),
+                                JSON_BUILD_PAIR_IN_ADDR("address", i->family, &i->address),
                                 SD_JSON_BUILD_PAIR_UNSIGNED("prefixLength", i->prefixlen));
                 if (r < 0)
                         return r;
index 3d7d37a30c9a77bb8dcad04e83ba135c77a6d161..5365eedcae5420e52505f8e3c5fab2eb25556d70 100644 (file)
@@ -175,9 +175,9 @@ enum {
         _JSON_BUILD_PAIR_VARIANT_NON_EMPTY,
         /* _SD_JSON_BUILD_PAIR_VARIANT_ARRAY_NON_EMPTY, */
         _JSON_BUILD_PAIR_BYTE_ARRAY_NON_EMPTY,
-        _JSON_BUILD_PAIR_IN4_ADDR_NON_NULL,
-        _JSON_BUILD_PAIR_IN6_ADDR_NON_NULL,
         _JSON_BUILD_PAIR_IN_ADDR_NON_NULL,
+        _JSON_BUILD_PAIR_IN_ADDR_WITH_STRING,
+        _JSON_BUILD_PAIR_IN_ADDR_WITH_STRING_NON_NULL,
         _JSON_BUILD_PAIR_ETHER_ADDR_NON_NULL,
         _JSON_BUILD_PAIR_HW_ADDR_NON_NULL,
         _JSON_BUILD_PAIR_DUAL_TIMESTAMP_NON_NULL,
@@ -190,12 +190,6 @@ enum {
         _JSON_BUILD_PAIR_TRISTATE_NON_NULL,
         _JSON_BUILD_PAIR_PIDREF_NON_NULL,
         _JSON_BUILD_PAIR_DEVNUM,
-        _JSON_BUILD_PAIR_IN_ADDR_WITH_STRING,
-        _JSON_BUILD_PAIR_IN6_ADDR_WITH_STRING,
-        _JSON_BUILD_PAIR_IN4_ADDR_WITH_STRING,
-        _JSON_BUILD_PAIR_IN_ADDR_WITH_STRING_NON_NULL,
-        _JSON_BUILD_PAIR_IN6_ADDR_WITH_STRING_NON_NULL,
-        _JSON_BUILD_PAIR_IN4_ADDR_WITH_STRING_NON_NULL,
 
         _SD_JSON_BUILD_REALLYMAX,
 };
@@ -206,7 +200,7 @@ enum {
 #define JSON_BUILD_CONST_STRING(s) _SD_JSON_BUILD_VARIANT, JSON_VARIANT_STRING_CONST(s)
 #define JSON_BUILD_IN4_ADDR(v) SD_JSON_BUILD_BYTE_ARRAY((const struct in_addr*) { v }, sizeof(struct in_addr))
 #define JSON_BUILD_IN6_ADDR(v) SD_JSON_BUILD_BYTE_ARRAY((const struct in6_addr*) { v }, sizeof(struct in6_addr))
-#define JSON_BUILD_IN_ADDR(v, f) SD_JSON_BUILD_BYTE_ARRAY(((const union in_addr_union*) { v })->bytes, FAMILY_ADDRESS_SIZE_SAFE(f))
+#define JSON_BUILD_IN_ADDR(f, v) SD_JSON_BUILD_BYTE_ARRAY(((const union in_addr_union*) { v })->bytes, FAMILY_ADDRESS_SIZE_SAFE(f))
 #define JSON_BUILD_ETHER_ADDR(v) SD_JSON_BUILD_BYTE_ARRAY(((const struct ether_addr*) { v })->ether_addr_octet, sizeof(struct ether_addr))
 #define JSON_BUILD_HW_ADDR(v) _JSON_BUILD_HW_ADDR, (const struct hw_addr_data*) { v }
 #define JSON_BUILD_STRING_SET(s) _JSON_BUILD_STRING_SET, (Set *) { s }
@@ -229,9 +223,15 @@ enum {
 #define JSON_BUILD_PAIR_VARIANT_NON_NULL(name, v) _JSON_BUILD_PAIR_VARIANT_NON_NULL, (const char*) { name }, (sd_json_variant*) { v }
 #define JSON_BUILD_PAIR_VARIANT_NON_EMPTY(name, v) _JSON_BUILD_PAIR_VARIANT_NON_EMPTY, (const char*) { name }, (sd_json_variant*) { v }
 #define JSON_BUILD_PAIR_BYTE_ARRAY_NON_EMPTY(name, v, n) _JSON_BUILD_PAIR_BYTE_ARRAY_NON_EMPTY, (const char*) { name }, (const void*) { v }, (size_t) { n }
-#define JSON_BUILD_PAIR_IN4_ADDR_NON_NULL(name, v) _JSON_BUILD_PAIR_IN4_ADDR_NON_NULL, (const char*) { name }, (const struct in_addr*) { v }
-#define JSON_BUILD_PAIR_IN6_ADDR_NON_NULL(name, v) _JSON_BUILD_PAIR_IN6_ADDR_NON_NULL, (const char*) { name }, (const struct in6_addr*) { v }
-#define JSON_BUILD_PAIR_IN_ADDR_NON_NULL(name, v, f) _JSON_BUILD_PAIR_IN_ADDR_NON_NULL, (const char*) { name }, (const union in_addr_union*) { v }, (int) { f }
+#define JSON_BUILD_PAIR_IN_ADDR_NON_NULL(name, f, v) _JSON_BUILD_PAIR_IN_ADDR_NON_NULL, (const char*) { name }, (int) { f }, (const union in_addr_union*) { v }
+#define JSON_BUILD_PAIR_IN4_ADDR_NON_NULL(name, v) _JSON_BUILD_PAIR_IN_ADDR_NON_NULL, (const char*) { name }, AF_INET, &(union in_addr_union) { .in = *(v) }
+#define JSON_BUILD_PAIR_IN6_ADDR_NON_NULL(name, v) _JSON_BUILD_PAIR_IN_ADDR_NON_NULL, (const char*) { name }, AF_INET6, &(union in_addr_union) { .in6 = *(v) }
+#define JSON_BUILD_PAIR_IN_ADDR_WITH_STRING(name, f, v) _JSON_BUILD_PAIR_IN_ADDR_WITH_STRING, (const char*) { name }, (int) { f }, (const union in_addr_union*) { v }
+#define JSON_BUILD_PAIR_IN4_ADDR_WITH_STRING(name, v) _JSON_BUILD_PAIR_IN_ADDR_WITH_STRING, (const char*) { name }, AF_INET, &(union in_addr_union) { .in = *(v) }
+#define JSON_BUILD_PAIR_IN6_ADDR_WITH_STRING(name, v) _JSON_BUILD_PAIR_IN_ADDR_WITH_STRING, (const char*) { name }, AF_INET6, &(union in_addr_union) { .in6 = *(v) }
+#define JSON_BUILD_PAIR_IN_ADDR_WITH_STRING_NON_NULL(name, f, v) _JSON_BUILD_PAIR_IN_ADDR_WITH_STRING_NON_NULL, (const char*) { name }, (int) { f }, (const union in_addr_union*) { v }
+#define JSON_BUILD_PAIR_IN4_ADDR_WITH_STRING_NON_NULL(name, v) _JSON_BUILD_PAIR_IN_ADDR_WITH_STRING_NON_NULL, (const char*) { name }, AF_INET, &(union in_addr_union) { .in = *(v) }
+#define JSON_BUILD_PAIR_IN6_ADDR_WITH_STRING_NON_NULL(name, v) _JSON_BUILD_PAIR_IN_ADDR_WITH_STRING_NON_NULL, (const char*) { name }, AF_INET6, &(union in_addr_union) { .in6 = *(v) }
 #define JSON_BUILD_PAIR_ETHER_ADDR_NON_NULL(name, v) _JSON_BUILD_PAIR_ETHER_ADDR_NON_NULL, (const char*) { name }, (const struct ether_addr*) { v }
 #define JSON_BUILD_PAIR_HW_ADDR_NON_NULL(name, v) _JSON_BUILD_PAIR_HW_ADDR_NON_NULL, (const char*) { name }, (const struct hw_addr_data*) { v }
 #define JSON_BUILD_PAIR_DUAL_TIMESTAMP_NON_NULL(name, t) _JSON_BUILD_PAIR_DUAL_TIMESTAMP_NON_NULL, (const char*) { name }, (dual_timestamp*) { t }
@@ -243,18 +243,12 @@ enum {
 #define JSON_BUILD_PAIR_OCTESCAPE_NON_EMPTY(name, v, n) _JSON_BUILD_PAIR_HEX_NON_EMPTY, (const char*) { name }, (const void*) { v }, (size_t) { n }
 #define JSON_BUILD_PAIR_TRISTATE_NON_NULL(name, i) _JSON_BUILD_PAIR_TRISTATE_NON_NULL, (const char*) { name }, (int) { i }
 #define JSON_BUILD_PAIR_PIDREF_NON_NULL(name, p) _JSON_BUILD_PAIR_PIDREF_NON_NULL, (const char*) { name }, (const PidRef*) { p }
-#define JSON_BUILD_PAIR_IN_ADDR_WITH_STRING(name, f, v) _JSON_BUILD_PAIR_IN_ADDR_WITH_STRING, (const char*) { name }, (int) { f }, (const union in_addr_union*) { v }
-#define JSON_BUILD_PAIR_IN6_ADDR_WITH_STRING(name, v) _JSON_BUILD_PAIR_IN6_ADDR_WITH_STRING, (const char*) { name }, (const struct in6_addr*) { v }
-#define JSON_BUILD_PAIR_IN4_ADDR_WITH_STRING(name, v) _JSON_BUILD_PAIR_IN4_ADDR_WITH_STRING, (const char*) { name }, (const struct in_addr*) { v }
-#define JSON_BUILD_PAIR_IN_ADDR_WITH_STRING_NON_NULL(name, f, v) _JSON_BUILD_PAIR_IN_ADDR_WITH_STRING_NON_NULL, (const char*) { name }, (int) { f }, (const union in_addr_union*) { v }
-#define JSON_BUILD_PAIR_IN6_ADDR_WITH_STRING_NON_NULL(name, v) _JSON_BUILD_PAIR_IN6_ADDR_WITH_STRING_NON_NULL, (const char*) { name }, (const struct in6_addr*) { v }
-#define JSON_BUILD_PAIR_IN4_ADDR_WITH_STRING_NON_NULL(name, v) _JSON_BUILD_PAIR_IN4_ADDR_WITH_STRING_NON_NULL, (const char*) { name }, (const struct in_addr*) { v }
 
 #define JSON_BUILD_PAIR_IOVEC_BASE64(name, iov) SD_JSON_BUILD_PAIR(name, JSON_BUILD_IOVEC_BASE64(iov))
 #define JSON_BUILD_PAIR_IOVEC_HEX(name, iov) SD_JSON_BUILD_PAIR(name, JSON_BUILD_IOVEC_HEX(iov))
 #define JSON_BUILD_PAIR_IN4_ADDR(name, v) SD_JSON_BUILD_PAIR(name, JSON_BUILD_IN4_ADDR(v))
 #define JSON_BUILD_PAIR_IN6_ADDR(name, v) SD_JSON_BUILD_PAIR(name, JSON_BUILD_IN6_ADDR(v))
-#define JSON_BUILD_PAIR_IN_ADDR(name, v, f) SD_JSON_BUILD_PAIR(name, JSON_BUILD_IN_ADDR(v, f))
+#define JSON_BUILD_PAIR_IN_ADDR(name, f, v) SD_JSON_BUILD_PAIR(name, JSON_BUILD_IN_ADDR(f, v))
 #define JSON_BUILD_PAIR_ETHER_ADDR(name, v) SD_JSON_BUILD_PAIR(name, JSON_BUILD_ETHER_ADDR(v))
 #define JSON_BUILD_PAIR_HW_ADDR(name, v) SD_JSON_BUILD_PAIR(name, JSON_BUILD_HW_ADDR(v))
 #define JSON_BUILD_PAIR_STRING_SET(name, s) SD_JSON_BUILD_PAIR(name, JSON_BUILD_STRING_SET(s))
index 3278fba6a84b2729165d1aa33a16d3067898755c..4ac50c20c9b09ccc02b8f92665db7309fb872131 100644 (file)
@@ -4666,9 +4666,12 @@ _public_ int sd_json_buildv(sd_json_variant **ret, va_list ap) {
                         break;
                 }
 
-                case _JSON_BUILD_PAIR_IN4_ADDR_NON_NULL: {
-                        const struct in_addr *a;
+                case _JSON_BUILD_PAIR_IN_ADDR_NON_NULL:
+                case _JSON_BUILD_PAIR_IN_ADDR_WITH_STRING_NON_NULL:
+                case _JSON_BUILD_PAIR_IN_ADDR_WITH_STRING: {
+                        const union in_addr_union *a;
                         const char *n;
+                        int f;
 
                         if (current->expect != EXPECT_OBJECT_KEY) {
                                 r = -EINVAL;
@@ -4676,77 +4679,53 @@ _public_ int sd_json_buildv(sd_json_variant **ret, va_list ap) {
                         }
 
                         n = va_arg(ap, const char *);
-                        a = va_arg(ap, const struct in_addr *);
-
-                        if (a && in4_addr_is_set(a) && current->n_suppress == 0) {
-                                r = sd_json_variant_new_string(&add, n);
-                                if (r < 0)
-                                        goto finish;
-
-                                r = sd_json_variant_new_array_bytes(&add_more, a, sizeof(struct in_addr));
-                                if (r < 0)
-                                        goto finish;
-                        }
-
-                        n_subtract = 2; /* we generated two items */
-
-                        current->expect = EXPECT_OBJECT_KEY;
-                        break;
-                }
-
-                case _JSON_BUILD_PAIR_IN6_ADDR_NON_NULL: {
-                        const struct in6_addr *a;
-                        const char *n;
+                        f = va_arg(ap, int);
+                        a = va_arg(ap, const union in_addr_union *);
 
-                        if (current->expect != EXPECT_OBJECT_KEY) {
-                                r = -EINVAL;
-                                goto finish;
-                        }
+                        if (current->n_suppress == 0 &&
+                            ((a && in_addr_is_set(f, a)) ||
+                             command == _JSON_BUILD_PAIR_IN_ADDR_WITH_STRING)) {
 
-                        n = va_arg(ap, const char *);
-                        a = va_arg(ap, const struct in6_addr *);
+                                if (!a)
+                                        a = &IN_ADDR_NULL;
 
-                        if (a && in6_addr_is_set(a) && current->n_suppress == 0) {
                                 r = sd_json_variant_new_string(&add, n);
                                 if (r < 0)
                                         goto finish;
 
-                                r = sd_json_variant_new_array_bytes(&add_more, a, sizeof(struct in6_addr));
+                                r = sd_json_variant_new_array_bytes(&add_more, a->bytes, FAMILY_ADDRESS_SIZE_SAFE(f));
                                 if (r < 0)
                                         goto finish;
-                        }
 
-                        n_subtract = 2; /* we generated two items */
-
-                        current->expect = EXPECT_OBJECT_KEY;
-                        break;
-                }
+                                if (IN_SET(command, _JSON_BUILD_PAIR_IN_ADDR_WITH_STRING, _JSON_BUILD_PAIR_IN_ADDR_WITH_STRING_NON_NULL)) {
+                                        _cleanup_free_ char *string_key_name = NULL;
+                                        _cleanup_(sd_json_variant_unrefp) sd_json_variant *string_key = NULL, *string_value = NULL;
 
-                case _JSON_BUILD_PAIR_IN_ADDR_NON_NULL: {
-                        const union in_addr_union *a;
-                        const char *n;
-                        int f;
+                                        string_key_name = strjoin(n, "String");
+                                        if (!string_key_name) {
+                                                r = -ENOMEM;
+                                                goto finish;
+                                        }
 
-                        if (current->expect != EXPECT_OBJECT_KEY) {
-                                r = -EINVAL;
-                                goto finish;
-                        }
+                                        r = sd_json_variant_new_string(&string_key, string_key_name);
+                                        if (r < 0)
+                                                goto finish;
 
-                        n = va_arg(ap, const char *);
-                        a = va_arg(ap, const union in_addr_union *);
-                        f = va_arg(ap, int);
+                                        r = sd_json_variant_new_string(&string_value, IN_ADDR_TO_STRING(f, a));
+                                        if (r < 0)
+                                                goto finish;
 
-                        if (a && in_addr_is_set(f, a) && current->n_suppress == 0) {
-                                r = sd_json_variant_new_string(&add, n);
-                                if (r < 0)
-                                        goto finish;
+                                        if (!GREEDY_REALLOC(current->elements, current->n_elements + 2)) {
+                                                r = -ENOMEM;
+                                                goto finish;
+                                        }
 
-                                r = sd_json_variant_new_array_bytes(&add_more, a->bytes, FAMILY_ADDRESS_SIZE_SAFE(f));
-                                if (r < 0)
-                                        goto finish;
+                                        current->elements[current->n_elements++] = TAKE_PTR(string_key);
+                                        current->elements[current->n_elements++] = TAKE_PTR(string_value);
+                                }
                         }
 
-                        n_subtract = 2; /* we generated two items */
+                        n_subtract = command == _JSON_BUILD_PAIR_IN_ADDR_NON_NULL ? 2 : 4;
 
                         current->expect = EXPECT_OBJECT_KEY;
                         break;
@@ -4896,207 +4875,6 @@ _public_ int sd_json_buildv(sd_json_variant **ret, va_list ap) {
                         break;
                 }
 
-                case _JSON_BUILD_PAIR_IN_ADDR_WITH_STRING_NON_NULL:
-                case _JSON_BUILD_PAIR_IN_ADDR_WITH_STRING: {
-                        const union in_addr_union *a;
-                        const char *n;
-                        int f;
-
-                        if (current->expect != EXPECT_OBJECT_KEY) {
-                                r = -EINVAL;
-                                goto finish;
-                        }
-
-                        n = va_arg(ap, const char *);
-                        f = va_arg(ap, int);
-                        a = va_arg(ap, const union in_addr_union *);
-
-                        if (current->n_suppress == 0) {
-                                bool have_address = a && in_addr_is_set(f, a);
-
-                                if (have_address || command != _JSON_BUILD_PAIR_IN_ADDR_WITH_STRING_NON_NULL) {
-                                        _cleanup_free_ char *addr_str = NULL, *string_key_name = NULL;
-                                        _cleanup_(sd_json_variant_unrefp) sd_json_variant *string_key = NULL, *string_value = NULL;
-
-                                        /* For non-NON_NULL variant, always convert address to string (even if all zeros).
-                                         * For NON_NULL variant, we only get here when have_address is true. */
-                                        if (a) {
-                                                r = in_addr_to_string(f, a, &addr_str);
-                                                if (r < 0)
-                                                        goto finish;
-                                        }
-
-                                        string_key_name = strjoin(n, "String");
-                                        if (!string_key_name) {
-                                                r = -ENOMEM;
-                                                goto finish;
-                                        }
-
-                                        r = sd_json_variant_new_string(&add, n);
-                                        if (r < 0)
-                                                goto finish;
-
-                                        r = sd_json_variant_new_array_bytes(&add_more, a->bytes, FAMILY_ADDRESS_SIZE_SAFE(f));
-                                        if (r < 0)
-                                                goto finish;
-
-                                        r = sd_json_variant_new_string(&string_key, string_key_name);
-                                        if (r < 0)
-                                                goto finish;
-
-                                        r = sd_json_variant_new_string(&string_value, addr_str);
-                                        if (r < 0)
-                                                goto finish;
-
-                                        if (!GREEDY_REALLOC(current->elements, current->n_elements + 2)) {
-                                                r = -ENOMEM;
-                                                goto finish;
-                                        }
-
-                                        current->elements[current->n_elements++] = TAKE_PTR(string_key);
-                                        current->elements[current->n_elements++] = TAKE_PTR(string_value);
-                                }
-                        }
-
-                        n_subtract = 4; /* we generated two pairs (binary and string) */
-
-                        current->expect = EXPECT_OBJECT_KEY;
-                        break;
-                }
-
-                case _JSON_BUILD_PAIR_IN6_ADDR_WITH_STRING_NON_NULL:
-                case _JSON_BUILD_PAIR_IN6_ADDR_WITH_STRING: {
-                        const struct in6_addr *a;
-                        const char *n;
-
-                        if (current->expect != EXPECT_OBJECT_KEY) {
-                                r = -EINVAL;
-                                goto finish;
-                        }
-
-                        n = va_arg(ap, const char *);
-                        a = va_arg(ap, const struct in6_addr *);
-
-                        if (current->n_suppress == 0) {
-                                bool have_address = a && in6_addr_is_set(a);
-
-                                if (have_address || command != _JSON_BUILD_PAIR_IN6_ADDR_WITH_STRING_NON_NULL) {
-                                        _cleanup_free_ char *addr_str = NULL, *string_key_name = NULL;
-                                        _cleanup_(sd_json_variant_unrefp) sd_json_variant *string_key = NULL, *string_value = NULL;
-
-                                        /* For non-NON_NULL variant, always convert address to string (even if all zeros).
-                                         * For NON_NULL variant, we only get here when have_address is true. */
-                                        if (a) {
-                                                r = in6_addr_to_string(a, &addr_str);
-                                                if (r < 0)
-                                                        goto finish;
-                                        }
-
-                                        string_key_name = strjoin(n, "String");
-                                        if (!string_key_name) {
-                                                r = -ENOMEM;
-                                                goto finish;
-                                        }
-
-                                        r = sd_json_variant_new_string(&add, n);
-                                        if (r < 0)
-                                                goto finish;
-
-                                        r = sd_json_variant_new_array_bytes(&add_more, a, sizeof(struct in6_addr));
-                                        if (r < 0)
-                                                goto finish;
-
-                                        r = sd_json_variant_new_string(&string_key, string_key_name);
-                                        if (r < 0)
-                                                goto finish;
-
-                                        r = sd_json_variant_new_string(&string_value, addr_str);
-                                        if (r < 0)
-                                                goto finish;
-
-                                        if (!GREEDY_REALLOC(current->elements, current->n_elements + 2)) {
-                                                r = -ENOMEM;
-                                                goto finish;
-                                        }
-
-                                        current->elements[current->n_elements++] = TAKE_PTR(string_key);
-                                        current->elements[current->n_elements++] = TAKE_PTR(string_value);
-                                }
-                        }
-
-                        n_subtract = 4; /* we generated two pairs (binary and string) */
-
-                        current->expect = EXPECT_OBJECT_KEY;
-                        break;
-                }
-
-                case _JSON_BUILD_PAIR_IN4_ADDR_WITH_STRING_NON_NULL:
-                case _JSON_BUILD_PAIR_IN4_ADDR_WITH_STRING: {
-                        const struct in_addr *a;
-                        const char *n;
-
-                        if (current->expect != EXPECT_OBJECT_KEY) {
-                                r = -EINVAL;
-                                goto finish;
-                        }
-
-                        n = va_arg(ap, const char *);
-                        a = va_arg(ap, const struct in_addr *);
-
-                        if (current->n_suppress == 0) {
-                                bool have_address = a && !in4_addr_is_null(a);
-
-                                if (have_address || command != _JSON_BUILD_PAIR_IN4_ADDR_WITH_STRING_NON_NULL) {
-                                        _cleanup_free_ char *addr_str = NULL, *string_key_name = NULL;
-                                        _cleanup_(sd_json_variant_unrefp) sd_json_variant *string_key = NULL, *string_value = NULL;
-
-                                        /* For non-NON_NULL variant, always convert address to string (even if all zeros).
-                                         * For NON_NULL variant, we only get here when have_address is true. */
-                                        if (a) {
-                                                union in_addr_union addr_union = { .in = *a };
-                                                r = in_addr_to_string(AF_INET, &addr_union, &addr_str);
-                                                if (r < 0)
-                                                        goto finish;
-                                        }
-
-                                        string_key_name = strjoin(n, "String");
-                                        if (!string_key_name) {
-                                                r = -ENOMEM;
-                                                goto finish;
-                                        }
-
-                                        r = sd_json_variant_new_string(&add, n);
-                                        if (r < 0)
-                                                goto finish;
-
-                                        r = sd_json_variant_new_array_bytes(&add_more, a, sizeof(struct in_addr));
-                                        if (r < 0)
-                                                goto finish;
-
-                                        r = sd_json_variant_new_string(&string_key, string_key_name);
-                                        if (r < 0)
-                                                goto finish;
-
-                                        r = sd_json_variant_new_string(&string_value, addr_str);
-                                        if (r < 0)
-                                                goto finish;
-
-                                        if (!GREEDY_REALLOC(current->elements, current->n_elements + 2)) {
-                                                r = -ENOMEM;
-                                                goto finish;
-                                        }
-
-                                        current->elements[current->n_elements++] = TAKE_PTR(string_key);
-                                        current->elements[current->n_elements++] = TAKE_PTR(string_value);
-                                }
-                        }
-
-                        n_subtract = 4; /* we generated two pairs (binary and string) */
-
-                        current->expect = EXPECT_OBJECT_KEY;
-                        break;
-                }
-
                 case _JSON_BUILD_PAIR_CALLBACK_NON_NULL: {
                         sd_json_build_callback_t cb;
                         void *userdata;
index 123594179cbff69b3f3a8e25e413cf98fd5a51da..de1a8829ee94bd9d456908131cff1bc7481d93cf 100644 (file)
@@ -623,7 +623,7 @@ static int dnr_append_json_one(Link *link, const struct sd_dns_resolver *res, Ne
         FOREACH_ARRAY(addr, res->addrs, res->n_addrs) {
                 r = sd_json_variant_append_arrayb(
                                 &addrs_array,
-                                JSON_BUILD_IN_ADDR(addr, res->family));
+                                JSON_BUILD_IN_ADDR(res->family, addr));
                 if (r < 0)
                         return r;
         }
@@ -644,7 +644,7 @@ static int dnr_append_json_one(Link *link, const struct sd_dns_resolver *res, Ne
                                         JSON_BUILD_PAIR_STRING_NON_EMPTY("DoHPath", res->dohpath),
                                         JSON_BUILD_PAIR_STRV_NON_EMPTY("Transports", transports),
                                         SD_JSON_BUILD_PAIR_STRING("ConfigSource", network_config_source_to_string(s)),
-                                        JSON_BUILD_PAIR_IN_ADDR_NON_NULL("ConfigProvider", p, res->family)));
+                                        JSON_BUILD_PAIR_IN_ADDR_NON_NULL("ConfigProvider", res->family, p)));
 }
 
 static int dnr_append_json(Link *link, sd_json_variant **v) {
@@ -733,7 +733,7 @@ static int server_append_json_one_addr(int family, const union in_addr_union *a,
         return sd_json_variant_append_arraybo(
                         array,
                         SD_JSON_BUILD_PAIR_INTEGER("Family", family),
-                        JSON_BUILD_PAIR_IN_ADDR("Address", a, family),
+                        JSON_BUILD_PAIR_IN_ADDR("Address", family, a),
                         SD_JSON_BUILD_PAIR_STRING("AddressString", address_str),
                         SD_JSON_BUILD_PAIR_STRING("ConfigSource", network_config_source_to_string(s)),
                         JSON_BUILD_PAIR_IN_ADDR_WITH_STRING_NON_NULL("ConfigProvider", family, p));
index 83082631f79442cacea7df57059e00aeb01e3a74..4f04476f2d4acba88bca14db654c6458907451f9 100644 (file)
@@ -1374,7 +1374,7 @@ int dns_server_dump_configuration_to_json(DnsServer *server, sd_json_variant **r
         return sd_json_buildo(
                         ret,
                         JSON_BUILD_PAIR_STRING_NON_EMPTY("addressString", dns_server_string(server)),
-                        JSON_BUILD_PAIR_IN_ADDR("address", &server->address, server->family),
+                        JSON_BUILD_PAIR_IN_ADDR("address", server->family, &server->address),
                         SD_JSON_BUILD_PAIR_INTEGER("family", server->family),
                         SD_JSON_BUILD_PAIR_UNSIGNED("port", dns_server_port(server)),
                         SD_JSON_BUILD_PAIR_CONDITION(ifindex > 0, "ifindex", SD_JSON_BUILD_UNSIGNED(ifindex)),