mirror of
https://github.com/systemd/systemd
synced 2024-09-06 00:41:36 +00:00
busctl: use json_variant_append_array()
This commit is contained in:
parent
d89457a145
commit
684bce3d54
|
@ -1671,15 +1671,26 @@ static int message_append_cmdline(sd_bus_message *m, const char *signature, char
|
|||
|
||||
static int json_transform_one(sd_bus_message *m, JsonVariant **ret);
|
||||
|
||||
static int json_transform_array_or_struct(sd_bus_message *m, JsonVariant **ret) {
|
||||
JsonVariant **elements = NULL;
|
||||
size_t n_elements = 0;
|
||||
static int json_transform_and_append(sd_bus_message *m, JsonVariant **ret) {
|
||||
_cleanup_(json_variant_unrefp) JsonVariant *element = NULL;
|
||||
int r;
|
||||
|
||||
assert(m);
|
||||
assert(ret);
|
||||
|
||||
CLEANUP_ARRAY(elements, n_elements, json_variant_unref_many);
|
||||
r = json_transform_one(m, &element);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
return json_variant_append_array(ret, element);
|
||||
}
|
||||
|
||||
static int json_transform_array_or_struct(sd_bus_message *m, JsonVariant **ret) {
|
||||
_cleanup_(json_variant_unrefp) JsonVariant *array = NULL;
|
||||
int r;
|
||||
|
||||
assert(m);
|
||||
assert(ret);
|
||||
|
||||
for (;;) {
|
||||
r = sd_bus_message_at_end(m, false);
|
||||
|
@ -1688,17 +1699,16 @@ static int json_transform_array_or_struct(sd_bus_message *m, JsonVariant **ret)
|
|||
if (r > 0)
|
||||
break;
|
||||
|
||||
if (!GREEDY_REALLOC(elements, n_elements + 1))
|
||||
return log_oom();
|
||||
|
||||
r = json_transform_one(m, elements + n_elements);
|
||||
r = json_transform_and_append(m, &array);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
n_elements++;
|
||||
}
|
||||
|
||||
return json_variant_new_array(ret, elements, n_elements);
|
||||
if (!array)
|
||||
return json_variant_new_array(ret, NULL, 0);
|
||||
|
||||
*ret = TAKE_PTR(array);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int json_transform_variant(sd_bus_message *m, const char *contents, JsonVariant **ret) {
|
||||
|
@ -1722,15 +1732,12 @@ static int json_transform_variant(sd_bus_message *m, const char *contents, JsonV
|
|||
}
|
||||
|
||||
static int json_transform_dict_array(sd_bus_message *m, JsonVariant **ret) {
|
||||
JsonVariant **elements = NULL;
|
||||
size_t n_elements = 0;
|
||||
_cleanup_(json_variant_unrefp) JsonVariant *array = NULL;
|
||||
int r;
|
||||
|
||||
assert(m);
|
||||
assert(ret);
|
||||
|
||||
CLEANUP_ARRAY(elements, n_elements, json_variant_unref_many);
|
||||
|
||||
for (;;) {
|
||||
const char *contents;
|
||||
char type;
|
||||
|
@ -1747,31 +1754,28 @@ static int json_transform_dict_array(sd_bus_message *m, JsonVariant **ret) {
|
|||
|
||||
assert(type == 'e');
|
||||
|
||||
if (!GREEDY_REALLOC(elements, n_elements + 2))
|
||||
return log_oom();
|
||||
|
||||
r = sd_bus_message_enter_container(m, type, contents);
|
||||
if (r < 0)
|
||||
return bus_log_parse_error(r);
|
||||
|
||||
r = json_transform_one(m, elements + n_elements);
|
||||
r = json_transform_and_append(m, &array);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
n_elements++;
|
||||
|
||||
r = json_transform_one(m, elements + n_elements);
|
||||
r = json_transform_and_append(m, &array);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
n_elements++;
|
||||
|
||||
r = sd_bus_message_exit_container(m);
|
||||
if (r < 0)
|
||||
return bus_log_parse_error(r);
|
||||
}
|
||||
|
||||
return json_variant_new_object(ret, elements, n_elements);
|
||||
if (!array)
|
||||
return json_variant_new_array(ret, NULL, 0);
|
||||
|
||||
*ret = TAKE_PTR(array);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int json_transform_one(sd_bus_message *m, JsonVariant **ret) {
|
||||
|
|
Loading…
Reference in a new issue