mirror of
https://github.com/morgan9e/systemd
synced 2026-04-15 17:06:39 +09:00
json: add json_dispatch_variant_noref() helper
This is identical to json_dispatch_variant() but doesn't increase the ref counter of the variant. This is useful for taking JSON objects apart locally without the intention to keep any component pinned for longer than the local stack frame.
This commit is contained in:
@@ -4642,10 +4642,20 @@ int json_dispatch_variant(const char *name, JsonVariant *variant, JsonDispatchFl
|
||||
JsonVariant **p = ASSERT_PTR(userdata);
|
||||
assert(variant);
|
||||
|
||||
/* Takes a reference */
|
||||
JSON_VARIANT_REPLACE(*p, json_variant_ref(variant));
|
||||
return 0;
|
||||
}
|
||||
|
||||
int json_dispatch_variant_noref(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
|
||||
JsonVariant **p = ASSERT_PTR(userdata);
|
||||
assert(variant);
|
||||
|
||||
/* Doesn't take a reference */
|
||||
*p = variant;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int json_dispatch_uid_gid(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
|
||||
uid_t *uid = userdata;
|
||||
uint64_t k;
|
||||
|
||||
@@ -387,6 +387,7 @@ int json_dispatch_strv(const char *name, JsonVariant *variant, JsonDispatchFlags
|
||||
int json_dispatch_boolean(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata);
|
||||
int json_dispatch_tristate(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata);
|
||||
int json_dispatch_variant(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata);
|
||||
int json_dispatch_variant_noref(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata);
|
||||
int json_dispatch_int64(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata);
|
||||
int json_dispatch_uint64(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata);
|
||||
int json_dispatch_uint32(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata);
|
||||
|
||||
Reference in New Issue
Block a user