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:
+6
-9
@@ -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));
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user