diff options
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | dbus/dbus-connection.c | 38 | ||||
-rw-r--r-- | tools/dbus-send.c | 17 |
3 files changed, 43 insertions, 22 deletions
@@ -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); |