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);  | 
