shared: move exec_command_list_build_json() to varlink-common

exec_command_list_build_json() serializes a linked list of ExecCommand into a JSON array. It was static in varlink-unit.c (used by service_context_build_json) but is also needed by the upcoming socket context builder. Move it next to exec_command_build_json() in varlink-common where it can be shared.
This commit is contained in:
Ivan Kruglov
2026-05-12 08:10:55 -07:00
parent 219d894db9
commit 8c0464b7b9
3 changed files with 24 additions and 23 deletions
+23
View File
@@ -136,3 +136,26 @@ int exec_command_build_json(sd_json_variant **ret, const char *name, void *userd
SD_JSON_BUILD_PAIR_BOOLEAN("noEnvExpand", FLAGS_SET(cmd->flags, EXEC_COMMAND_NO_ENV_EXPAND)),
SD_JSON_BUILD_PAIR_BOOLEAN("viaShell", FLAGS_SET(cmd->flags, EXEC_COMMAND_VIA_SHELL)));
}
int exec_command_list_build_json(sd_json_variant **ret, const char *name, void *userdata) {
_cleanup_(sd_json_variant_unrefp) sd_json_variant *v = NULL;
ExecCommand *list = userdata;
int r;
assert(ret);
LIST_FOREACH(command, c, list) {
_cleanup_(sd_json_variant_unrefp) sd_json_variant *entry = NULL;
r = exec_command_build_json(&entry, /* name= */ NULL, c);
if (r < 0)
return r;
r = sd_json_variant_append_array(&v, entry);
if (r < 0)
return r;
}
*ret = TAKE_PTR(v);
return 0;
}
+1
View File
@@ -8,4 +8,5 @@ int rlimit_table_build_json(sd_json_variant **ret, const char *name, void *userd
int cpuset_build_json(sd_json_variant **ret, const char *name, void *userdata);
const char* varlink_error_id_from_bus_error(const sd_bus_error *e);
int exec_command_build_json(sd_json_variant **ret, const char *name, void *userdata);
int exec_command_list_build_json(sd_json_variant **ret, const char *name, void *userdata);
int varlink_reply_bus_error(sd_varlink *link, int r, const sd_bus_error *e);
-23
View File
@@ -118,29 +118,6 @@ static int unit_conditions_build_json(sd_json_variant **ret, const char *name, v
return 0;
}
static int exec_command_list_build_json(sd_json_variant **ret, const char *name, void *userdata) {
_cleanup_(sd_json_variant_unrefp) sd_json_variant *v = NULL;
ExecCommand *list = userdata;
int r;
assert(ret);
LIST_FOREACH(command, c, list) {
_cleanup_(sd_json_variant_unrefp) sd_json_variant *entry = NULL;
r = exec_command_build_json(&entry, /* name= */ NULL, c);
if (r < 0)
return r;
r = sd_json_variant_append_array(&v, entry);
if (r < 0)
return r;
}
*ret = TAKE_PTR(v);
return 0;
}
/* TODO: This covers only a small subset of a service object's properties. Extend to make more available to
* consumers like Unit.StartTransient */
static int service_context_build_json(sd_json_variant **ret, const char *name, void *userdata) {