From 8c0464b7b954e11f4733b1383eb917e80d3e6237 Mon Sep 17 00:00:00 2001 From: Ivan Kruglov Date: Tue, 12 May 2026 08:10:46 -0700 Subject: [PATCH] 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. --- src/core/varlink-common.c | 23 +++++++++++++++++++++++ src/core/varlink-common.h | 1 + src/core/varlink-unit.c | 23 ----------------------- 3 files changed, 24 insertions(+), 23 deletions(-) diff --git a/src/core/varlink-common.c b/src/core/varlink-common.c index 6f876db85b..f5745e12e8 100644 --- a/src/core/varlink-common.c +++ b/src/core/varlink-common.c @@ -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; +} diff --git a/src/core/varlink-common.h b/src/core/varlink-common.h index aa9f26145c..8a238c34a5 100644 --- a/src/core/varlink-common.h +++ b/src/core/varlink-common.h @@ -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); diff --git a/src/core/varlink-unit.c b/src/core/varlink-unit.c index 2e3b1dd196..e73e2d50e6 100644 --- a/src/core/varlink-unit.c +++ b/src/core/varlink-unit.c @@ -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) {