chiark / gitweb /
dbus: add data argument to BusPropertySetCallback
authorMichael Olbrich <m.olbrich@pengutronix.de>
Fri, 6 Apr 2012 19:38:00 +0000 (21:38 +0200)
committerLennart Poettering <lennart@poettering.net>
Tue, 10 Apr 2012 20:41:15 +0000 (22:41 +0200)
BusPropertyCallback already has the argument. It is necesary for the
callback to know what data to access.

src/dbus-common.c
src/dbus-common.h
src/dbus-manager.c

index 2905ac3..fc97108 100644 (file)
@@ -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;
index 15811a7..1dc0f59 100644 (file)
@@ -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 */
index 0a6e55d..3bf0c07 100644 (file)
@@ -326,7 +326,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);
@@ -351,7 +351,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);