X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fdbus-target.c;h=c109d9accb6c293379f180d2b9ebe1527c5018ae;hp=45f0d31f05de9efe4a4ec13cb32d35a1b67fb2cc;hb=95978cf8a66b0d03271f7da2399a3b588db0c71d;hpb=4288f619215e3dda0b75113d78e4fb7ba219ed58 diff --git a/src/dbus-target.c b/src/dbus-target.c index 45f0d31f0..c109d9acc 100644 --- a/src/dbus-target.c +++ b/src/dbus-target.c @@ -19,11 +19,14 @@ along with systemd; If not, see . ***/ +#include + #include "dbus-unit.h" #include "dbus-target.h" #define BUS_TARGET_INTERFACE \ " \n" \ + " \n" \ " \n" #define INTROSPECTION \ @@ -37,11 +40,33 @@ const char bus_target_interface[] = BUS_TARGET_INTERFACE; -DBusHandlerResult bus_target_message_handler(Unit *u, DBusMessage *message) { +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 } }; - return bus_default_message_handler(u->meta.manager, message, INTROSPECTION, properties); + return bus_default_message_handler(u->meta.manager, c, message, INTROSPECTION, properties); }