]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
manager: Introduce manager_get_progress() helper
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Thu, 19 Oct 2023 14:49:08 +0000 (16:49 +0200)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Fri, 20 Oct 2023 12:09:32 +0000 (14:09 +0200)
src/core/dbus-manager.c
src/core/manager.c
src/core/manager.h

index 9917419096b43de136be88593cb9866fc90add7f..745f5cc17c6ffbe7136a79134361873377e09673 100644 (file)
@@ -67,6 +67,7 @@ static BUS_DEFINE_PROPERTY_GET(property_get_default_timeout_abort_usec, "t", Man
 static BUS_DEFINE_PROPERTY_GET_GLOBAL(property_get_watchdog_device, "s", watchdog_get_device());
 static BUS_DEFINE_PROPERTY_GET_GLOBAL(property_get_watchdog_last_ping_realtime, "t", watchdog_get_last_ping(CLOCK_REALTIME));
 static BUS_DEFINE_PROPERTY_GET_GLOBAL(property_get_watchdog_last_ping_monotonic, "t", watchdog_get_last_ping(CLOCK_MONOTONIC));
+static BUS_DEFINE_PROPERTY_GET(property_get_progress, "d", Manager, manager_get_progress);
 
 static int property_get_virtualization(
                 sd_bus *bus,
@@ -207,29 +208,6 @@ static int property_set_log_level(
         return 0;
 }
 
-static int property_get_progress(
-                sd_bus *bus,
-                const char *path,
-                const char *interface,
-                const char *property,
-                sd_bus_message *reply,
-                void *userdata,
-                sd_bus_error *error) {
-
-        Manager *m = ASSERT_PTR(userdata);
-        double d;
-
-        assert(bus);
-        assert(reply);
-
-        if (MANAGER_IS_FINISHED(m))
-                d = 1.0;
-        else
-                d = 1.0 - ((double) hashmap_size(m->jobs) / (double) m->n_installed_jobs);
-
-        return sd_bus_message_append(reply, "d", d);
-}
-
 static int property_get_environment(
                 sd_bus *bus,
                 const char *path,
index 935e65595640e735b8392a490768e6416da0d992..a9cfe9a7fd8099ead66ce24f0670add6030fe880 100644 (file)
@@ -866,6 +866,15 @@ void manager_set_switching_root(Manager *m, bool switching_root) {
         m->switching_root = MANAGER_IS_SYSTEM(m) && switching_root;
 }
 
+double manager_get_progress(Manager *m) {
+        assert(m);
+
+        if (MANAGER_IS_FINISHED(m) || m->n_installed_jobs == 0)
+                return 1.0;
+
+        return 1.0 - ((double) hashmap_size(m->jobs) / (double) m->n_installed_jobs);
+}
+
 static int compare_job_priority(const void *a, const void *b) {
         const Job *x = a, *y = b;
 
index 3b3920078e6da37fd9792bfa905a9763ebbb60a8..d96eb7b995febec3f938f7681f1a2572e99bd2ae 100644 (file)
@@ -592,6 +592,8 @@ void manager_override_show_status(Manager *m, ShowStatus mode, const char *reaso
 void manager_set_first_boot(Manager *m, bool b);
 void manager_set_switching_root(Manager *m, bool switching_root);
 
+double manager_get_progress(Manager *m);
+
 void manager_status_printf(Manager *m, StatusType type, const char *status, const char *format, ...) _printf_(4,5);
 
 Set *manager_get_units_requiring_mounts_for(Manager *m, const char *path);