summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog10
-rw-r--r--dbus/dbus-connection.c38
-rw-r--r--tools/dbus-send.c17
3 files changed, 43 insertions, 22 deletions
diff --git a/ChangeLog b/ChangeLog
index e9ccd386..555b8bf0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2004-03-27 Havoc Pennington <hp@redhat.com>
+
+ Patch from Timo Teräs:
+
+ * tools/dbus-send.c (main): if --print-reply, assume type is
+ method call; support boolean type args
+
+ * dbus/dbus-connection.c (dbus_connection_send_with_reply): fix a
+ bunch of memleak and logic bugs
+
2004-03-23 Owen Fraser-Green <owen@discobabe.net>
* mono/Arguments.cs:
diff --git a/dbus/dbus-connection.c b/dbus/dbus-connection.c
index c9c09dfb..b65b541e 100644
--- a/dbus/dbus-connection.c
+++ b/dbus/dbus-connection.c
@@ -1749,20 +1749,15 @@ dbus_connection_send_with_reply (DBusConnection *connection,
reply = dbus_message_new_error (message, DBUS_ERROR_NO_REPLY,
"No reply within specified time");
- if (!reply)
- {
- CONNECTION_UNLOCK (connection);
- dbus_pending_call_unref (pending);
- return FALSE;
- }
+ if (reply == NULL)
+ goto error;
reply_link = _dbus_list_alloc_link (reply);
- if (!reply)
+ if (reply_link == NULL)
{
CONNECTION_UNLOCK (connection);
dbus_message_unref (reply);
- dbus_pending_call_unref (pending);
- return FALSE;
+ goto error_unlocked;
}
pending->timeout_link = reply_link;
@@ -1772,29 +1767,30 @@ dbus_connection_send_with_reply (DBusConnection *connection,
* Also, add the timeout.
*/
if (!_dbus_connection_attach_pending_call_unlocked (connection,
- pending))
- {
- CONNECTION_UNLOCK (connection);
- dbus_pending_call_unref (pending);
- return FALSE;
- }
+ pending))
+ goto error;
if (!_dbus_connection_send_unlocked (connection, message, NULL))
{
_dbus_connection_detach_pending_call_and_unlock (connection,
- pending);
- return FALSE;
+ pending);
+ goto error_unlocked;
}
if (pending_return)
- {
- dbus_pending_call_ref (pending);
- *pending_return = pending;
- }
+ *pending_return = pending;
+ else
+ dbus_pending_call_unref (pending);
CONNECTION_UNLOCK (connection);
return TRUE;
+
+ error:
+ CONNECTION_UNLOCK (connection);
+ error_unlocked:
+ dbus_pending_call_unref (pending);
+ return FALSE;
}
static DBusMessage*
diff --git a/tools/dbus-send.c b/tools/dbus-send.c
index d0cca2fd..5ff9f576 100644
--- a/tools/dbus-send.c
+++ b/tools/dbus-send.c
@@ -64,7 +64,10 @@ main (int argc, char *argv[])
else if (strcmp (arg, "--session") == 0)
type = DBUS_BUS_SESSION;
else if (strcmp (arg, "--print-reply") == 0)
- print_reply = TRUE;
+ {
+ print_reply = TRUE;
+ message_type = DBUS_MESSAGE_TYPE_METHOD_CALL;
+ }
else if (strstr (arg, "--dest=") == arg)
dest = strchr (arg, '=') + 1;
else if (strstr (arg, "--type=") == arg)
@@ -227,6 +230,18 @@ main (int argc, char *argv[])
dbus_message_iter_append_string (&iter, c);
break;
+ case DBUS_TYPE_BOOLEAN:
+ if (strcmp(c, "true") == 0)
+ dbus_message_iter_append_boolean (&iter, TRUE);
+ else if (strcmp(c, "false") == 0)
+ dbus_message_iter_append_boolean (&iter, FALSE);
+ else
+ {
+ fprintf (stderr, "%s: Expected \"true\" or \"false\" instead of \"%s\"\n", argv[0], c);
+ exit (1);
+ }
+ break;
+
default:
fprintf (stderr, "%s: Unsupported data type\n", argv[0]);
exit (1);