]> git.ipfire.org Git - thirdparty/dbus.git/commitdiff
2004-03-27 Havoc Pennington <hp@redhat.com>
authorHavoc Pennington <hp@redhat.com>
Sat, 27 Mar 2004 05:29:31 +0000 (05:29 +0000)
committerHavoc Pennington <hp@redhat.com>
Sat, 27 Mar 2004 05:29:31 +0000 (05:29 +0000)
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
dbus/dbus-connection.c
tools/dbus-send.c

index e9ccd3865cd63617a129742c264da7b3dc9c4391..555b8bf02dfb1c208be6ab81f901db6cef90fb83 100644 (file)
--- 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:
index c9c09dfb89e1d56b9d2a894f5806c9c90b091ba3..b65b541efb238fe3e90592fd50b50862eb65b4ac 100644 (file)
@@ -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*
index d0cca2fd90b737dc20ee01f0ec46479255196541..5ff9f576d2dd95ec5371b672ba1077f037ffe9fe 100644 (file)
@@ -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);