BusPropertyCallback already has the argument. It is necesary for the callback to know what data to access. --- src/dbus-common.c | 6 +++++- src/dbus-common.h | 2 +- src/dbus-manager.c | 4 ++-- 3 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/src/dbus-common.c b/src/dbus-common.c index 2905ac3..fc97108 100644 --- a/src/dbus-common.c +++ b/src/dbus-common.c @@ -402,6 +402,7 @@ get_prop: const BusProperty *p; DBusMessageIter sub; char *sig; + void *data; if (!dbus_message_iter_init(message, &iter) || dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRING) @@ -456,7 +457,10 @@ set_prop: dbus_free(sig); - r = p->set(&sub, property); + data = (char*)bp->base + p->offset; + if (p->indirect) + data = *(void**)data; + r = p->set(&sub, property, data); if (r < 0) { if (r == -ENOMEM) goto oom; diff --git a/src/dbus-common.h b/src/dbus-common.h index 15811a7..1dc0f59 100644 --- a/src/dbus-common.h +++ b/src/dbus-common.h @@ -93,7 +93,7 @@ int bus_connect_system_polkit(DBusConnection **_bus, DBusError *error); const char *bus_error_message(const DBusError *error); typedef int (*BusPropertyCallback)(DBusMessageIter *iter, const char *property, void *data); -typedef int (*BusPropertySetCallback)(DBusMessageIter *iter, const char *property); +typedef int (*BusPropertySetCallback)(DBusMessageIter *iter, const char *property, void *data); typedef struct BusProperty { const char *property; /* name of the property */ diff --git a/src/dbus-manager.c b/src/dbus-manager.c index 6d272cb..eed8003 100644 --- a/src/dbus-manager.c +++ b/src/dbus-manager.c @@ -324,7 +324,7 @@ static int bus_manager_append_log_target(DBusMessageIter *i, const char *propert return 0; } -static int bus_manager_set_log_target(DBusMessageIter *i, const char *property) { +static int bus_manager_set_log_target(DBusMessageIter *i, const char *property, void *data) { const char *t; assert(i); @@ -349,7 +349,7 @@ static int bus_manager_append_log_level(DBusMessageIter *i, const char *property return 0; } -static int bus_manager_set_log_level(DBusMessageIter *i, const char *property) { +static int bus_manager_set_log_level(DBusMessageIter *i, const char *property, void *data) { const char *t; assert(i); -- 1.7.9 _______________________________________________ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel