From 5b5579066d3eb63d6c2c09839f0501475b95b548 Mon Sep 17 00:00:00 2001 From: Daan De Meyer Date: Thu, 8 Aug 2024 14:16:01 +0200 Subject: [PATCH] json-util: Add JSON_BUILD_PAIR_DUAL_TIMESTAMP_NON_NULL() --- src/libsystemd/sd-json/json-util.h | 2 ++ src/libsystemd/sd-json/sd-json.c | 30 ++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/src/libsystemd/sd-json/json-util.h b/src/libsystemd/sd-json/json-util.h index 585547c91d..3be5f75878 100644 --- a/src/libsystemd/sd-json/json-util.h +++ b/src/libsystemd/sd-json/json-util.h @@ -154,6 +154,7 @@ enum { _JSON_BUILD_PAIR_IN_ADDR_NON_NULL, _JSON_BUILD_PAIR_ETHER_ADDR_NON_NULL, _JSON_BUILD_PAIR_HW_ADDR_NON_NULL, + _JSON_BUILD_PAIR_DUAL_TIMESTAMP_NON_NULL, _JSON_BUILD_PAIR_RATELIMIT_ENABLED, _SD_JSON_BUILD_REALLYMAX, @@ -184,6 +185,7 @@ enum { #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_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 } #define JSON_BUILD_PAIR_RATELIMIT_ENABLED(name, rl) _JSON_BUILD_PAIR_RATELIMIT_ENABLED, (const char*) { name }, (const RateLimit*) { rl } #define JSON_BUILD_PAIR_IOVEC_BASE64(name, iov) SD_JSON_BUILD_PAIR(name, JSON_BUILD_IOVEC_BASE64(iov)) diff --git a/src/libsystemd/sd-json/sd-json.c b/src/libsystemd/sd-json/sd-json.c index a4d9c80f06..62f0f3dcb1 100644 --- a/src/libsystemd/sd-json/sd-json.c +++ b/src/libsystemd/sd-json/sd-json.c @@ -4609,6 +4609,36 @@ _public_ int sd_json_buildv(sd_json_variant **ret, va_list ap) { break; } + case _JSON_BUILD_PAIR_DUAL_TIMESTAMP_NON_NULL: { + const dual_timestamp *ts; + const char *n; + + if (current->expect != EXPECT_OBJECT_KEY) { + r = -EINVAL; + goto finish; + } + + n = va_arg(ap, const char*); + ts = va_arg(ap, const dual_timestamp*); + + if (ts && dual_timestamp_is_set(ts) && current->n_suppress == 0) { + r = sd_json_variant_new_string(&add, n); + if (r < 0) + goto finish; + + r = sd_json_buildo(&add_more, + SD_JSON_BUILD_PAIR("realtime", SD_JSON_BUILD_UNSIGNED(ts->realtime)), + SD_JSON_BUILD_PAIR("monotonic", SD_JSON_BUILD_UNSIGNED(ts->monotonic))); + if (r < 0) + goto finish; + } + + n_subtract = 2; /* we generated two item */ + + current->expect = EXPECT_OBJECT_KEY; + break; + } + case _JSON_BUILD_PAIR_RATELIMIT_ENABLED: { const RateLimit *rl; const char *n; -- 2.25.1