From a221eefadfb48488129dedca2f2dc062e1c718e7 Mon Sep 17 00:00:00 2001 From: Havoc Pennington Date: Sat, 27 Mar 2004 05:29:31 +0000 Subject: 2004-03-27 Havoc Pennington MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- ChangeLog | 10 ++++++++++ dbus/dbus-connection.c | 38 +++++++++++++++++--------------------- tools/dbus-send.c | 17 ++++++++++++++++- 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 + + 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 * 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); -- cgit