if (r < 0)
return log_error_errno(r, "Failed to allocate new perMachine array: %m");
- sd_json_variant_unref(per_machine);
- per_machine = TAKE_PTR(npm);
+ json_variant_unref_and_replace(per_machine, npm);
} else {
_cleanup_(sd_json_variant_unrefp) sd_json_variant *positive = sd_json_variant_ref(arg_identity_extra_this_machine),
*negative = sd_json_variant_ref(arg_identity_extra_other_machines);
}
}
- sd_json_variant_unref(*_v);
- *_v = TAKE_PTR(v);
-
- return 0;
+ return json_variant_unref_and_replace(*_v, v);
}
static int add_disposition(sd_json_variant **v) {
if (r < 0)
return r;
- sd_json_variant_unref(new_binding_entry);
- new_binding_entry = TAKE_PTR(be);
+ json_variant_unref_and_replace(new_binding_entry, be);
}
}
}
h->last_change_usec = n;
-
- sd_json_variant_unref(h->json);
- h->json = TAKE_PTR(v);
-
h->mask |= USER_RECORD_REGULAR;
- return 0;
+ return json_variant_unref_and_replace(h->json, v);
}
int user_record_make_hashed_password(UserRecord *h, char **secret, bool extend) {
SET_FLAG(h->mask, USER_RECORD_PER_MACHINE, !sd_json_variant_is_blank_array(array));
}
- sd_json_variant_unref(h->json);
- h->json = TAKE_PTR(w);
-
h->password_change_now = b;
-
- return 0;
+ return json_variant_unref_and_replace(h->json, w);
}
int user_record_merge_secret(UserRecord *h, UserRecord *secret) {
if (r < 0)
return r;
- sd_json_variant_unref(h->json);
- h->json = TAKE_PTR(v);
-
h->good_authentication_counter = counter;
h->last_good_authentication_usec = usec;
-
h->mask |= USER_RECORD_STATUS;
- return 0;
+ return json_variant_unref_and_replace(h->json, v);
}
int user_record_bad_authentication(UserRecord *h) {
if (r < 0)
return r;
- sd_json_variant_unref(h->json);
- h->json = TAKE_PTR(v);
-
h->bad_authentication_counter = counter;
h->last_bad_authentication_usec = usec;
-
h->mask |= USER_RECORD_STATUS;
- return 0;
+ return json_variant_unref_and_replace(h->json, v);
}
int user_record_ratelimit(UserRecord *h) {
if (r < 0)
return r;
- sd_json_variant_unref(h->json);
- h->json = TAKE_PTR(v);
-
h->ratelimit_begin_usec = new_ratelimit_begin_usec;
h->ratelimit_count = new_ratelimit_count;
-
h->mask |= USER_RECORD_STATUS;
+ json_variant_unref_and_replace(h->json, v);
return 1;
}
#include "sd-forward.h"
#include "string-util.h" /* IWYU pragma: keep */
-#define JSON_VARIANT_REPLACE(v, q) \
- do { \
- typeof(v)* _v = &(v); \
- typeof(q) _q = (q); \
+#define JSON_VARIANT_REPLACE(v, q) \
+ do { \
+ typeof(v)* _v = &(v); \
+ typeof(q) _q = (q); \
sd_json_variant_unref(*_v); \
- *_v = _q; \
+ *_v = _q; \
} while(false)
+#define json_variant_unref_and_replace(a, b) \
+ free_and_replace_full(a, b, sd_json_variant_unref)
+
static inline int json_variant_set_field_non_null(sd_json_variant **v, const char *field, sd_json_variant *value) {
return value && !sd_json_variant_is_null(value) ? sd_json_variant_set_field(v, field, value) : 0;
}
return r;
json_variant_propagate_sensitive(*v, w);
- JSON_VARIANT_REPLACE(*v, TAKE_PTR(w));
+ json_variant_unref_and_replace(*v, w);
return (int) n;
}
return r;
json_variant_propagate_sensitive(*v, w);
- JSON_VARIANT_REPLACE(*v, TAKE_PTR(w));
+ json_variant_unref_and_replace(*v, w);
return 1;
}
json_variant_propagate_sensitive(*v, w);
json_variant_propagate_sensitive(m, w);
- JSON_VARIANT_REPLACE(*v, TAKE_PTR(w));
+ json_variant_unref_and_replace(*v, w);
return 1;
}
}
json_variant_propagate_sensitive(*v, nv);
- JSON_VARIANT_REPLACE(*v, TAKE_PTR(nv));
-
- return 0;
+ return json_variant_unref_and_replace(*v, nv);
}
_public_ int sd_json_variant_append_arrayb(sd_json_variant **v, ...) {
w->line = line;
w->column = column;
- JSON_VARIANT_REPLACE(*v, w);
+ json_variant_unref_and_replace(*v, w);
return 1;
}
if (!n->sorted) /* Check if this worked. This will fail if there are multiple identical keys used. */
return -ENOTUNIQ;
- JSON_VARIANT_REPLACE(*v, TAKE_PTR(n));
+ json_variant_unref_and_replace(*v, n);
return 1;
}
goto finish;
}
- JSON_VARIANT_REPLACE(*v, TAKE_PTR(n));
+ json_variant_unref_and_replace(*v, n);
r = 1;
assert_se(r >= 0);
- sd_json_variant_unref(v);
- v = TAKE_PTR(w);
+ json_variant_unref_and_replace(v, w);
}
sd_json_variant_dump(v, 0, stdout, NULL);
r = sd_json_variant_new_object(&empty, NULL, 0);
if (r < 0)
return r;
- /* sd_json_variant_unref() is a NOP if *v is NULL */
- sd_json_variant_unref(*v);
- *v = TAKE_PTR(empty);
- return 0;
+ return json_variant_unref_and_replace(*v, empty);
}
/* Ensure we have an object */
return r;
}
- JSON_VARIANT_REPLACE(*configuration, TAKE_PTR(v));
- return 0;
+ return json_variant_unref_and_replace(*configuration, v);
}
static int status_json_filter_fields(sd_json_variant **configuration, StatusMode mode) {
return r;
}
- JSON_VARIANT_REPLACE(*configuration, TAKE_PTR(v));
- return 0;
+ return json_variant_unref_and_replace(*configuration, v);
}
static int format_dns_server_one(DNSConfiguration *configuration, DNSServer *s, char **ret) {
if (sd_json_variant_equal(configuration, m->dns_configuration_json))
return 0;
- JSON_VARIANT_REPLACE(m->dns_configuration_json, TAKE_PTR(configuration));
+ json_variant_unref_and_replace(m->dns_configuration_json, configuration);
r = varlink_many_notify(m->varlink_dns_configuration_subscription, m->dns_configuration_json);
if (r < 0)
return r;
}
- JSON_VARIANT_REPLACE(*target, TAKE_PTR(v));
- return 0;
+ return json_variant_unref_and_replace(*target, v);
}
static int remove_self_modifiable_json_fields(UserRecord *current, UserRecord *h, sd_json_variant **ret) {
return r;
}
- JSON_VARIANT_REPLACE(*ret, TAKE_PTR(v));
- return 0;
+ return json_variant_unref_and_replace(*ret, v);
}
int user_record_self_changes_allowed(UserRecord *current, UserRecord *incoming) {