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=be984b9bb47faada58fff0bf7bc5ae02b21e368d;hb=95978cf8a66b0d03271f7da2399a3b588db0c71d;hpb=e99e38bbdcca3fe5956823bdb3d38544ccf93221 diff --git a/src/dbus-target.c b/src/dbus-target.c index be984b9bb..c109d9acc 100644 --- a/src/dbus-target.c +++ b/src/dbus-target.c @@ -19,24 +19,54 @@ along with systemd; If not, see . ***/ +#include + #include "dbus-unit.h" #include "dbus-target.h" -static const char introspection[] = - DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE - "" - BUS_UNIT_INTERFACE - BUS_PROPERTIES_INTERFACE - " " - " " - BUS_INTROSPECTABLE_INTERFACE - ""; - -DBusHandlerResult bus_target_message_handler(Unit *u, DBusMessage *message) { +#define BUS_TARGET_INTERFACE \ + " \n" \ + " \n" \ + " \n" + +#define INTROSPECTION \ + DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE \ + "\n" \ + BUS_UNIT_INTERFACE \ + BUS_TARGET_INTERFACE \ + BUS_PROPERTIES_INTERFACE \ + BUS_INTROSPECTABLE_INTERFACE \ + "\n" + +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 } }; - return bus_default_message_handler(u->meta.manager, message, introspection, properties); + return bus_default_message_handler(u->meta.manager, c, message, INTROSPECTION, properties); }