json: add json_variant_set_fieldb() helper

Let's a "b" helper for json_variant_set_field() that combines
json_build() with json_variant_set_field(), similar to the
json_variant_merge_objectb(), json_variant_append_arrayb().
This commit is contained in:
Lennart Poettering
2023-08-24 13:20:39 +02:00
parent e931768eb4
commit f5fc7732b0
4 changed files with 28 additions and 17 deletions
+6 -9
View File
@@ -2708,7 +2708,7 @@ static int parse_argv(int argc, char *argv[]) {
}
case ARG_RLIMIT: {
_cleanup_(json_variant_unrefp) JsonVariant *v = NULL, *jcur = NULL, *jmax = NULL;
_cleanup_(json_variant_unrefp) JsonVariant *jcur = NULL, *jmax = NULL;
_cleanup_free_ char *field = NULL, *t = NULL;
const char *eq;
struct rlimit rl;
@@ -2764,18 +2764,15 @@ static int parse_argv(int argc, char *argv[]) {
if (r < 0)
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to allocate maximum integer: %m");
r = json_build(&v,
JSON_BUILD_OBJECT(
JSON_BUILD_PAIR("cur", JSON_BUILD_VARIANT(jcur)),
JSON_BUILD_PAIR("max", JSON_BUILD_VARIANT(jmax))));
if (r < 0)
return log_error_errno(r, "Failed to build resource limit: %m");
t = strjoin("RLIMIT_", rlimit_to_string(l));
if (!t)
return log_oom();
r = json_variant_set_field(&arg_identity_extra_rlimits, t, v);
r = json_variant_set_fieldb(
&arg_identity_extra_rlimits, t,
JSON_BUILD_OBJECT(
JSON_BUILD_PAIR("cur", JSON_BUILD_VARIANT(jcur)),
JSON_BUILD_PAIR("max", JSON_BUILD_VARIANT(jmax))));
if (r < 0)
return log_error_errno(r, "Failed to set %s field: %m", rlimit_to_string(l));
+7 -8
View File
@@ -31,7 +31,7 @@ static int user_record_signable_json(UserRecord *ur, char **ret) {
int user_record_sign(UserRecord *ur, EVP_PKEY *private_key, UserRecord **ret) {
_cleanup_(memstream_done) MemStream m = {};
_cleanup_(json_variant_unrefp) JsonVariant *encoded = NULL, *v = NULL;
_cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
_cleanup_(user_record_unrefp) UserRecord *signed_ur = NULL;
_cleanup_(EVP_MD_CTX_freep) EVP_MD_CTX *md_ctx = NULL;
_cleanup_free_ char *text = NULL, *key = NULL;
@@ -77,15 +77,14 @@ int user_record_sign(UserRecord *ur, EVP_PKEY *private_key, UserRecord **ret) {
if (r < 0)
return r;
r = json_build(&encoded, JSON_BUILD_ARRAY(
JSON_BUILD_OBJECT(JSON_BUILD_PAIR("data", JSON_BUILD_BASE64(signature, signature_size)),
JSON_BUILD_PAIR("key", JSON_BUILD_STRING(key)))));
if (r < 0)
return r;
v = json_variant_ref(ur->json);
r = json_variant_set_field(&v, "signature", encoded);
r = json_variant_set_fieldb(
&v,
"signature",
JSON_BUILD_ARRAY(
JSON_BUILD_OBJECT(JSON_BUILD_PAIR("data", JSON_BUILD_BASE64(signature, signature_size)),
JSON_BUILD_PAIR("key", JSON_BUILD_STRING(key)))));
if (r < 0)
return r;
+14
View File
@@ -1958,6 +1958,20 @@ int json_variant_set_field(JsonVariant **v, const char *field, JsonVariant *valu
return 1;
}
int json_variant_set_fieldb(JsonVariant **v, const char *field, ...) {
_cleanup_(json_variant_unrefp) JsonVariant *w = NULL;
va_list ap;
int r;
va_start(ap, field);
r = json_buildv(&w, ap);
va_end(ap);
if (r < 0)
return r;
return json_variant_set_field(v, field, w);
}
int json_variant_set_field_string(JsonVariant **v, const char *field, const char *value) {
_cleanup_(json_variant_unrefp) JsonVariant *m = NULL;
int r;
+1
View File
@@ -204,6 +204,7 @@ int json_variant_dump(JsonVariant *v, JsonFormatFlags flags, FILE *f, const char
int json_variant_filter(JsonVariant **v, char **to_remove);
int json_variant_set_field(JsonVariant **v, const char *field, JsonVariant *value);
int json_variant_set_fieldb(JsonVariant **v, const char *field, ...);
int json_variant_set_field_string(JsonVariant **v, const char *field, const char *value);
int json_variant_set_field_integer(JsonVariant **v, const char *field, int64_t value);
int json_variant_set_field_unsigned(JsonVariant **v, const char *field, uint64_t value);