log_debug_errno(r, "json_variant_filter: %d/%m", r);
/* I assume we can merge v with itself… */
- r = json_variant_merge(&v, v);
+ r = json_variant_merge_object(&v, v);
log_debug_errno(r, "json_variant_merge: %d/%m", r);
r = json_variant_append_array(&v, v);
if (r < 0)
return log_error_errno(r, "Failed to filter identity: %m");
- r = json_variant_merge(&v, arg_identity_extra);
+ r = json_variant_merge_object(&v, arg_identity_extra);
if (r < 0)
return log_error_errno(r, "Failed to merge identities: %m");
if (!json_variant_equal(u, mmid))
continue;
- r = json_variant_merge(&add, z);
+ r = json_variant_merge_object(&add, z);
if (r < 0)
return log_error_errno(r, "Failed to merge perMachine entry: %m");
if (r < 0)
return log_error_errno(r, "Failed to filter perMachine: %m");
- r = json_variant_merge(&add, arg_identity_extra_this_machine);
+ r = json_variant_merge_object(&add, arg_identity_extra_this_machine);
if (r < 0)
return log_error_errno(r, "Failed to merge in perMachine fields: %m");
if (r < 0)
return log_error_errno(r, "Failed to filter resource limits: %m");
- r = json_variant_merge(&rlv, arg_identity_extra_rlimits);
+ r = json_variant_merge_object(&rlv, arg_identity_extra_rlimits);
if (r < 0)
return log_error_errno(r, "Failed to set resource limits: %m");
if (r < 0)
return log_error_errno(r, "Failed to filter identity (privileged part): %m");
- r = json_variant_merge(&privileged, arg_identity_extra_privileged);
+ r = json_variant_merge_object(&privileged, arg_identity_extra_privileged);
if (r < 0)
return log_error_errno(r, "Failed to merge identities (privileged part): %m");
if (r < 0)
return r;
- r = json_variant_merge(&m, status);
+ r = json_variant_merge_object(&m, status);
if (r < 0)
return r;
/* Merge the new entry with an old one, if that exists */
be = json_variant_ref(json_variant_by_key(binding, SD_ID128_TO_STRING(mid)));
if (be) {
- r = json_variant_merge(&be, new_binding_entry);
+ r = json_variant_merge_object(&be, new_binding_entry);
if (r < 0)
return r;
assert(v);
assert(name);
- return json_append(v, JSON_BUILD_OBJECT(JSON_BUILD_PAIR_VARIANT_NON_NULL(name, w)));
+ return json_variant_merge_objectb(v, JSON_BUILD_OBJECT(JSON_BUILD_PAIR_VARIANT_NON_NULL(name, w)));
}
static int address_build_json(Address *address, JsonVariant **ret) {
if (!network)
return 0;
- return json_append(v, JSON_BUILD_OBJECT(
+ return json_variant_merge_objectb(
+ v, JSON_BUILD_OBJECT(
JSON_BUILD_PAIR_STRING("NetworkFile", network->filename),
JSON_BUILD_PAIR_STRV("NetworkFileDropins", network->dropins),
JSON_BUILD_PAIR_BOOLEAN("RequiredForOnline", network->required_for_online),
if (sd_device_get_property_value(device, "ID_MODEL_FROM_DATABASE", &model) < 0)
(void) sd_device_get_property_value(device, "ID_MODEL", &model);
- return json_append(v, JSON_BUILD_OBJECT(
+ return json_variant_merge_objectb(
+ v,
+ JSON_BUILD_OBJECT(
JSON_BUILD_PAIR_STRING_NON_EMPTY("LinkFile", link),
JSON_BUILD_PAIR_STRV_NON_EMPTY("LinkFileDropins", link_dropins),
JSON_BUILD_PAIR_STRING_NON_EMPTY("Path", path),
if (r <= 0)
return r;
- return json_append(v, JSON_BUILD_OBJECT(JSON_BUILD_PAIR_STRING("CaptivePortal", captive_portal)));
+ return json_variant_merge_objectb(v, JSON_BUILD_OBJECT(JSON_BUILD_PAIR_STRING("CaptivePortal", captive_portal)));
}
static int dhcp_server_offered_leases_append_json(Link *link, JsonVariant **v) {
return log_oom();
}
- r = json_append(&v, JSON_BUILD_OBJECT(
+ r = json_variant_merge_objectb(
+ &v, JSON_BUILD_OBJECT(
JSON_BUILD_PAIR("type", JSON_BUILD_STRING(boot_entry_type_json_to_string(e->type))),
JSON_BUILD_PAIR_CONDITION(e->id, "id", JSON_BUILD_STRING(e->id)),
JSON_BUILD_PAIR_CONDITION(e->path, "path", JSON_BUILD_STRING(e->path)),
/* Sanitizers (only memory sanitizer?) do not like function call with too many
* arguments and trigger false positive warnings. Let's not add too many json objects
* at once. */
- r = json_append(&v, JSON_BUILD_OBJECT(
+ r = json_variant_merge_objectb(
+ &v, JSON_BUILD_OBJECT(
JSON_BUILD_PAIR("isReported", JSON_BUILD_BOOLEAN(e->reported_by_loader)),
JSON_BUILD_PAIR_CONDITION(e->tries_left != UINT_MAX, "triesLeft", JSON_BUILD_UNSIGNED(e->tries_left)),
JSON_BUILD_PAIR_CONDITION(e->tries_done != UINT_MAX, "triesDone", JSON_BUILD_UNSIGNED(e->tries_done)),
/* If we have a build-id, merge it in the same JSON object so that it appears all
* nicely together in the logs/metadata. */
if (id_json) {
- r = json_variant_merge(&v, id_json);
+ r = json_variant_merge_object(&v, id_json);
if (r < 0)
return log_error_errno(r, "json_variant_merge of package meta with buildId failed: %m");
}
if (r < 0)
return log_error_errno(r, "Failed to build JSON object: %m");
- r = json_variant_merge(c->package_metadata, w);
+ r = json_variant_merge_object(c->package_metadata, w);
if (r < 0)
return log_error_errno(r, "json_variant_merge of package meta with buildId failed: %m");
if (r < 0)
return log_warning_errno(r, "Failed to build JSON object: %m");
- r = json_variant_merge(&elf_metadata, json_architecture);
+ r = json_variant_merge_object(&elf_metadata, json_architecture);
if (r < 0)
return log_warning_errno(r, "Failed to merge JSON objects: %m");
#endif
/* We always at least have the ELF type, so merge that (and possibly the arch). */
- r = json_variant_merge(&elf_metadata, package_metadata);
+ r = json_variant_merge_object(&elf_metadata, package_metadata);
if (r < 0)
return log_warning_errno(r, "Failed to merge JSON objects: %m");
return json_variant_set_field(v, field, m);
}
-int json_variant_merge(JsonVariant **v, JsonVariant *m) {
+int json_variant_merge_object(JsonVariant **v, JsonVariant *m) {
_cleanup_(json_variant_unrefp) JsonVariant *w = NULL;
_cleanup_free_ JsonVariant **array = NULL;
size_t v_elements, m_elements, k;
return 1;
}
+int json_variant_merge_objectb(JsonVariant **v, ...) {
+ _cleanup_(json_variant_unrefp) JsonVariant *w = NULL;
+ va_list ap;
+ int r;
+
+ va_start(ap, v);
+ r = json_buildv(&w, ap);
+ va_end(ap);
+ if (r < 0)
+ return r;
+
+ return json_variant_merge_object(v, w);
+}
+
int json_variant_append_array(JsonVariant **v, JsonVariant *element) {
_cleanup_(json_variant_unrefp) JsonVariant *nv = NULL;
bool blank;
return r;
}
-int json_appendv(JsonVariant **v, va_list ap) {
- _cleanup_(json_variant_unrefp) JsonVariant *w = NULL;
- int r;
-
- assert(v);
-
- r = json_buildv(&w, ap);
- if (r < 0)
- return r;
-
- return json_variant_merge(v, w);
-}
-
-int json_append(JsonVariant **v, ...) {
- va_list ap;
- int r;
-
- va_start(ap, v);
- r = json_appendv(v, ap);
- va_end(ap);
-
- return r;
-}
-
int json_log_internal(
JsonVariant *variant,
int level,
int json_variant_append_arrayb(JsonVariant **v, ...);
int json_variant_append_array_nodup(JsonVariant **v, JsonVariant *element);
-int json_variant_merge(JsonVariant **v, JsonVariant *m);
+int json_variant_merge_object(JsonVariant **v, JsonVariant *m);
+int json_variant_merge_objectb(JsonVariant **v, ...);
int json_variant_strv(JsonVariant *v, char ***ret);
int json_build(JsonVariant **ret, ...);
int json_buildv(JsonVariant **ret, va_list ap);
- /* These two functions below are equivalent to json_build() (or json_buildv()) and json_variant_merge(). */
-int json_append(JsonVariant **v, ...);
-int json_appendv(JsonVariant **v, va_list ap);
/* A bitmask of flags used by the dispatch logic. Note that this is a combined bit mask, that is generated from the bit
* mask originally passed into json_dispatch(), the individual bitmask associated with the static JsonDispatch callout
else if (r < 0)
return r;
else {
- r = json_variant_merge(&v, privileged_v);
+ r = json_variant_merge_object(&v, privileged_v);
if (r < 0)
return r;
else if (r < 0)
return r;
else {
- r = json_variant_merge(&v, privileged_v);
+ r = json_variant_merge_object(&v, privileged_v);
if (r < 0)
return r;
test_variant_one("[ 0, -0, 0.0, -0.0, 0.000, -0.000, 0e0, -0e0, 0e+0, -0e-0, 0e-0, -0e000, 0e+000 ]", test_zeroes);
}
-TEST(json_append) {
+TEST(json_variant_merge_objectb) {
_cleanup_(json_variant_unrefp) JsonVariant *v = NULL, *w = NULL;
assert_se(json_build(&v, JSON_BUILD_OBJECT(
JSON_BUILD_PAIR("c", JSON_BUILD_CONST_STRING("y")),
JSON_BUILD_PAIR("a", JSON_BUILD_CONST_STRING("z")))) >= 0);
- assert_se(json_append(&w, JSON_BUILD_OBJECT(JSON_BUILD_PAIR("b", JSON_BUILD_STRING("x")))) >= 0);
- assert_se(json_append(&w, JSON_BUILD_OBJECT(JSON_BUILD_PAIR("c", JSON_BUILD_STRING("y")))) >= 0);
- assert_se(json_append(&w, JSON_BUILD_OBJECT(JSON_BUILD_PAIR("a", JSON_BUILD_STRING("z")))) >= 0);
+ assert_se(json_variant_merge_objectb(&w, JSON_BUILD_OBJECT(JSON_BUILD_PAIR("b", JSON_BUILD_STRING("x")))) >= 0);
+ assert_se(json_variant_merge_objectb(&w, JSON_BUILD_OBJECT(JSON_BUILD_PAIR("c", JSON_BUILD_STRING("y")))) >= 0);
+ assert_se(json_variant_merge_objectb(&w, JSON_BUILD_OBJECT(JSON_BUILD_PAIR("a", JSON_BUILD_STRING("z")))) >= 0);
assert_se(json_variant_equal(v, w));
}