diff options
Diffstat (limited to 'src/dbus-target.c')
-rw-r--r-- | src/dbus-target.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/dbus-target.c b/src/dbus-target.c index fb84430b21..c109d9accb 100644 --- a/src/dbus-target.c +++ b/src/dbus-target.c @@ -19,11 +19,14 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>. ***/ +#include <errno.h> + #include "dbus-unit.h" #include "dbus-target.h" #define BUS_TARGET_INTERFACE \ " <interface name=\"org.freedesktop.systemd1.Target\">\n" \ + " <property name=\"SysVRunLevel\" type=\"s\" access=\"read\"/>\n" \ " </interface>\n" #define INTROSPECTION \ @@ -37,9 +40,31 @@ const char bus_target_interface[] = BUS_TARGET_INTERFACE; +static int bus_target_append_runlevel(Manager *n, DBusMessageIter *i, const char *property, void *data) { + Target *t = data; + const char *d; + char buf[2]; + + assert(n); + assert(i); + assert(property); + assert(t); + + buf[0] = (char) target_get_runlevel(t); + buf[1] = 0; + + d = buf; + + if (!dbus_message_iter_append_basic(i, DBUS_TYPE_STRING, &d)) + return -ENOMEM; + + return 0; +} + DBusHandlerResult bus_target_message_handler(Unit *u, DBusConnection *c, DBusMessage *message) { const BusProperty properties[] = { BUS_UNIT_PROPERTIES, + { "org.freedesktop.systemd1.Target", "SysVRunLevel", bus_target_append_runlevel, "s", u }, { NULL, NULL, NULL, NULL, NULL } }; |