diff options
author | Claudio Takahasi <claudio.takahasi@openbossa.org> | 2007-06-19 12:59:59 +0000 |
---|---|---|
committer | Claudio Takahasi <claudio.takahasi@openbossa.org> | 2007-06-19 12:59:59 +0000 |
commit | 9dca4cf2d579b58c62d0ce98102250a6e0759dae (patch) | |
tree | 339b4923c45327ca73d97a7fd050dc6c2ea7b992 | |
parent | eb0899c1c7137ece8c0e5e5ec031cb2b9b4262e3 (diff) |
dbus-helper: added array type support for dbus_connection_emit_signal function
-rw-r--r-- | common/dbus-helper.c | 39 |
1 files changed, 14 insertions, 25 deletions
diff --git a/common/dbus-helper.c b/common/dbus-helper.c index 673ec2b5..e80d49cd 100644 --- a/common/dbus-helper.c +++ b/common/dbus-helper.c @@ -464,11 +464,10 @@ dbus_bool_t dbus_connection_emit_signal_valist(DBusConnection *conn, { struct generic_data *data; struct interface_data *iface; - DBusMessageIter iter; DBusSignalVTable *sig_data; DBusMessage *signal; - int type; - const char *args = NULL; + dbus_bool_t ret; + const char *signature, *args = NULL; if (!dbus_connection_get_object_path_data(conn, path, (void *) &data)) { error("dbus_connection_emit_signal: path %s isn't registered", @@ -502,33 +501,23 @@ dbus_bool_t dbus_connection_emit_signal_valist(DBusConnection *conn, return FALSE; } - dbus_message_iter_init_append(signal, &iter); - - for (type = first; type != DBUS_TYPE_INVALID; - type = va_arg(var_args, int), args++) { - void *value; + ret = dbus_message_append_args_valist(signal, first, var_args); + if (!ret) + goto fail; - if (type != *args) { - error("%s.%s: expected arg type '%c' but got '%c'", - interface, name, *args, type); - dbus_message_unref(signal); - return FALSE; - } - - value = va_arg(var_args, void *); - - if (!dbus_message_iter_append_basic(&iter, type, value)) { - error("%s.%s: appending argument of type '%c' failed", - interface, name, type); - dbus_message_unref(signal); - return FALSE; - } + signature = dbus_message_get_signature(signal); + if (strcmp(args, signature) != 0) { + error("%s.%s: expected signature'%s' but got '%s'", + interface, name, args, signature); + ret = FALSE; + goto fail; } - dbus_connection_send(conn, signal, NULL); + ret = dbus_connection_send(conn, signal, NULL); +fail: dbus_message_unref(signal); - return TRUE; + return ret; } dbus_bool_t dbus_connection_emit_signal(DBusConnection *conn, const char *path, |