chiark / gitweb /
automount: implement automount unit type
[elogind.git] / dbus-unit.c
index de5236a64e9a5ff4a1d6b8a889bfd83fe13df912..6bccec14a71fef7eee247b60cf3e81a388fe099d 100644 (file)
@@ -49,6 +49,7 @@ static const char introspection[] =
         "  <property name=\"Description\" type=\"s\" access=\"read\"/>"
         "  <property name=\"LoadState\" type=\"s\" access=\"read\"/>"
         "  <property name=\"ActiveState\" type=\"s\" access=\"read\"/>"
+        "  <property name=\"SubState\" type=\"s\" access=\"read\"/>"
         "  <property name=\"FragmentPath\" type=\"s\" access=\"read\"/>"
         "  <property name=\"ActiveEnterTimestamp\" type=\"t\" access=\"read\"/>"
         "  <property name=\"ActiveExitTimestamp\" type=\"t\" access=\"read\"/>"
@@ -60,43 +61,43 @@ static const char introspection[] =
         BUS_INTROSPECTABLE_INTERFACE
         "</node>";
 
-static int bus_unit_append_id(Manager *m, DBusMessageIter *i, const char *property, void *data) {
+static int bus_unit_append_description(Manager *m, DBusMessageIter *i, const char *property, void *data) {
         Unit *u = data;
-        const char *id;
+        const char *d;
 
         assert(m);
         assert(i);
         assert(property);
         assert(u);
 
-        id = unit_id(u);
+        d = unit_description(u);
 
-        if (!dbus_message_iter_append_basic(i, DBUS_TYPE_STRING, &id))
+        if (!dbus_message_iter_append_basic(i, DBUS_TYPE_STRING, &d))
                 return -ENOMEM;
 
         return 0;
 }
 
-static int bus_unit_append_description(Manager *m, DBusMessageIter *i, const char *property, void *data) {
+DEFINE_BUS_PROPERTY_APPEND_ENUM(bus_unit_append_load_state, unit_load_state, UnitLoadState);
+
+static int bus_unit_append_active_state(Manager *m, DBusMessageIter *i, const char *property, void *data) {
         Unit *u = data;
-        const char *d;
+        const char *state;
 
         assert(m);
         assert(i);
         assert(property);
         assert(u);
 
-        d = unit_description(u);
+        state = unit_active_state_to_string(unit_active_state(u));
 
-        if (!dbus_message_iter_append_basic(i, DBUS_TYPE_STRING, &d))
+        if (!dbus_message_iter_append_basic(i, DBUS_TYPE_STRING, &state))
                 return -ENOMEM;
 
         return 0;
 }
 
-DEFINE_BUS_PROPERTY_APPEND_ENUM(bus_unit_append_load_state, unit_load_state, UnitLoadState);
-
-static int bus_unit_append_active_state(Manager *m, DBusMessageIter *i, const char *property, void *data) {
+static int bus_unit_append_sub_state(Manager *m, DBusMessageIter *i, const char *property, void *data) {
         Unit *u = data;
         const char *state;
 
@@ -105,7 +106,7 @@ static int bus_unit_append_active_state(Manager *m, DBusMessageIter *i, const ch
         assert(property);
         assert(u);
 
-        state = unit_active_state_to_string(unit_active_state(u));
+        state = unit_sub_state_to_string(u);
 
         if (!dbus_message_iter_append_basic(i, DBUS_TYPE_STRING, &state))
                 return -ENOMEM;
@@ -198,10 +199,11 @@ static int bus_unit_append_job(Manager *m, DBusMessageIter *i, const char *prope
 static DBusHandlerResult bus_unit_message_dispatch(Unit *u, DBusMessage *message) {
 
         const BusProperty properties[] = {
-                { "org.freedesktop.systemd1.Unit", "Id",                   bus_unit_append_id,           "s",    u                               },
+                { "org.freedesktop.systemd1.Unit", "Id",                   bus_property_append_string,   "s",    u->meta.id                      },
                 { "org.freedesktop.systemd1.Unit", "Description",          bus_unit_append_description,  "s",    u                               },
                 { "org.freedesktop.systemd1.Unit", "LoadState",            bus_unit_append_load_state,   "s",    &u->meta.load_state             },
                 { "org.freedesktop.systemd1.Unit", "ActiveState",          bus_unit_append_active_state, "s",    u                               },
+                { "org.freedesktop.systemd1.Unit", "SubState",             bus_unit_append_sub_state,    "s",    u                               },
                 { "org.freedesktop.systemd1.Unit", "FragmentPath",         bus_property_append_string,   "s",    u->meta.fragment_path           },
                 { "org.freedesktop.systemd1.Unit", "ActiveEnterTimestamp", bus_property_append_uint64,   "t",    &u->meta.active_enter_timestamp },
                 { "org.freedesktop.systemd1.Unit", "ActiveExitTimestamp",  bus_property_append_uint64,   "t",    &u->meta.active_exit_timestamp  },
@@ -334,15 +336,13 @@ void bus_unit_send_change_signal(Unit *u) {
                 if (!(m = dbus_message_new_signal(p, "org.freedesktop.systemd1.Unit", "Changed")))
                         goto oom;
         } else {
-                const char *id;
                 /* Send a new signal */
 
                 if (!(m = dbus_message_new_signal("/org/freedesktop/systemd1", "org.freedesktop.systemd1", "UnitNew")))
                         goto oom;
 
-                id = unit_id(u);
                 if (!dbus_message_append_args(m,
-                                              DBUS_TYPE_STRING, &id,
+                                              DBUS_TYPE_STRING, &u->meta.id,
                                               DBUS_TYPE_OBJECT_PATH, &p,
                                               DBUS_TYPE_INVALID))
                         goto oom;
@@ -370,7 +370,6 @@ oom:
 void bus_unit_send_removed_signal(Unit *u) {
         char *p = NULL;
         DBusMessage *m = NULL;
-        const char *id;
 
         assert(u);
 
@@ -383,9 +382,8 @@ void bus_unit_send_removed_signal(Unit *u) {
         if (!(m = dbus_message_new_signal("/org/freedesktop/systemd1", "org.freedesktop.systemd1", "UnitRemoved")))
                 goto oom;
 
-        id = unit_id(u);
         if (!dbus_message_append_args(m,
-                                      DBUS_TYPE_STRING, &id,
+                                      DBUS_TYPE_STRING, &u->meta.id,
                                       DBUS_TYPE_OBJECT_PATH, &p,
                                       DBUS_TYPE_INVALID))
                 goto oom;