diff options
author | Luca Boccassi <luca.boccassi@microsoft.com> | 2022-01-24 17:42:32 +0000 |
---|---|---|
committer | Yu Watanabe <watanabe.yu+github@gmail.com> | 2022-01-25 06:44:27 +0900 |
commit | 0017415cc5f2b97e0f9812cb10984c364d4e03bc (patch) | |
tree | 44255fcca46106648ce515269f765e05310fd4ec /src/portable/portablectl.c | |
parent | 9697662915e47a4797b05003cb1970fe2b01e530 (diff) | |
download | systemd-0017415cc5f2b97e0f9812cb10984c364d4e03bc.tar.gz |
portable: add GetImageStateWithExtensions method
Allow to correctly query a layered portable service for
attached/detached state.
Diffstat (limited to 'src/portable/portablectl.c')
-rw-r--r-- | src/portable/portablectl.c | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/src/portable/portablectl.c b/src/portable/portablectl.c index 60feac6f5d..27883eb867 100644 --- a/src/portable/portablectl.c +++ b/src/portable/portablectl.c @@ -1034,11 +1034,11 @@ static int set_limit(int argc, char *argv[], void *userdata) { } static int is_image_attached(int argc, char *argv[], void *userdata) { - _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL; + _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL, *reply = NULL; _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL; _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL; _cleanup_free_ char *image = NULL; - const char *state; + const char *state, *method; int r; r = determine_image(argv[1], true, &image); @@ -1049,9 +1049,29 @@ static int is_image_attached(int argc, char *argv[], void *userdata) { if (r < 0) return r; - r = bus_call_method(bus, bus_portable_mgr, "GetImageState", &error, &reply, "s", image); + method = strv_isempty(arg_extension_images) ? "GetImageState" : "GetImageStateWithExtensions"; + + r = bus_message_new_method_call(bus, &m, bus_portable_mgr, method); + if (r < 0) + return bus_log_create_error(r); + + r = sd_bus_message_append(m, "s", image); + if (r < 0) + return bus_log_create_error(r); + + r = attach_extensions_to_message(m, arg_extension_images); + if (r < 0) + return r; + + if (!strv_isempty(arg_extension_images)) { + r = sd_bus_message_append(m, "t", 0); + if (r < 0) + return bus_log_create_error(r); + } + + r = sd_bus_call(bus, m, 0, &error, &reply); if (r < 0) - return log_error_errno(r, "Failed to get image state: %s", bus_error_message(&error, r)); + return log_error_errno(r, "%s failed: %s", method, bus_error_message(&error, r)); r = sd_bus_message_read(reply, "s", &state); if (r < 0) |