From: Daan De Meyer Date: Fri, 9 Aug 2024 14:25:32 +0000 (+0200) Subject: json-util: Add JSON_BUILD_PAIR_INTEGER_NON_NEGATIVE() X-Git-Tag: v257-rc1~567^2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7606139e61b566852dcdd3748d1b893edee38d4d;p=thirdparty%2Fsystemd.git json-util: Add JSON_BUILD_PAIR_INTEGER_NON_NEGATIVE() --- diff --git a/src/libsystemd/sd-json/json-util.h b/src/libsystemd/sd-json/json-util.h index aafa8ca0b90..2403945f1f8 100644 --- a/src/libsystemd/sd-json/json-util.h +++ b/src/libsystemd/sd-json/json-util.h @@ -144,6 +144,7 @@ enum { _JSON_BUILD_RATELIMIT, _JSON_BUILD_PAIR_INTEGER_NON_ZERO, + _JSON_BUILD_PAIR_INTEGER_NON_NEGATIVE, _JSON_BUILD_PAIR_UNSIGNED_NON_ZERO, _JSON_BUILD_PAIR_FINITE_USEC, _JSON_BUILD_PAIR_STRING_NON_EMPTY, @@ -178,6 +179,7 @@ enum { #define JSON_BUILD_RATELIMIT(rl) _JSON_BUILD_RATELIMIT, (const RateLimit*) { rl } #define JSON_BUILD_PAIR_INTEGER_NON_ZERO(name, i) _JSON_BUILD_PAIR_INTEGER_NON_ZERO, (const char*) { name }, (int64_t) { i } +#define JSON_BUILD_PAIR_INTEGER_NON_NEGATIVE(name, i) _JSON_BUILD_PAIR_INTEGER_NON_NEGATIVE, (const char*) { name }, (int64_t) { i } #define JSON_BUILD_PAIR_UNSIGNED_NON_ZERO(name, u) _JSON_BUILD_PAIR_UNSIGNED_NON_ZERO, (const char*) { name }, (uint64_t) { u } #define JSON_BUILD_PAIR_FINITE_USEC(name, u) _JSON_BUILD_PAIR_FINITE_USEC, (const char*) { name }, (usec_t) { u } #define JSON_BUILD_PAIR_STRING_NON_EMPTY(name, s) _JSON_BUILD_PAIR_STRING_NON_EMPTY, (const char*) { name }, (const char*) { s } diff --git a/src/libsystemd/sd-json/sd-json.c b/src/libsystemd/sd-json/sd-json.c index c3e409bee15..7340b064eb1 100644 --- a/src/libsystemd/sd-json/sd-json.c +++ b/src/libsystemd/sd-json/sd-json.c @@ -4330,9 +4330,11 @@ _public_ int sd_json_buildv(sd_json_variant **ret, va_list ap) { break; } - case _JSON_BUILD_PAIR_INTEGER_NON_ZERO: { + case _JSON_BUILD_PAIR_INTEGER_NON_ZERO: + case _JSON_BUILD_PAIR_INTEGER_NON_NEGATIVE: { const char *n; int64_t i; + bool include; if (current->expect != EXPECT_OBJECT_KEY) { r = -EINVAL; @@ -4342,7 +4344,14 @@ _public_ int sd_json_buildv(sd_json_variant **ret, va_list ap) { n = va_arg(ap, const char*); i = va_arg(ap, int64_t); - if (i != 0 && current->n_suppress == 0) { + if (command == _JSON_BUILD_PAIR_INTEGER_NON_ZERO) + include = i != 0; + else if (command == _JSON_BUILD_PAIR_INTEGER_NON_NEGATIVE) + include = i >= 0; + else + assert_not_reached(); + + if (include && current->n_suppress == 0) { r = sd_json_variant_new_string(&add, n); if (r < 0) goto finish;