From: Lennart Poettering Date: Thu, 20 Oct 2022 21:08:45 +0000 (+0200) Subject: json: add build helpers to insert id128 in uuid formatting into json object X-Git-Tag: v253-rc1~554^2~4 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=9bc4156cdf75dffdb9b5217e353921cd4a7660ae;p=thirdparty%2Fsystemd.git json: add build helpers to insert id128 in uuid formatting into json object --- diff --git a/src/shared/format-table.c b/src/shared/format-table.c index 0549c9f12ef..bf2c88d893c 100644 --- a/src/shared/format-table.c +++ b/src/shared/format-table.c @@ -2573,10 +2573,10 @@ static int table_data_to_json(TableData *d, JsonVariant **ret) { return json_variant_new_array_bytes(ret, &d->address, FAMILY_ADDRESS_SIZE(AF_INET6)); case TABLE_ID128: - return json_variant_new_string(ret, SD_ID128_TO_STRING(d->id128)); + return json_variant_new_id128(ret, d->id128); case TABLE_UUID: - return json_variant_new_string(ret, SD_ID128_TO_UUID_STRING(d->id128)); + return json_variant_new_uuid(ret, d->id128); case TABLE_UID: if (!uid_is_valid(d->uid)) diff --git a/src/shared/json.c b/src/shared/json.c index eda7bb19563..94d7b315570 100644 --- a/src/shared/json.c +++ b/src/shared/json.c @@ -481,6 +481,10 @@ int json_variant_new_id128(JsonVariant **ret, sd_id128_t id) { return json_variant_new_string(ret, SD_ID128_TO_STRING(id)); } +int json_variant_new_uuid(JsonVariant **ret, sd_id128_t id) { + return json_variant_new_string(ret, SD_ID128_TO_UUID_STRING(id)); +} + static void json_variant_set(JsonVariant *a, JsonVariant *b) { assert(a); @@ -3609,7 +3613,8 @@ int json_buildv(JsonVariant **ret, va_list ap) { break; } - case _JSON_BUILD_ID128: { + case _JSON_BUILD_ID128: + case _JSON_BUILD_UUID: { const sd_id128_t *id; if (!IN_SET(current->expect, EXPECT_TOPLEVEL, EXPECT_OBJECT_VALUE, EXPECT_ARRAY_ELEMENT)) { @@ -3620,7 +3625,9 @@ int json_buildv(JsonVariant **ret, va_list ap) { assert_se(id = va_arg(ap, sd_id128_t*)); if (current->n_suppress == 0) { - r = json_variant_new_id128(&add, *id); + r = command == _JSON_BUILD_ID128 ? + json_variant_new_id128(&add, *id) : + json_variant_new_uuid(&add, *id); if (r < 0) goto finish; } diff --git a/src/shared/json.h b/src/shared/json.h index 5993e05299c..c5f052a9d56 100644 --- a/src/shared/json.h +++ b/src/shared/json.h @@ -75,6 +75,7 @@ int json_variant_new_array_strv(JsonVariant **ret, char **l); int json_variant_new_object(JsonVariant **ret, JsonVariant **array, size_t n); int json_variant_new_null(JsonVariant **ret); int json_variant_new_id128(JsonVariant **ret, sd_id128_t id); +int json_variant_new_uuid(JsonVariant **ret, sd_id128_t id); static inline int json_variant_new_string(JsonVariant **ret, const char *s) { return json_variant_new_stringn(ret, s, SIZE_MAX); @@ -251,6 +252,7 @@ enum { _JSON_BUILD_HEX, _JSON_BUILD_OCTESCAPE, _JSON_BUILD_ID128, + _JSON_BUILD_UUID, _JSON_BUILD_BYTE_ARRAY, _JSON_BUILD_HW_ADDR, _JSON_BUILD_PAIR_UNSIGNED_NON_ZERO, @@ -288,6 +290,7 @@ enum { #define JSON_BUILD_HEX(p, n) _JSON_BUILD_HEX, (const void*) { p }, (size_t) { n } #define JSON_BUILD_OCTESCAPE(p, n) _JSON_BUILD_OCTESCAPE, (const void*) { p }, (size_t) { n } #define JSON_BUILD_ID128(id) _JSON_BUILD_ID128, (const sd_id128_t*) { &(id) } +#define JSON_BUILD_UUID(id) _JSON_BUILD_UUID, (const sd_id128_t*) { &(id) } #define JSON_BUILD_BYTE_ARRAY(v, n) _JSON_BUILD_BYTE_ARRAY, (const void*) { v }, (size_t) { n } #define JSON_BUILD_CONST_STRING(s) _JSON_BUILD_VARIANT, JSON_VARIANT_STRING_CONST(s) #define JSON_BUILD_IN4_ADDR(v) JSON_BUILD_BYTE_ARRAY((const struct in_addr*) { v }, sizeof(struct in_addr)) @@ -313,6 +316,7 @@ enum { #define JSON_BUILD_PAIR_BASE64(name, p, n) JSON_BUILD_PAIR(name, JSON_BUILD_BASE64(p, n)) #define JSON_BUILD_PAIR_HEX(name, p, n) JSON_BUILD_PAIR(name, JSON_BUILD_HEX(p, n)) #define JSON_BUILD_PAIR_ID128(name, id) JSON_BUILD_PAIR(name, JSON_BUILD_ID128(id)) +#define JSON_BUILD_PAIR_UUID(name, id) JSON_BUILD_PAIR(name, JSON_BUILD_UUID(id)) #define JSON_BUILD_PAIR_BYTE_ARRAY(name, v, n) JSON_BUILD_PAIR(name, JSON_BUILD_BYTE_ARRAY(v, n)) #define JSON_BUILD_PAIR_IN4_ADDR(name, v) JSON_BUILD_PAIR(name, JSON_BUILD_IN4_ADDR(v)) #define JSON_BUILD_PAIR_IN6_ADDR(name, v) JSON_BUILD_PAIR(name, JSON_BUILD_IN6_ADDR(v))