summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorClaudio Takahasi <claudio.takahasi@openbossa.org>2007-06-19 12:59:59 +0000
committerClaudio Takahasi <claudio.takahasi@openbossa.org>2007-06-19 12:59:59 +0000
commit9dca4cf2d579b58c62d0ce98102250a6e0759dae (patch)
tree339b4923c45327ca73d97a7fd050dc6c2ea7b992
parenteb0899c1c7137ece8c0e5e5ec031cb2b9b4262e3 (diff)
dbus-helper: added array type support for dbus_connection_emit_signal function
-rw-r--r--common/dbus-helper.c39
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,