]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
bootctl: split out varlink setup into a helper call of its own
authorLennart Poettering <lennart@poettering.net>
Sat, 30 Aug 2025 20:50:59 +0000 (22:50 +0200)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 19 Sep 2025 15:47:46 +0000 (00:47 +0900)
src/bootctl/bootctl.c

index 86a51f8f410b0bb9030e1f856185f09916ebdc86..1341036cede60858951f8cbaea46ea4b215c2962 100644 (file)
@@ -697,6 +697,38 @@ static int bootctl_main(int argc, char *argv[]) {
         return dispatch_verb(argc, argv, verbs, NULL);
 }
 
+static int vl_server(void) {
+        _cleanup_(sd_varlink_server_unrefp) sd_varlink_server *varlink_server = NULL;
+        int r;
+
+        /* Invocation as Varlink service */
+
+        r = varlink_server_new(
+                        &varlink_server,
+                        SD_VARLINK_SERVER_ROOT_ONLY,
+                        /* userdata= */ NULL);
+        if (r < 0)
+                return log_error_errno(r, "Failed to allocate Varlink server: %m");
+
+        r = sd_varlink_server_add_interface(varlink_server, &vl_interface_io_systemd_BootControl);
+        if (r < 0)
+                return log_error_errno(r, "Failed to add Varlink interface: %m");
+
+        r = sd_varlink_server_bind_method_many(
+                        varlink_server,
+                        "io.systemd.BootControl.ListBootEntries",     vl_method_list_boot_entries,
+                        "io.systemd.BootControl.SetRebootToFirmware", vl_method_set_reboot_to_firmware,
+                        "io.systemd.BootControl.GetRebootToFirmware", vl_method_get_reboot_to_firmware);
+        if (r < 0)
+                return log_error_errno(r, "Failed to bind Varlink methods: %m");
+
+        r = sd_varlink_server_loop_auto(varlink_server);
+        if (r < 0)
+                return log_error_errno(r, "Failed to run Varlink event loop: %m");
+
+        return 0;
+}
+
 static int run(int argc, char *argv[]) {
         _cleanup_(loop_device_unrefp) LoopDevice *loop_device = NULL;
         _cleanup_(umount_and_freep) char *mounted_dir = NULL;
@@ -708,33 +740,8 @@ static int run(int argc, char *argv[]) {
         if (r <= 0)
                 return r;
 
-        if (arg_varlink) {
-                _cleanup_(sd_varlink_server_unrefp) sd_varlink_server *varlink_server = NULL;
-
-                /* Invocation as Varlink service */
-
-                r = varlink_server_new(&varlink_server, SD_VARLINK_SERVER_ROOT_ONLY, NULL);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to allocate Varlink server: %m");
-
-                r = sd_varlink_server_add_interface(varlink_server, &vl_interface_io_systemd_BootControl);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to add Varlink interface: %m");
-
-                r = sd_varlink_server_bind_method_many(
-                                varlink_server,
-                                "io.systemd.BootControl.ListBootEntries",     vl_method_list_boot_entries,
-                                "io.systemd.BootControl.SetRebootToFirmware", vl_method_set_reboot_to_firmware,
-                                "io.systemd.BootControl.GetRebootToFirmware", vl_method_get_reboot_to_firmware);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to bind Varlink methods: %m");
-
-                r = sd_varlink_server_loop_auto(varlink_server);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to run Varlink event loop: %m");
-
-                return EXIT_SUCCESS;
-        }
+        if (arg_varlink)
+                return vl_server();
 
         if (arg_print_root_device > 0) {
                 _cleanup_free_ char *path = NULL;