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, | 
