2003-04-24 Havoc Pennington <hp@redhat.com>
authorHavoc Pennington <hp@redhat.com>
Thu, 24 Apr 2003 19:18:23 +0000 (19:18 +0000)
committerHavoc Pennington <hp@redhat.com>
Thu, 24 Apr 2003 19:18:23 +0000 (19:18 +0000)
* configure.in: add --enable-checks

* dbus/dbus-message.c (dbus_message_new): reverse name/service arguments

* dbus/dbus-connection.c (dbus_connection_preallocate_send): fix
to use thread locks.
(_dbus_connection_handler_destroyed_locked): move some private
functions into proper docs group

* dbus/dbus-internals.h: add _dbus_return_if_fail,
_dbus_return_val_if_fail

Throughout: use dbus_return_if_fail

18 files changed:
ChangeLog
bus/connection.c
bus/dispatch.c
bus/driver.c
configure.in
dbus/dbus-bus.c
dbus/dbus-connection.c
dbus/dbus-errors.c
dbus/dbus-internals.c
dbus/dbus-internals.h
dbus/dbus-message-handler.c
dbus/dbus-message.c
dbus/dbus-server.c
dbus/dbus-spawn.c
doc/TODO
glib/test-dbus-glib.c
glib/test-thread-client.c
tools/dbus-send.c

index e13e05d..270d0d1 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+2003-04-24  Havoc Pennington  <hp@redhat.com>
+
+       * configure.in: add --enable-checks
+
+       * dbus/dbus-message.c (dbus_message_new): reverse name/service arguments
+
+       * dbus/dbus-connection.c (dbus_connection_preallocate_send): fix
+       to use thread locks.
+       (_dbus_connection_handler_destroyed_locked): move some private
+       functions into proper docs group
+
+       * dbus/dbus-internals.h: add _dbus_return_if_fail,
+       _dbus_return_val_if_fail
+
+       Throughout: use dbus_return_if_fail
+
 2003-04-23  James Willcox  <jwillcox@gnome.org>
 
        * glib/dbus-glib.h:
index 14081e2..146e376 100644 (file)
@@ -880,9 +880,9 @@ bus_connection_preallocate_oom_error (DBusConnection *connection)
   if (preallocated == NULL)
     return FALSE;
 
-  /* d->name may be NULL, but that should be OK */
-  message = dbus_message_new (d->name,
-                              DBUS_ERROR_NO_MEMORY);
+  /* d->name may be NULL, but that is OK */
+  message = dbus_message_new (DBUS_ERROR_NO_MEMORY,
+                              d->name);
   if (message == NULL)
     {
       dbus_connection_free_preallocated_send (connection, preallocated);
index c1e67d6..e38b340 100644 (file)
@@ -704,8 +704,8 @@ check_hello_message (BusContext     *context,
   acquired = NULL;
   message = NULL;
   
-  message = dbus_message_new (DBUS_SERVICE_DBUS,
-                             DBUS_MESSAGE_HELLO);
+  message = dbus_message_new (DBUS_MESSAGE_HELLO,
+                              DBUS_SERVICE_DBUS);
 
   if (message == NULL)
     return TRUE;
@@ -936,8 +936,8 @@ check_nonexistent_service_activation (BusContext     *context,
   
   dbus_error_init (&error);
   
-  message = dbus_message_new (DBUS_SERVICE_DBUS,
-                             DBUS_MESSAGE_ACTIVATE_SERVICE);
+  message = dbus_message_new (DBUS_MESSAGE_ACTIVATE_SERVICE,
+                              DBUS_SERVICE_DBUS);
 
   if (message == NULL)
     return TRUE;
@@ -1317,8 +1317,8 @@ check_send_exit_to_service (BusContext     *context,
   retval = FALSE;
   
   /* Kill off the test service by sending it a quit message */
-  message = dbus_message_new (service_name,
-                              "org.freedesktop.DBus.TestSuiteExit");
+  message = dbus_message_new ("org.freedesktop.DBus.TestSuiteExit",
+                              service_name);
       
   if (message == NULL)
     {
@@ -1490,8 +1490,8 @@ check_existent_service_activation (BusContext     *context,
   
   dbus_error_init (&error);
   
-  message = dbus_message_new (DBUS_SERVICE_DBUS,
-                             DBUS_MESSAGE_ACTIVATE_SERVICE);
+  message = dbus_message_new (DBUS_MESSAGE_ACTIVATE_SERVICE,
+                              DBUS_SERVICE_DBUS);
 
   if (message == NULL)
     return TRUE;
@@ -1698,8 +1698,8 @@ check_segfault_service_activation (BusContext     *context,
   
   dbus_error_init (&error);
   
-  message = dbus_message_new (DBUS_SERVICE_DBUS,
-                             DBUS_MESSAGE_ACTIVATE_SERVICE);
+  message = dbus_message_new (DBUS_MESSAGE_ACTIVATE_SERVICE,
+                              DBUS_SERVICE_DBUS);
 
   if (message == NULL)
     return TRUE;
index bc58f55..299968f 100644 (file)
@@ -49,8 +49,8 @@ bus_driver_send_service_deleted (const char     *service_name,
   
   _dbus_verbose ("sending service deleted: %s\n", service_name);
 
-  message = dbus_message_new (DBUS_SERVICE_BROADCAST,
-                              DBUS_MESSAGE_SERVICE_DELETED);
+  message = dbus_message_new (DBUS_MESSAGE_SERVICE_DELETED,
+                              DBUS_SERVICE_BROADCAST);
   if (message == NULL)
     {
       BUS_SET_OOM (error);
@@ -83,8 +83,8 @@ bus_driver_send_service_created (const char     *service_name,
 
   _DBUS_ASSERT_ERROR_IS_CLEAR (error);
   
-  message = dbus_message_new (DBUS_SERVICE_BROADCAST,
-                              DBUS_MESSAGE_SERVICE_CREATED);
+  message = dbus_message_new (DBUS_MESSAGE_SERVICE_CREATED,
+                              DBUS_SERVICE_BROADCAST);
   if (message == NULL)
     {
       BUS_SET_OOM (error);
@@ -123,8 +123,8 @@ bus_driver_send_service_lost (DBusConnection *connection,
 
   _DBUS_ASSERT_ERROR_IS_CLEAR (error);
   
-  message = dbus_message_new (bus_connection_get_name (connection),
-                              DBUS_MESSAGE_SERVICE_LOST);
+  message = dbus_message_new (DBUS_MESSAGE_SERVICE_LOST,
+                              bus_connection_get_name (connection));
   if (message == NULL)
     {
       BUS_SET_OOM (error);
@@ -163,8 +163,9 @@ bus_driver_send_service_acquired (DBusConnection *connection,
 
   _DBUS_ASSERT_ERROR_IS_CLEAR (error);
   
-  message = dbus_message_new (bus_connection_get_name (connection),
-                              DBUS_MESSAGE_SERVICE_ACQUIRED);
+  message = dbus_message_new (DBUS_MESSAGE_SERVICE_ACQUIRED,
+                              bus_connection_get_name (connection));
+
   if (message == NULL)
     {
       BUS_SET_OOM (error);
index faac055..37a1bef 100644 (file)
@@ -27,8 +27,9 @@ AC_ARG_ENABLE(qt,      [  --enable-qt      enable Qt-friendly client library],en
 AC_ARG_ENABLE(glib,    [  --enable-glib    enable GLib-friendly client library],enable_glib=$enableval,enable_glib=auto)
 AC_ARG_ENABLE(tests,   [  --enable-tests   enable unit test code],enable_tests=$enableval,enable_tests=$USE_MAINTAINER_MODE)
 AC_ARG_ENABLE(ansi,    [  --enable-ansi    enable -ansi -pedantic gcc flags],enable_ansi=$enableval,enable_ansi=no)
-AC_ARG_ENABLE(verbose-mode, [  --enable-verbose-mode support verbose debug mode],enable_verbose_mode=$enableval,enable_verbose_mode=yes)
-AC_ARG_ENABLE(asserts, [  --enable-asserts include assertion checks],enable_asserts=$enableval,enable_asserts=yes)
+AC_ARG_ENABLE(verbose-mode, [  --enable-verbose-mode support verbose debug mode],enable_verbose_mode=$enableval,enable_verbose_mode=$USE_MAINTAINER_MODE)
+AC_ARG_ENABLE(asserts, [  --enable-asserts include assertion checks],enable_asserts=$enableval,enable_asserts=$USE_MAINTAINER_MODE)
+AC_ARG_ENABLE(checks,  [  --enable-checks  include sanity checks on public API],enable_checks=$enableval,enable_checks=yes)
 AC_ARG_ENABLE(gcov,    [  --enable-gcov compile with coverage profiling instrumentation (gcc only)],enable_gcov=$enableval,enable_gcov=no)
 
 AC_ARG_WITH(xml,                [  --with-xml=[libxml/expat] XML library to use])
@@ -51,6 +52,9 @@ fi
 if test x$enable_asserts = xno; then
     AC_DEFINE(DBUS_DISABLE_ASSERT,1,[Disable assertion checking])
 fi
+if test x$enable_checks = xno; then
+    AC_DEFINE(DBUS_DISABLE_CHECKS,1,[Disable public API sanity checking])
+fi
 
 #### gcc warning flags
 
@@ -578,6 +582,7 @@ echo "
         Building unit tests:      ${enable_tests}
         Building verbose mode:    ${enable_verbose_mode}
         Building assertions:      ${enable_asserts}
+        Building checks:          ${enable_checks}
         Building Qt bindings:     ${have_qt}
         Building GLib bindings:   ${have_glib}
         Using XML parser:         ${with_xml}
@@ -595,8 +600,11 @@ if test x$enable_gcov = xyes; then
         echo "NOTE: building with coverage profiling is definitely for developers only."
 fi
 if test x$enable_verbose_mode = xyes; then
-        echo "NOTE: building with verbose mode increases library size, may slightly increase security risk, and may cause a slight performance decrease, but aids debugging."
+        echo "NOTE: building with verbose mode increases library size, may slightly increase security risk, and decreases performance."
 fi
 if test x$enable_asserts = xyes; then
-        echo "NOTE: building with assertions increases library size, but will help a lot when tracking down bugs in software using D-BUS."
+        echo "NOTE: building with assertions increases library size and decreases performance."
 fi
+if test x$enable_checks = xno; then
+        echo "NOTE: building without checks for arguments passed to public API makes it harder to debug apps using D-BUS, but will slightly decrease D-BUS library size and _very_ slightly improve performance."
+fi
\ No newline at end of file
index e7b4c06..9627341 100644 (file)
@@ -329,14 +329,8 @@ dbus_bus_get (DBusBusType  type,
   BusData *bd;
   DBusBusType address_type;
 
-  _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-  
-  if (type < 0 || type >= N_BUS_TYPES)
-    {
-      _dbus_assert_not_reached ("Invalid bus type specified.");
-
-      return NULL;
-    }
+  _dbus_return_val_if_fail (type >= 0 && type < N_BUS_TYPES, NULL);
+  _dbus_return_val_if_error_is_set (error, NULL);
 
   _DBUS_LOCK (bus);
 
@@ -429,8 +423,9 @@ dbus_bus_register (DBusConnection *connection,
   char *name;
   BusData *bd;
   dbus_bool_t retval;
-  
-  _DBUS_ASSERT_ERROR_IS_CLEAR (error);
+
+  _dbus_return_val_if_fail (connection != NULL, FALSE);
+  _dbus_return_val_if_error_is_set (error, FALSE);
 
   retval = FALSE;
   
@@ -450,8 +445,9 @@ dbus_bus_register (DBusConnection *connection,
       return TRUE;
     }
   
-  message = dbus_message_new (DBUS_SERVICE_DBUS,
-                             DBUS_MESSAGE_HELLO);
+  message = dbus_message_new (DBUS_MESSAGE_HELLO,
+                              DBUS_SERVICE_DBUS);
+                             
 
   if (!message)
     {
@@ -504,12 +500,14 @@ dbus_bus_set_base_service (DBusConnection *connection,
 {
   BusData *bd;
 
+  _dbus_return_val_if_fail (connection != NULL, FALSE);
+  _dbus_return_val_if_fail (base_service != NULL, FALSE);
+  
   bd = ensure_bus_data (connection);
   if (bd == NULL)
     return FALSE;
 
   _dbus_assert (bd->base_service == NULL);
-  _dbus_assert (base_service != NULL);
   
   bd->base_service = _dbus_strdup (base_service);
   return bd->base_service != NULL;
@@ -528,6 +526,8 @@ dbus_bus_get_base_service (DBusConnection *connection)
 {
   BusData *bd;
 
+  _dbus_return_val_if_fail (connection != NULL, NULL);
+  
   bd = ensure_bus_data (connection);
   if (bd == NULL)
     return NULL;
@@ -558,9 +558,14 @@ dbus_bus_acquire_service (DBusConnection *connection,
 {
   DBusMessage *message, *reply;
   dbus_uint32_t service_result;
+
+  _dbus_return_val_if_fail (connection != NULL, 0);
+  _dbus_return_val_if_fail (service_name != NULL, 0);
+  _dbus_return_val_if_error_is_set (error, 0);
   
-  message = dbus_message_new (DBUS_SERVICE_DBUS,
-                              DBUS_MESSAGE_ACQUIRE_SERVICE);
+  message = dbus_message_new (DBUS_MESSAGE_ACQUIRE_SERVICE,
+                              DBUS_SERVICE_DBUS);
+
 
   if (message == NULL)
     {
@@ -628,10 +633,12 @@ dbus_bus_service_exists (DBusConnection *connection,
   DBusMessage *message, *reply;
   unsigned int exists;
 
-  _DBUS_ASSERT_ERROR_IS_CLEAR (error);
+  _dbus_return_val_if_fail (connection != NULL, FALSE);
+  _dbus_return_val_if_fail (service_name != NULL, FALSE);
+  _dbus_return_val_if_error_is_set (error, FALSE);
   
-  message = dbus_message_new (DBUS_SERVICE_DBUS,
-                              DBUS_MESSAGE_SERVICE_EXISTS);
+  message = dbus_message_new (DBUS_MESSAGE_SERVICE_EXISTS,
+                              DBUS_SERVICE_DBUS);
   if (message == NULL)
     {
       _DBUS_SET_OOM (error);
index eb33166..4bb0514 100644 (file)
@@ -691,7 +691,7 @@ _dbus_connection_new_for_transport (DBusTransport *transport)
   if (io_path_cond == NULL)
     goto error;
 
-  disconnect_message = dbus_message_new (NULL, DBUS_MESSAGE_LOCAL_DISCONNECT);
+  disconnect_message = dbus_message_new (DBUS_MESSAGE_LOCAL_DISCONNECT, NULL);
   if (disconnect_message == NULL)
     goto error;
 
@@ -773,6 +773,19 @@ _dbus_connection_new_for_transport (DBusTransport *transport)
   return NULL;
 }
 
+/**
+ * Increments the reference count of a DBusConnection.
+ * Requires that the caller already holds the connection lock.
+ *
+ * @param connection the connection.
+ */
+void
+_dbus_connection_ref_unlocked (DBusConnection *connection)
+{
+  _dbus_assert (connection->refcount > 0);
+  connection->refcount += 1;
+}
+
 static dbus_uint32_t
 _dbus_connection_get_next_client_serial (DBusConnection *connection)
 {
@@ -830,6 +843,45 @@ _dbus_connection_handler_destroyed_locked (DBusConnection     *connection,
   dbus_mutex_unlock (connection->mutex);
 }
 
+/**
+ * A callback for use with dbus_watch_new() to create a DBusWatch.
+ * 
+ * @todo This is basically a hack - we could delete _dbus_transport_handle_watch()
+ * and the virtual handle_watch in DBusTransport if we got rid of it.
+ * The reason this is some work is threading, see the _dbus_connection_handle_watch()
+ * implementation.
+ *
+ * @param watch the watch.
+ * @param condition the current condition of the file descriptors being watched.
+ * @param data must be a pointer to a #DBusConnection
+ * @returns #FALSE if the IO condition may not have been fully handled due to lack of memory
+ */
+dbus_bool_t
+_dbus_connection_handle_watch (DBusWatch                   *watch,
+                               unsigned int                 condition,
+                               void                        *data)
+{
+  DBusConnection *connection;
+  dbus_bool_t retval;
+  DBusDispatchStatus status;
+
+  connection = data;
+  
+  dbus_mutex_lock (connection->mutex);
+  _dbus_connection_acquire_io_path (connection, -1);
+  retval = _dbus_transport_handle_watch (connection->transport,
+                                         watch, condition);
+  _dbus_connection_release_io_path (connection);
+
+  status = _dbus_connection_get_dispatch_status_unlocked (connection);
+  
+  dbus_mutex_unlock (connection->mutex);
+
+  _dbus_connection_update_dispatch_status_locked (connection, status);
+  
+  return retval;
+}
+
 /** @} */
 
 /**
@@ -861,7 +913,8 @@ dbus_connection_open (const char     *address,
   DBusConnection *connection;
   DBusTransport *transport;
 
-  _DBUS_ASSERT_ERROR_IS_CLEAR (error);
+  _dbus_return_val_if_fail (address != NULL, NULL);
+  _dbus_return_val_if_error_is_set (error, NULL);
   
   transport = _dbus_transport_open (address, error);
   if (transport == NULL)
@@ -891,6 +944,8 @@ dbus_connection_open (const char     *address,
 void
 dbus_connection_ref (DBusConnection *connection)
 {
+  _dbus_return_if_fail (connection != NULL);
+  
   dbus_mutex_lock (connection->mutex);
   _dbus_assert (connection->refcount > 0);
 
@@ -898,19 +953,6 @@ dbus_connection_ref (DBusConnection *connection)
   dbus_mutex_unlock (connection->mutex);
 }
 
-/**
- * Increments the reference count of a DBusConnection.
- * Requires that the caller already holds the connection lock.
- *
- * @param connection the connection.
- */
-void
-_dbus_connection_ref_unlocked (DBusConnection *connection)
-{
-  _dbus_assert (connection->refcount > 0);
-  connection->refcount += 1;
-}
-
 static void
 free_outgoing_message (void *element,
                        void *data)
@@ -1028,10 +1070,11 @@ void
 dbus_connection_unref (DBusConnection *connection)
 {
   dbus_bool_t last_unref;
+
+  _dbus_return_if_fail (connection != NULL);
   
   dbus_mutex_lock (connection->mutex);
   
-  _dbus_assert (connection != NULL);
   _dbus_assert (connection->refcount > 0);
 
   connection->refcount -= 1;
@@ -1060,6 +1103,8 @@ dbus_connection_unref (DBusConnection *connection)
 void
 dbus_connection_disconnect (DBusConnection *connection)
 {
+  _dbus_return_if_fail (connection != NULL);
+  
   dbus_mutex_lock (connection->mutex);
   _dbus_transport_disconnect (connection->transport);
   dbus_mutex_unlock (connection->mutex);
@@ -1079,6 +1124,8 @@ dbus_bool_t
 dbus_connection_get_is_connected (DBusConnection *connection)
 {
   dbus_bool_t res;
+
+  _dbus_return_val_if_fail (connection != NULL, FALSE);
   
   dbus_mutex_lock (connection->mutex);
   res = _dbus_transport_get_is_connected (connection->transport);
@@ -1099,6 +1146,8 @@ dbus_bool_t
 dbus_connection_get_is_authenticated (DBusConnection *connection)
 {
   dbus_bool_t res;
+
+  _dbus_return_val_if_fail (connection != NULL, FALSE);
   
   dbus_mutex_lock (connection->mutex);
   res = _dbus_transport_get_is_authenticated (connection->transport);
@@ -1129,10 +1178,14 @@ dbus_connection_preallocate_send (DBusConnection *connection)
 {
   DBusPreallocatedSend *preallocated;
 
+  _dbus_return_val_if_fail (connection != NULL, NULL);
+  
   preallocated = dbus_new (DBusPreallocatedSend, 1);
   if (preallocated == NULL)
     return NULL;
 
+  dbus_mutex_lock (connection->mutex);
+  
   preallocated->queue_link = _dbus_list_alloc_link (NULL);
   if (preallocated->queue_link == NULL)
     goto failed_0;
@@ -1152,6 +1205,8 @@ dbus_connection_preallocate_send (DBusConnection *connection)
  failed_0:
   dbus_free (preallocated);
 
+  dbus_mutex_unlock (connection->mutex);
+  
   return NULL;
 }
 
@@ -1168,7 +1223,9 @@ void
 dbus_connection_free_preallocated_send (DBusConnection       *connection,
                                         DBusPreallocatedSend *preallocated)
 {
-  _dbus_assert (connection == preallocated->connection);
+  _dbus_return_if_fail (connection != NULL);
+  _dbus_return_if_fail (preallocated != NULL);
+  _dbus_return_if_fail (connection == preallocated->connection);
   
   _dbus_list_free_link (preallocated->queue_link);
   _dbus_counter_unref (preallocated->counter_link->data);
@@ -1195,9 +1252,12 @@ dbus_connection_send_preallocated (DBusConnection       *connection,
                                    dbus_uint32_t        *client_serial)
 {
   dbus_uint32_t serial;
-  
-  _dbus_assert (preallocated->connection == connection);
-  _dbus_assert (dbus_message_get_name (message) != NULL);
+
+  _dbus_return_if_fail (connection != NULL);
+  _dbus_return_if_fail (preallocated != NULL);
+  _dbus_return_if_fail (message != NULL);
+  _dbus_return_if_fail (preallocated->connection == connection);
+  _dbus_return_if_fail (dbus_message_get_name (message) != NULL);
   
   dbus_mutex_lock (connection->mutex);
 
@@ -1270,6 +1330,9 @@ dbus_connection_send (DBusConnection *connection,
 {
   DBusPreallocatedSend *preallocated;
 
+  _dbus_return_val_if_fail (connection != NULL, FALSE);
+  _dbus_return_val_if_fail (message != NULL, FALSE);
+  
   preallocated = dbus_connection_preallocate_send (connection);
   if (preallocated == NULL)
     {
@@ -1383,6 +1446,11 @@ dbus_connection_send_with_reply (DBusConnection     *connection,
   DBusMessage *reply;
   DBusList *reply_link;
   dbus_int32_t serial = -1;
+
+  _dbus_return_val_if_fail (connection != NULL, FALSE);
+  _dbus_return_val_if_fail (message != NULL, FALSE);
+  _dbus_return_val_if_fail (reply_handler != NULL, FALSE);
+  _dbus_return_val_if_fail (timeout_milliseconds >= 0 || timeout_milliseconds == -1, FALSE);
   
   if (timeout_milliseconds == -1)
     timeout_milliseconds = DEFAULT_TIMEOUT_VALUE;
@@ -1538,7 +1606,10 @@ dbus_connection_send_with_reply_and_block (DBusConnection     *connection,
   long tv_sec, tv_usec;
   DBusDispatchStatus status;
 
-  _DBUS_ASSERT_ERROR_IS_CLEAR (error);
+  _dbus_return_val_if_fail (connection != NULL, NULL);
+  _dbus_return_val_if_fail (message != NULL, NULL);
+  _dbus_return_val_if_fail (timeout_milliseconds >= 0 || timeout_milliseconds == -1, FALSE);  
+  _dbus_return_val_if_error_is_set (error, NULL);
   
   if (timeout_milliseconds == -1)
     timeout_milliseconds = DEFAULT_TIMEOUT_VALUE;
@@ -1680,6 +1751,8 @@ dbus_connection_flush (DBusConnection *connection)
    * dispatch status.
    */
   DBusDispatchStatus status;
+
+  _dbus_return_if_fail (connection != NULL);
   
   dbus_mutex_lock (connection->mutex);
   while (connection->n_outgoing > 0 &&
@@ -1728,6 +1801,8 @@ dbus_connection_borrow_message  (DBusConnection *connection)
 {
   DBusMessage *message;
   DBusDispatchStatus status;
+
+  _dbus_return_val_if_fail (connection != NULL, NULL);
   
   /* this is called for the side effect that it queues
    * up any messages from the transport
@@ -1761,6 +1836,9 @@ void
 dbus_connection_return_message (DBusConnection *connection,
                                DBusMessage    *message)
 {
+  _dbus_return_if_fail (connection != NULL);
+  _dbus_return_if_fail (message != NULL);
+  
   dbus_mutex_lock (connection->mutex);
   
   _dbus_assert (message == connection->message_borrowed);
@@ -1785,6 +1863,9 @@ dbus_connection_steal_borrowed_message (DBusConnection *connection,
                                        DBusMessage    *message)
 {
   DBusMessage *pop_message;
+
+  _dbus_return_if_fail (connection != NULL);
+  _dbus_return_if_fail (message != NULL);
   
   dbus_mutex_lock (connection->mutex);
  
@@ -2004,6 +2085,8 @@ DBusDispatchStatus
 dbus_connection_get_dispatch_status (DBusConnection *connection)
 {
   DBusDispatchStatus status;
+
+  _dbus_return_val_if_fail (connection != NULL, DBUS_DISPATCH_COMPLETE);
   
   dbus_mutex_lock (connection->mutex);
 
@@ -2035,6 +2118,8 @@ dbus_connection_dispatch (DBusConnection *connection)
   const char *name;
   dbus_int32_t reply_serial;
   DBusDispatchStatus status;
+
+  _dbus_return_val_if_fail (connection != NULL, DBUS_DISPATCH_COMPLETE);
   
   status = dbus_connection_get_dispatch_status (connection);
   if (status != DBUS_DISPATCH_DATA_REMAINS)
@@ -2271,6 +2356,8 @@ dbus_connection_set_watch_functions (DBusConnection              *connection,
                                      DBusFreeFunction             free_data_function)
 {
   dbus_bool_t retval;
+
+  _dbus_return_val_if_fail (connection != NULL, FALSE);
   
   dbus_mutex_lock (connection->mutex);
   /* ref connection for slightly better reentrancy */
@@ -2331,6 +2418,8 @@ dbus_connection_set_timeout_functions   (DBusConnection            *connection,
                                         DBusFreeFunction           free_data_function)
 {
   dbus_bool_t retval;
+
+  _dbus_return_val_if_fail (connection != NULL, FALSE);
   
   dbus_mutex_lock (connection->mutex);
   /* ref connection for slightly better reentrancy */
@@ -2370,6 +2459,8 @@ dbus_connection_set_wakeup_main_function (DBusConnection            *connection,
 {
   void *old_data;
   DBusFreeFunction old_free_data;
+
+  _dbus_return_if_fail (connection != NULL);
   
   dbus_mutex_lock (connection->mutex);
   old_data = connection->wakeup_main_data;
@@ -2410,6 +2501,8 @@ dbus_connection_set_dispatch_status_function (DBusConnection             *connec
 {
   void *old_data;
   DBusFreeFunction old_free_data;
+
+  _dbus_return_if_fail (connection != NULL);
   
   dbus_mutex_lock (connection->mutex);
   old_data = connection->dispatch_status_data;
@@ -2427,45 +2520,6 @@ dbus_connection_set_dispatch_status_function (DBusConnection             *connec
 }
 
 /**
- * A callback for use with dbus_watch_new() to create a DBusWatch.
- * 
- * @todo This is basically a hack - we could delete _dbus_transport_handle_watch()
- * and the virtual handle_watch in DBusTransport if we got rid of it.
- * The reason this is some work is threading, see the _dbus_connection_handle_watch()
- * implementation.
- *
- * @param watch the watch.
- * @param condition the current condition of the file descriptors being watched.
- * @param data must be a pointer to a #DBusConnection
- * @returns #FALSE if the IO condition may not have been fully handled due to lack of memory
- */
-dbus_bool_t
-_dbus_connection_handle_watch (DBusWatch                   *watch,
-                               unsigned int                 condition,
-                               void                        *data)
-{
-  DBusConnection *connection;
-  dbus_bool_t retval;
-  DBusDispatchStatus status;
-
-  connection = data;
-  
-  dbus_mutex_lock (connection->mutex);
-  _dbus_connection_acquire_io_path (connection, -1);
-  retval = _dbus_transport_handle_watch (connection->transport,
-                                         watch, condition);
-  _dbus_connection_release_io_path (connection);
-
-  status = _dbus_connection_get_dispatch_status_unlocked (connection);
-  
-  dbus_mutex_unlock (connection->mutex);
-
-  _dbus_connection_update_dispatch_status_locked (connection, status);
-  
-  return retval;
-}
-
-/**
  * Gets the UNIX user ID of the connection if any.
  * Returns #TRUE if the uid is filled in.
  * Always returns #FALSE on non-UNIX platforms.
@@ -2482,6 +2536,9 @@ dbus_connection_get_unix_user (DBusConnection *connection,
 {
   dbus_bool_t result;
 
+  _dbus_return_val_if_fail (connection != NULL, FALSE);
+  _dbus_return_val_if_fail (uid != NULL, FALSE);
+  
   dbus_mutex_lock (connection->mutex);
 
   if (!_dbus_transport_get_is_authenticated (connection->transport))
@@ -2519,6 +2576,8 @@ dbus_connection_set_unix_user_function (DBusConnection             *connection,
   void *old_data = NULL;
   DBusFreeFunction old_free_function = NULL;
 
+  _dbus_return_if_fail (connection != NULL);
+  
   dbus_mutex_lock (connection->mutex);
   _dbus_transport_set_unix_user_function (connection->transport,
                                           function, data, free_data_function,
@@ -2552,6 +2611,9 @@ dbus_bool_t
 dbus_connection_add_filter (DBusConnection      *connection,
                             DBusMessageHandler  *handler)
 {
+  _dbus_return_val_if_fail (connection != NULL, FALSE);
+  _dbus_return_val_if_fail (handler != NULL, FALSE);
+  
   dbus_mutex_lock (connection->mutex);
   if (!_dbus_message_handler_add_connection (handler, connection))
     {
@@ -2586,6 +2648,9 @@ void
 dbus_connection_remove_filter (DBusConnection      *connection,
                                DBusMessageHandler  *handler)
 {
+  _dbus_return_if_fail (connection != NULL);
+  _dbus_return_if_fail (handler != NULL);
+  
   dbus_mutex_lock (connection->mutex);
   if (!_dbus_list_remove_last (&connection->filter_list, handler))
     {
@@ -2633,6 +2698,11 @@ dbus_connection_register_handler (DBusConnection     *connection,
 {
   int i;
 
+  _dbus_return_val_if_fail (connection != NULL, FALSE);
+  _dbus_return_val_if_fail (handler != NULL, FALSE);
+  _dbus_return_val_if_fail (n_messages >= 0, FALSE);
+  _dbus_return_val_if_fail (n_messages == 0 || messages_to_handle != NULL, FALSE);
+  
   dbus_mutex_lock (connection->mutex);
   i = 0;
   while (i < n_messages)
@@ -2706,6 +2776,11 @@ dbus_connection_unregister_handler (DBusConnection     *connection,
 {
   int i;
 
+  _dbus_return_if_fail (connection != NULL);
+  _dbus_return_if_fail (handler != NULL);
+  _dbus_return_if_fail (n_messages >= 0);
+  _dbus_return_if_fail (n_messages == 0 || messages_to_handle != NULL);
+  
   dbus_mutex_lock (connection->mutex);
   i = 0;
   while (i < n_messages)
@@ -2795,6 +2870,9 @@ dbus_connection_set_data (DBusConnection   *connection,
   DBusFreeFunction old_free_func;
   void *old_data;
   dbus_bool_t retval;
+
+  _dbus_return_val_if_fail (connection != NULL, FALSE);
+  _dbus_return_val_if_fail (slot >= 0, FALSE);
   
   dbus_mutex_lock (connection->mutex);
 
@@ -2828,6 +2906,8 @@ dbus_connection_get_data (DBusConnection   *connection,
                           int               slot)
 {
   void *res;
+
+  _dbus_return_val_if_fail (connection != NULL, NULL);
   
   dbus_mutex_lock (connection->mutex);
 
@@ -2848,8 +2928,8 @@ dbus_connection_get_data (DBusConnection   *connection,
  */
 void
 dbus_connection_set_change_sigpipe (dbus_bool_t will_modify_sigpipe)
-{
-  _dbus_modify_sigpipe = will_modify_sigpipe;
+{  
+  _dbus_modify_sigpipe = will_modify_sigpipe != FALSE;
 }
 
 /**
@@ -2864,6 +2944,8 @@ void
 dbus_connection_set_max_message_size (DBusConnection *connection,
                                       long            size)
 {
+  _dbus_return_if_fail (connection != NULL);
+  
   dbus_mutex_lock (connection->mutex);
   _dbus_transport_set_max_message_size (connection->transport,
                                         size);
@@ -2880,6 +2962,9 @@ long
 dbus_connection_get_max_message_size (DBusConnection *connection)
 {
   long res;
+
+  _dbus_return_val_if_fail (connection != NULL, 0);
+  
   dbus_mutex_lock (connection->mutex);
   res = _dbus_transport_get_max_message_size (connection->transport);
   dbus_mutex_unlock (connection->mutex);
@@ -2913,8 +2998,10 @@ dbus_connection_get_max_message_size (DBusConnection *connection)
  */
 void
 dbus_connection_set_max_received_size (DBusConnection *connection,
-                                                long            size)
+                                       long            size)
 {
+  _dbus_return_if_fail (connection != NULL);
+  
   dbus_mutex_lock (connection->mutex);
   _dbus_transport_set_max_received_size (connection->transport,
                                          size);
@@ -2931,6 +3018,9 @@ long
 dbus_connection_get_max_received_size (DBusConnection *connection)
 {
   long res;
+
+  _dbus_return_val_if_fail (connection != NULL, 0);
+  
   dbus_mutex_lock (connection->mutex);
   res = _dbus_transport_get_max_received_size (connection->transport);
   dbus_mutex_unlock (connection->mutex);
@@ -2951,6 +3041,9 @@ long
 dbus_connection_get_outgoing_size (DBusConnection *connection)
 {
   long res;
+
+  _dbus_return_val_if_fail (connection != NULL, 0);
+  
   dbus_mutex_lock (connection->mutex);
   res = _dbus_counter_get_value (connection->outgoing_counter);
   dbus_mutex_unlock (connection->mutex);
index 30b2e0a..f763628 100644 (file)
@@ -139,7 +139,7 @@ dbus_error_init (DBusError *error)
 {
   DBusRealError *real;
 
-  _dbus_assert (error != NULL);
+  _dbus_return_if_fail (error != NULL);
 
   _dbus_assert (sizeof (DBusError) == sizeof (DBusRealError));
 
@@ -162,6 +162,8 @@ dbus_error_free (DBusError *error)
 {
   DBusRealError *real;
 
+  _dbus_return_if_fail (error != NULL);
+  
   real = (DBusRealError *)error;
 
   if (!real->const_message)
@@ -187,13 +189,14 @@ dbus_set_error_const (DBusError  *error,
 {
   DBusRealError *real;
 
+  _dbus_return_if_error_is_set (error);
+  _dbus_return_if_fail (name != NULL);
+  
   if (error == NULL)
     return;
 
-  /* it's a bug to pile up errors */
   _dbus_assert (error->name == NULL);
   _dbus_assert (error->message == NULL);
-  _dbus_assert (name != NULL);
 
   if (message == NULL)
     message = message_from_error (name);
@@ -219,7 +222,7 @@ void
 dbus_move_error (DBusError *src,
                  DBusError *dest)
 {
-  _dbus_assert (!dbus_error_is_set (dest));
+  _dbus_return_if_error_is_set (dest);
 
   if (dest)
     {
@@ -242,8 +245,9 @@ dbus_bool_t
 dbus_error_has_name (const DBusError *error,
                      const char      *name)
 {
-  _dbus_assert (error != NULL);
-  _dbus_assert (name != NULL);
+  _dbus_return_val_if_fail (error != NULL, FALSE);
+  _dbus_return_val_if_fail (name != NULL, FALSE);
+
   _dbus_assert ((error->name != NULL && error->message != NULL) ||
                 (error->name == NULL && error->message == NULL));
   
@@ -267,7 +271,7 @@ dbus_error_has_name (const DBusError *error,
 dbus_bool_t
 dbus_error_is_set (const DBusError *error)
 {
-  _dbus_assert (error != NULL);  
+  _dbus_return_val_if_fail (error != NULL, FALSE);  
   _dbus_assert ((error->name != NULL && error->message != NULL) ||
                 (error->name == NULL && error->message == NULL));
   return error->name != NULL;
@@ -307,9 +311,11 @@ dbus_set_error (DBusError  *error,
     return;
 
   /* it's a bug to pile up errors */
+  _dbus_return_if_error_is_set (error);
+  _dbus_return_if_fail (name != NULL);
+  
   _dbus_assert (error->name == NULL);
   _dbus_assert (error->message == NULL);
-  _dbus_assert (name != NULL);
 
   if (format == NULL)
     format = message_from_error (name);
index 30f47f0..25bd52b 100644 (file)
@@ -356,6 +356,12 @@ _dbus_type_to_string (int type)
     }
 }
 
+#ifndef DBUS_DISABLE_CHECKS
+const char _dbus_return_if_fail_warning_format[] =
+"Arguments to %s were incorrect, assertion \"%s\" failed in file %s line %d.\n"
+"This is normally a bug in some application using the D-BUS library.\n";
+#endif
+
 #ifndef DBUS_DISABLE_ASSERT
 /**
  * Internals of _dbus_assert(); it's a function
index c99caa7..6a0ae74 100644 (file)
@@ -43,6 +43,14 @@ void _dbus_verbose_real       (const char *format,
                                ...) _DBUS_GNUC_PRINTF (1, 2);
 void _dbus_verbose_reset_real (void);
 
+#if defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)
+#define _DBUS_FUNCTION_NAME __func__
+#elif defined(__GNUC__)
+#define _DBUS_FUNCTION_NAME __FUNCTION__
+#else
+#define _DBUS_FUNCTION_NAME "unknown function"
+#endif
+
 #ifdef DBUS_ENABLE_VERBOSE_MODE
 #  define _dbus_verbose _dbus_verbose_real
 #  define _dbus_verbose_reset _dbus_verbose_reset_real
@@ -80,6 +88,28 @@ void _dbus_real_assert_not_reached (const char *explanation,
   _dbus_real_assert_not_reached (explanation, __FILE__, __LINE__)
 #endif /* !DBUS_DISABLE_ASSERT */
 
+#ifdef DBUS_DISABLE_CHECKS
+#define _dbus_return_if_fail(condition)
+#define _dbus_return_val_if_fail(condition, val)
+#else
+extern const char _dbus_return_if_fail_warning_format[];
+
+#define _dbus_return_if_fail(condition) do {                            \
+  if (!(condition)) {                                                   \
+    _dbus_warn (_dbus_return_if_fail_warning_format,                    \
+                _DBUS_FUNCTION_NAME, #condition, __FILE__, __LINE__);   \
+    return;                                                             \
+  } } while (0)
+
+#define _dbus_return_val_if_fail(condition, val) do {                   \
+  if (!(condition)) {                                                   \
+    _dbus_warn (_dbus_return_if_fail_warning_format,                    \
+                _DBUS_FUNCTION_NAME, #condition, __FILE__, __LINE__);   \
+    return (val);                                                       \
+  } } while (0)
+
+#endif /* !DBUS_DISABLE_ASSERT */
+
 #define _DBUS_N_ELEMENTS(array) ((int) (sizeof ((array)) / sizeof ((array)[0])))
 
 #define _DBUS_POINTER_TO_INT(pointer) ((long)(pointer))
@@ -93,6 +123,9 @@ void _dbus_real_assert_not_reached (const char *explanation,
 #define _DBUS_ASSERT_ERROR_IS_SET(error)   _dbus_assert ((error) == NULL || dbus_error_is_set ((error)))
 #define _DBUS_ASSERT_ERROR_IS_CLEAR(error) _dbus_assert ((error) == NULL || !dbus_error_is_set ((error)))
 
+#define _dbus_return_if_error_is_set(error) _dbus_return_if_fail ((error) == NULL || !dbus_error_is_set ((error)))
+#define _dbus_return_val_if_error_is_set(error, val) _dbus_return_val_if_fail ((error) == NULL || !dbus_error_is_set ((error)), (val))
+
 /* This alignment thing is from ORBit2 */
 /* Align a value upward to a boundary, expressed as a number of bytes.
  * E.g. align to an 8-byte boundary with argument of 8.
index fb9eff0..964f7d7 100644 (file)
@@ -192,6 +192,8 @@ dbus_message_handler_new (DBusHandleMessageFunction function,
 void
 dbus_message_handler_ref (DBusMessageHandler *handler)
 {
+  _dbus_return_if_fail (handler != NULL);
+  
   _DBUS_LOCK (message_handler);
   _dbus_assert (handler != NULL);
   
@@ -209,6 +211,8 @@ void
 dbus_message_handler_unref (DBusMessageHandler *handler)
 {
   int refcount;
+
+  _dbus_return_if_fail (handler != NULL);
   
   _DBUS_LOCK (message_handler);
   
@@ -254,6 +258,9 @@ void*
 dbus_message_handler_get_data (DBusMessageHandler *handler)
 {
   void* user_data;
+
+  _dbus_return_val_if_fail (handler != NULL, NULL);
+  
   _DBUS_LOCK (message_handler);
   user_data = handler->user_data;
   _DBUS_UNLOCK (message_handler);
@@ -276,6 +283,8 @@ dbus_message_handler_set_data (DBusMessageHandler *handler,
 {
   DBusFreeFunction old_free_func;
   void *old_user_data;
+
+  _dbus_return_if_fail (handler != NULL);
   
   _DBUS_LOCK (message_handler);
   old_free_func = handler->free_user_data;
@@ -301,6 +310,8 @@ void
 dbus_message_handler_set_function (DBusMessageHandler        *handler,
                                    DBusHandleMessageFunction  function)
 {
+  _dbus_return_if_fail (handler != NULL);
+  
   _DBUS_LOCK (message_handler);
   handler->function = function;
   _DBUS_UNLOCK (message_handler);
index fe07c86..c9053eb 100644 (file)
@@ -789,8 +789,8 @@ _dbus_message_remove_size_counter (DBusMessage  *message,
 
 static dbus_bool_t
 dbus_message_create_header (DBusMessage *message,
-                            const char  *service,
-                            const char  *name)
+                            const char  *name,
+                            const char  *service)
 {
   unsigned int flags;
   
@@ -936,22 +936,24 @@ dbus_message_new_empty_header (void)
  * @todo reverse the arguments, first 'name' then 'service'
  * as 'name' is more fundamental
  *
- * @param service service that the message should be sent to or #NULL
  * @param name name of the message
+ * @param destination_service service that the message should be sent to or #NULL
  * @returns a new DBusMessage, free with dbus_message_unref()
  * @see dbus_message_unref()
  */
 DBusMessage*
-dbus_message_new (const char *service,
-                 const char *name)
+dbus_message_new (const char *name,
+                  const char *destination_service)               
 {
   DBusMessage *message;
 
+  _dbus_return_val_if_fail (name != NULL, NULL);
+  
   message = dbus_message_new_empty_header ();
   if (message == NULL)
     return NULL;
   
-  if (!dbus_message_create_header (message, service, name))
+  if (!dbus_message_create_header (message, name, destination_service))
     {
       dbus_message_unref (message);
       return NULL;
@@ -976,6 +978,8 @@ dbus_message_new_reply (DBusMessage *original_message)
   DBusMessage *message;
   const char *sender, *name;
 
+  _dbus_return_val_if_fail (original_message != NULL, NULL);
+  
   sender = get_string_field (original_message,
                              FIELD_SENDER, NULL);
   name = get_string_field (original_message,
@@ -983,7 +987,7 @@ dbus_message_new_reply (DBusMessage *original_message)
 
   /* sender is allowed to be null here in peer-to-peer case */
   
-  message = dbus_message_new (sender, name);
+  message = dbus_message_new (name, sender);
   
   if (message == NULL)
     return NULL;
@@ -1003,7 +1007,7 @@ dbus_message_new_reply (DBusMessage *original_message)
  *
  * @param original_message the original message
  * @param error_name the error name
- * @param error_message the error message string
+ * @param error_message the error message string or #NULL for none
  * @returns a new error message
  */
 DBusMessage*
@@ -1015,12 +1019,15 @@ dbus_message_new_error_reply (DBusMessage *original_message,
   const char *sender;
   DBusMessageIter iter;
 
+  _dbus_return_val_if_fail (original_message != NULL, NULL);
+  _dbus_return_val_if_fail (error_name != NULL, NULL);
+  
   sender = get_string_field (original_message,
                              FIELD_SENDER, NULL);
   
   _dbus_assert (sender != NULL);
   
-  message = dbus_message_new (sender, error_name);
+  message = dbus_message_new (error_name, sender);
   
   if (message == NULL)
     return NULL;
@@ -1032,11 +1039,14 @@ dbus_message_new_error_reply (DBusMessage *original_message,
       return NULL;
     }
 
-  dbus_message_append_iter_init (message, &iter);
-  if (!dbus_message_iter_append_string (&iter, error_message))
+  if (error_message != NULL)
     {
-      dbus_message_unref (message);
-      return NULL;
+      dbus_message_append_iter_init (message, &iter);
+      if (!dbus_message_iter_append_string (&iter, error_message))
+        {
+          dbus_message_unref (message);
+          return NULL;
+        }
     }
 
   dbus_message_set_is_error (message, TRUE);
@@ -1056,6 +1066,8 @@ dbus_message_copy (const DBusMessage *message)
 {
   DBusMessage *retval;
   int i;
+
+  _dbus_return_val_if_fail (message != NULL, NULL);
   
   retval = dbus_new0 (DBusMessage, 1);
   if (retval == NULL)
@@ -1121,6 +1133,8 @@ dbus_message_ref (DBusMessage *message)
 {
   dbus_atomic_t refcount;
 
+  _dbus_return_if_fail (message != NULL);
+  
   refcount = _dbus_atomic_inc (&message->refcount);
   _dbus_assert (refcount > 1);
 }
@@ -1131,7 +1145,7 @@ free_size_counter (void *element,
 {
   DBusCounter *counter = element;
   DBusMessage *message = data;
-
+  
   _dbus_counter_adjust (counter, - message->size_counter_delta);
 
   _dbus_counter_unref (counter);
@@ -1148,6 +1162,8 @@ dbus_message_unref (DBusMessage *message)
 {
   dbus_atomic_t refcount;
 
+  _dbus_return_if_fail (message != NULL);
+  
   refcount = _dbus_atomic_dec (&message->refcount);
   
   _dbus_assert (refcount >= 0);
@@ -1174,6 +1190,8 @@ dbus_message_unref (DBusMessage *message)
 const char*
 dbus_message_get_name (DBusMessage *message)
 {
+  _dbus_return_val_if_fail (message != NULL, NULL);
+  
   return get_string_field (message, FIELD_NAME, NULL);
 }
 
@@ -1191,6 +1209,8 @@ dbus_message_get_name (DBusMessage *message)
 const char*
 dbus_message_get_service (DBusMessage *message)
 {
+  _dbus_return_val_if_fail (message != NULL, NULL);
+  
   return get_string_field (message, FIELD_SERVICE, NULL);
 }
 
@@ -1220,6 +1240,8 @@ dbus_message_append_args (DBusMessage *message,
   dbus_bool_t retval;
   va_list var_args;
 
+  _dbus_return_val_if_fail (message != NULL, FALSE);
+  
   va_start (var_args, first_arg_type);
   retval = dbus_message_append_args_valist (message,
                                            first_arg_type,
@@ -1250,6 +1272,8 @@ dbus_message_append_args_valist (DBusMessage *message,
   int type, old_len;
   DBusMessageIter iter;
 
+  _dbus_return_val_if_fail (message != NULL, FALSE);
+  
   old_len = _dbus_string_get_length (&message->body);
   
   type = first_arg_type;
@@ -1405,7 +1429,8 @@ dbus_message_get_args (DBusMessage     *message,
   dbus_bool_t retval;
   va_list var_args;
 
-  _DBUS_ASSERT_ERROR_IS_CLEAR (error);
+  _dbus_return_val_if_fail (message != NULL, FALSE);
+  _dbus_return_val_if_error_is_set (error, FALSE);
   
   va_start (var_args, first_arg_type);
   retval = dbus_message_get_args_valist (message, error, first_arg_type, var_args);
@@ -1434,6 +1459,9 @@ dbus_message_get_args_valist (DBusMessage     *message,
 {
   DBusMessageIter iter;
 
+  _dbus_return_val_if_fail (message != NULL, FALSE);
+  _dbus_return_val_if_error_is_set (error, FALSE);
+  
   dbus_message_iter_init (message, &iter);
   return dbus_message_iter_get_args_valist (&iter, error, first_arg_type, var_args);
 }
@@ -1459,7 +1487,8 @@ dbus_message_iter_get_args (DBusMessageIter *iter,
   dbus_bool_t retval;
   va_list var_args;
 
-  _DBUS_ASSERT_ERROR_IS_CLEAR (error);
+  _dbus_return_val_if_fail (iter != NULL, FALSE);
+  _dbus_return_val_if_error_is_set (error, FALSE);
   
   va_start (var_args, first_arg_type);
   retval = dbus_message_iter_get_args_valist (iter, error, first_arg_type, var_args);
@@ -1499,7 +1528,8 @@ dbus_message_iter_get_args_valist (DBusMessageIter *iter,
   int spec_type, msg_type, i;
   dbus_bool_t retval;
 
-  _DBUS_ASSERT_ERROR_IS_CLEAR (error);
+  _dbus_return_val_if_fail (iter != NULL, FALSE);
+  _dbus_return_val_if_error_is_set (error, FALSE);
 
   retval = FALSE;
   
@@ -1756,11 +1786,14 @@ dbus_message_iter_get_args_valist (DBusMessageIter *iter,
  * @param iter pointer to an iterator to initialize
  */
 void
-dbus_message_iter_init (DBusMessage *message,
+dbus_message_iter_init (DBusMessage     *message,
                        DBusMessageIter *iter)
 {
   DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
 
+  _dbus_return_if_fail (message != NULL);
+  _dbus_return_if_fail (iter != NULL);
+  
   _dbus_assert (sizeof (DBusMessageRealIter) <= sizeof (DBusMessageIter));
   
   real->message = message;
@@ -1777,14 +1810,31 @@ dbus_message_iter_init (DBusMessage *message,
   real->array_type_pos = 0;
 }
 
-static void
+#ifndef DBUS_DISABLE_CHECKS
+static dbus_bool_t
 dbus_message_iter_check (DBusMessageRealIter *iter)
 {
-  if (iter->changed_stamp != iter->message->changed_stamp) 
-    _dbus_warn ("dbus iterator check failed: invalid iterator\n");
+  if (iter == NULL)
+    {
+      _dbus_warn ("dbus iterator check failed: iterator is NULL\n");
+      return FALSE;
+    }
+  
+  if (iter->changed_stamp != iter->message->changed_stamp)
+    {
+      _dbus_warn ("dbus iterator check failed: invalid iterator, must re-initialize it after modifying the message\n");
+      return FALSE;
+    }
+  
   if (iter->pos < 0 || iter->pos > iter->end)
-    _dbus_warn ("dbus iterator check failed: invalid position\n");
+    {
+      _dbus_warn ("dbus iterator check failed: invalid position\n");
+      return FALSE;
+    }
+
+  return TRUE;
 }
+#endif /* DBUS_DISABLE_CHECKS */
 
 static int
 skip_array_type (DBusMessageRealIter *iter, int pos)
@@ -1868,7 +1918,7 @@ dbus_message_iter_has_next (DBusMessageIter *iter)
   int end_pos;
   int type, pos;
 
-  dbus_message_iter_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_check (real), FALSE);
 
   if (real->pos >= real->end)
     return FALSE;
@@ -1899,7 +1949,7 @@ dbus_message_iter_next (DBusMessageIter *iter)
   int end_pos;
   int type, pos;
 
-  dbus_message_iter_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_check (real), FALSE);
 
   pos = dbus_message_iter_get_data_start (real, &type);
   
@@ -1929,7 +1979,7 @@ dbus_message_iter_get_arg_type (DBusMessageIter *iter)
   DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
   int type, pos;
 
-  dbus_message_iter_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_check (real), DBUS_TYPE_INVALID);
 
   if (real->pos >= real->end)
     return DBUS_TYPE_INVALID;
@@ -1996,7 +2046,7 @@ dbus_message_iter_get_array_type (DBusMessageIter *iter)
   DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
   int type, pos;
 
-  dbus_message_iter_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_check (real), DBUS_TYPE_INVALID);
 
   if (real->pos >= real->end)
     return DBUS_TYPE_INVALID;
@@ -2024,7 +2074,7 @@ dbus_message_iter_get_string (DBusMessageIter *iter)
   DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
   int type, pos;
 
-  dbus_message_iter_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_check (real), NULL);
 
   pos = dbus_message_iter_get_data_start (real, &type);
   
@@ -2058,7 +2108,7 @@ dbus_message_iter_get_named (DBusMessageIter   *iter,
   int type, pos;
   char *_name;
 
-  dbus_message_iter_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_check (real), FALSE);
 
   pos = dbus_message_iter_get_data_start (real, &type);
   
@@ -2098,7 +2148,7 @@ dbus_message_iter_get_byte (DBusMessageIter *iter)
   DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
   int type, pos;
 
-  dbus_message_iter_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_check (real), 0);
 
   pos = dbus_message_iter_get_data_start (real, &type);
   
@@ -2126,7 +2176,7 @@ dbus_message_iter_get_boolean (DBusMessageIter *iter)
   DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
   int type, pos;
 
-  dbus_message_iter_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_check (real), FALSE);
 
   pos = dbus_message_iter_get_data_start (real, &type);
   
@@ -2152,7 +2202,7 @@ dbus_message_iter_get_int32 (DBusMessageIter *iter)
   DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
   int type, pos;
 
-  dbus_message_iter_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_check (real), 0);
 
   pos = dbus_message_iter_get_data_start (real, &type);
   
@@ -2177,7 +2227,7 @@ dbus_message_iter_get_uint32 (DBusMessageIter *iter)
   DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
   int type, pos;
 
-  dbus_message_iter_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_check (real), 0);
 
   pos = dbus_message_iter_get_data_start (real, &type);
   
@@ -2206,7 +2256,7 @@ dbus_message_iter_get_int64 (DBusMessageIter *iter)
   DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
   int type, pos;
 
-  dbus_message_iter_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_check (real), 0);
 
   pos = dbus_message_iter_get_data_start (real, &type);
   
@@ -2233,7 +2283,7 @@ dbus_message_iter_get_uint64 (DBusMessageIter *iter)
   DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
   int type, pos;
 
-  dbus_message_iter_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_check (real), 0);
 
   pos = dbus_message_iter_get_data_start (real, &type);
   
@@ -2260,7 +2310,7 @@ dbus_message_iter_get_double (DBusMessageIter *iter)
   DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
   int type, pos;
 
-  dbus_message_iter_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_check (real), 0.0);
 
   pos = dbus_message_iter_get_data_start (real, &type);
   
@@ -2293,7 +2343,7 @@ dbus_message_iter_init_array_iterator (DBusMessageIter *iter,
   int type, pos, len_pos, len, array_type_pos;
   int _array_type;
 
-  dbus_message_iter_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_check (real), FALSE);
 
   pos = dbus_message_iter_get_data_start (real, &type);
   
@@ -2343,7 +2393,7 @@ dbus_message_iter_init_dict_iterator (DBusMessageIter *iter,
   DBusMessageRealIter *dict_real = (DBusMessageRealIter *)dict_iter;
   int type, pos, len_pos, len;
 
-  dbus_message_iter_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_check (real), FALSE);
 
   pos = dbus_message_iter_get_data_start (real, &type);
   
@@ -2386,7 +2436,7 @@ dbus_message_iter_get_byte_array (DBusMessageIter  *iter,
   DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
   int type, pos;
 
-  dbus_message_iter_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_check (real), FALSE);
 
   pos = dbus_message_iter_get_data_start (real, &type);
   
@@ -2421,7 +2471,7 @@ dbus_message_iter_get_boolean_array (DBusMessageIter   *iter,
   DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
   int type, pos;
 
-  dbus_message_iter_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_check (real), FALSE);
 
   pos = dbus_message_iter_get_data_start (real, &type);
   
@@ -2456,7 +2506,7 @@ dbus_message_iter_get_int32_array  (DBusMessageIter *iter,
   DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
   int type, pos;
 
-  dbus_message_iter_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_check (real), FALSE);
 
   pos = dbus_message_iter_get_data_start (real, &type);
   
@@ -2491,7 +2541,7 @@ dbus_message_iter_get_uint32_array  (DBusMessageIter *iter,
   DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
   int type, pos;
 
-  dbus_message_iter_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_check (real), FALSE);
 
   pos = dbus_message_iter_get_data_start (real, &type);
   
@@ -2529,7 +2579,7 @@ dbus_message_iter_get_int64_array  (DBusMessageIter *iter,
   DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
   int type, pos;
 
-  dbus_message_iter_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_check (real), FALSE);
 
   pos = dbus_message_iter_get_data_start (real, &type);
   
@@ -2566,7 +2616,7 @@ dbus_message_iter_get_uint64_array  (DBusMessageIter *iter,
   DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
   int type, pos;
 
-  dbus_message_iter_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_check (real), FALSE);
 
   pos = dbus_message_iter_get_data_start (real, &type);
   
@@ -2602,7 +2652,7 @@ dbus_message_iter_get_double_array  (DBusMessageIter *iter,
   DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
   int type, pos;
 
-  dbus_message_iter_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_check (real), FALSE);
 
   pos = dbus_message_iter_get_data_start (real, &type);
   
@@ -2641,7 +2691,7 @@ dbus_message_iter_get_string_array (DBusMessageIter *iter,
   DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
   int type, pos;
 
-  dbus_message_iter_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_check (real), FALSE);
 
   pos = dbus_message_iter_get_data_start (real, &type);
   
@@ -2671,7 +2721,7 @@ dbus_message_iter_get_dict_key (DBusMessageIter   *iter)
 {
   DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
 
-  dbus_message_iter_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_check (real), NULL);
 
   _dbus_assert (real->type == DBUS_MESSAGE_ITER_TYPE_DICT);
 
@@ -2688,10 +2738,13 @@ dbus_message_iter_get_dict_key (DBusMessageIter   *iter)
  * @param iter pointer to an iterator to initialize
  */
 void
-dbus_message_append_iter_init (DBusMessage *message,
+dbus_message_append_iter_init (DBusMessage     *message,
                               DBusMessageIter *iter)
 {
   DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
+
+  _dbus_return_if_fail (message != NULL);
+  _dbus_return_if_fail (iter != NULL);
   
   real->message = message;
   real->parent_iter = NULL;
@@ -2705,24 +2758,47 @@ dbus_message_append_iter_init (DBusMessage *message,
   real->wrote_dict_key = 0;
 }
 
-static void
+#ifndef DBUS_DISABLE_CHECKS
+static dbus_bool_t
 dbus_message_iter_append_check (DBusMessageRealIter *iter)
 {
-  _dbus_assert (!iter->message->locked);
+  if (iter == NULL)
+    {
+      _dbus_warn ("dbus iterator check failed: NULL iterator\n");
+      return FALSE;
+    }
   
+  if (iter->message->locked)
+    {
+      _dbus_warn ("dbus iterator check failed: message is locked (has already been sent)\n");
+      return FALSE;
+    }
+      
   if (iter->changed_stamp != iter->message->changed_stamp)
-    _dbus_warn ("dbus iterator check failed: invalid iterator");
+    {
+      _dbus_warn ("dbus iterator check failed: invalid iterator, must re-initialize it after modifying the message");
+      return FALSE;
+    }
   
   if (iter->pos != iter->end)
-    _dbus_warn ("dbus iterator check failed: can only append at end of message");
+    {
+      _dbus_warn ("dbus iterator check failed: can only append at end of message");
+      return FALSE;
+    }
   
   if (iter->pos != _dbus_string_get_length (&iter->message->body))
-    _dbus_warn ("dbus iterator check failed: append pos not at end of message string");
+    {
+      _dbus_warn ("dbus iterator check failed: append pos not at end of message string");
+      return FALSE;
+    }
+
+  return TRUE;
 }
+#endif /* DBUS_DISABLE_CHECKS */
 
 static dbus_bool_t
 dbus_message_iter_append_type (DBusMessageRealIter *iter,
-                              int type)
+                              int                  type)
 {
   const char *data;
   switch (iter->type)
@@ -2802,7 +2878,7 @@ dbus_message_iter_append_nil (DBusMessageIter *iter)
 {
   DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
 
-  dbus_message_iter_append_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_append_check (real), FALSE);
 
   if (!dbus_message_iter_append_type (real, DBUS_TYPE_NIL))
     return FALSE;
@@ -2825,7 +2901,7 @@ dbus_message_iter_append_boolean (DBusMessageIter *iter,
 {
   DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
 
-  dbus_message_iter_append_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_append_check (real), FALSE);
 
   if (!dbus_message_iter_append_type (real, DBUS_TYPE_BOOLEAN))
     return FALSE;
@@ -2854,7 +2930,7 @@ dbus_message_iter_append_byte (DBusMessageIter *iter,
 {
   DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
 
-  dbus_message_iter_append_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_append_check (real), FALSE);
 
   if (!dbus_message_iter_append_type (real, DBUS_TYPE_BYTE))
     return FALSE;
@@ -2884,7 +2960,7 @@ dbus_message_iter_append_int32   (DBusMessageIter *iter,
 {
   DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
 
-  dbus_message_iter_append_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_append_check (real), FALSE);
 
   if (!dbus_message_iter_append_type (real, DBUS_TYPE_INT32))
     return FALSE;
@@ -2913,7 +2989,7 @@ dbus_message_iter_append_uint32 (DBusMessageIter *iter,
 {
   DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
 
-  dbus_message_iter_append_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_append_check (real), FALSE);
 
   if (!dbus_message_iter_append_type (real, DBUS_TYPE_UINT32))
     return FALSE;
@@ -2946,7 +3022,7 @@ dbus_message_iter_append_int64   (DBusMessageIter *iter,
 {
   DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
 
-  dbus_message_iter_append_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_append_check (real), FALSE);
 
   if (!dbus_message_iter_append_type (real, DBUS_TYPE_INT64))
     return FALSE;
@@ -2977,7 +3053,7 @@ dbus_message_iter_append_uint64 (DBusMessageIter *iter,
 {
   DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
 
-  dbus_message_iter_append_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_append_check (real), FALSE);
 
   if (!dbus_message_iter_append_type (real, DBUS_TYPE_UINT64))
     return FALSE;
@@ -3008,7 +3084,7 @@ dbus_message_iter_append_double (DBusMessageIter *iter,
 {
   DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
 
-  dbus_message_iter_append_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_append_check (real), FALSE);
 
   if (!dbus_message_iter_append_type (real, DBUS_TYPE_DOUBLE))
     return FALSE;
@@ -3037,7 +3113,7 @@ dbus_message_iter_append_string (DBusMessageIter *iter,
 {
   DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
 
-  dbus_message_iter_append_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_append_check (real), FALSE);
 
   if (!dbus_message_iter_append_type (real, DBUS_TYPE_STRING))
     return FALSE;
@@ -3073,7 +3149,7 @@ dbus_message_iter_append_named (DBusMessageIter      *iter,
 {
   DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
 
-  dbus_message_iter_append_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_append_check (real), FALSE);
 
   if (!dbus_message_iter_append_type (real, DBUS_TYPE_NAMED))
     return FALSE;
@@ -3110,7 +3186,7 @@ dbus_message_iter_append_dict_key (DBusMessageIter *iter,
 {
   DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
 
-  dbus_message_iter_append_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_append_check (real), FALSE);
   _dbus_assert (real->type == DBUS_MESSAGE_ITER_TYPE_DICT);
   
   if (real->wrote_dict_key)
@@ -3232,7 +3308,7 @@ dbus_message_iter_append_array (DBusMessageIter      *iter,
       return FALSE;
     }
   
-  dbus_message_iter_append_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_append_check (real), FALSE);
 
   if (!append_array_type (real, element_type, &array_type_done, &array_type_pos))
     return FALSE;
@@ -3284,7 +3360,7 @@ dbus_message_iter_append_dict (DBusMessageIter      *iter,
   DBusMessageRealIter *dict_real = (DBusMessageRealIter *)dict_iter;
   int len_pos;
 
-  dbus_message_iter_append_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_append_check (real), FALSE);
 
   if (!dbus_message_iter_append_type (real, DBUS_TYPE_DICT))
     return FALSE;
@@ -3331,7 +3407,7 @@ dbus_message_iter_append_boolean_array (DBusMessageIter     *iter,
 {
   DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
 
-  dbus_message_iter_append_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_append_check (real), FALSE);
 
   if (!append_array_type (real, DBUS_TYPE_BOOLEAN, NULL, NULL))
     return FALSE;
@@ -3362,7 +3438,7 @@ dbus_message_iter_append_int32_array (DBusMessageIter    *iter,
 {
   DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
 
-  dbus_message_iter_append_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_append_check (real), FALSE);
 
   if (!append_array_type (real, DBUS_TYPE_INT32, NULL, NULL))
     return FALSE;
@@ -3393,7 +3469,7 @@ dbus_message_iter_append_uint32_array (DBusMessageIter     *iter,
 {
   DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
 
-  dbus_message_iter_append_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_append_check (real), FALSE);
 
   if (!append_array_type (real, DBUS_TYPE_UINT32, NULL, NULL))
     return FALSE;
@@ -3428,7 +3504,7 @@ dbus_message_iter_append_int64_array (DBusMessageIter    *iter,
 {
   DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
 
-  dbus_message_iter_append_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_append_check (real), FALSE);
 
   if (!append_array_type (real, DBUS_TYPE_INT64, NULL, NULL))
     return FALSE;
@@ -3461,7 +3537,7 @@ dbus_message_iter_append_uint64_array (DBusMessageIter     *iter,
 {
   DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
 
-  dbus_message_iter_append_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_append_check (real), FALSE);
 
   if (!append_array_type (real, DBUS_TYPE_UINT64, NULL, NULL))
     return FALSE;
@@ -3493,7 +3569,7 @@ dbus_message_iter_append_double_array (DBusMessageIter *iter,
 {
   DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
 
-  dbus_message_iter_append_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_append_check (real), FALSE);
 
   if (!append_array_type (real, DBUS_TYPE_DOUBLE, NULL, NULL))
     return FALSE;
@@ -3524,7 +3600,7 @@ dbus_message_iter_append_byte_array (DBusMessageIter     *iter,
 {
   DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
 
-  dbus_message_iter_append_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_append_check (real), FALSE);
 
   if (!append_array_type (real, DBUS_TYPE_BYTE, NULL, NULL))
     return FALSE;
@@ -3555,7 +3631,7 @@ dbus_message_iter_append_string_array (DBusMessageIter *iter,
 {
   DBusMessageRealIter *real = (DBusMessageRealIter *)iter;
 
-  dbus_message_iter_append_check (real);
+  _dbus_return_val_if_fail (dbus_message_iter_append_check (real), FALSE);
 
   if (!append_array_type (real, DBUS_TYPE_STRING, NULL, NULL))
     return FALSE;
@@ -3582,7 +3658,8 @@ dbus_bool_t
 dbus_message_set_sender (DBusMessage  *message,
                          const char   *sender)
 {
-  _dbus_assert (!message->locked);
+  _dbus_return_val_if_fail (message != NULL, FALSE);
+  _dbus_return_val_if_fail (!message->locked, FALSE);
 
   if (sender == NULL)
     {
@@ -3609,8 +3686,9 @@ dbus_message_set_is_error (DBusMessage *message,
                            dbus_bool_t  is_error_reply)
 {
   char *header;
-  
-  _dbus_assert (!message->locked);
+
+  _dbus_return_if_fail (message != NULL);
+  _dbus_return_if_fail (!message->locked);
   
   header = _dbus_string_get_data_len (&message->header, 1, 1);
   
@@ -3632,6 +3710,8 @@ dbus_message_get_is_error (DBusMessage *message)
 {
   const char *header;
 
+  _dbus_return_val_if_fail (message != NULL, FALSE);
+  
   header = _dbus_string_get_const_data_len (&message->header, 1, 1);
 
   return (*header & DBUS_HEADER_FLAG_ERROR) != 0;
@@ -3647,6 +3727,8 @@ dbus_message_get_is_error (DBusMessage *message)
 const char*
 dbus_message_get_sender (DBusMessage *message)
 {
+  _dbus_return_val_if_fail (message != NULL, NULL);
+  
   return get_string_field (message, FIELD_SENDER, NULL);
 }
 
@@ -3666,7 +3748,8 @@ dbus_message_name_is (DBusMessage *message,
 {
   const char *n;
 
-  _dbus_assert (name != NULL);
+  _dbus_return_val_if_fail (message != NULL, FALSE);
+  _dbus_return_val_if_fail (name != NULL, FALSE);
   
   n = dbus_message_get_name (message);
 
@@ -3692,7 +3775,8 @@ dbus_message_service_is (DBusMessage  *message,
 {
   const char *s;
 
-  _dbus_assert (service != NULL);
+  _dbus_return_val_if_fail (message != NULL, FALSE);
+  _dbus_return_val_if_fail (service != NULL, FALSE);
   
   s = dbus_message_get_service (message);
 
@@ -3754,6 +3838,9 @@ dbus_set_error_from_message (DBusError   *error,
                              DBusMessage *message)
 {
   char *str;
+
+  _dbus_return_val_if_fail (message != NULL, FALSE);
+  _dbus_return_val_if_error_is_set (error, FALSE);
   
   if (!dbus_message_get_is_error (message))
     return FALSE;
@@ -5485,7 +5572,7 @@ _dbus_message_test (const char *test_data_dir)
   _dbus_assert (sizeof (DBusMessageRealIter) <= sizeof (DBusMessageIter));
 
   /* Test the vararg functions */
-  message = dbus_message_new ("org.freedesktop.DBus.Test", "test.Message");
+  message = dbus_message_new ("test.Message", "org.freedesktop.DBus.Test");
   _dbus_message_set_serial (message, 1);
   dbus_message_append_args (message,
                            DBUS_TYPE_INT32, -0x12345678,
@@ -5533,7 +5620,7 @@ _dbus_message_test (const char *test_data_dir)
   dbus_message_unref (message);
   dbus_message_unref (copy);
   
-  message = dbus_message_new ("org.freedesktop.DBus.Test", "test.Message");
+  message = dbus_message_new ("test.Message", "org.freedesktop.DBus.Test");
   _dbus_message_set_serial (message, 1);
   dbus_message_set_reply_serial (message, 0x12345678);
 
index dd33804..72a60d0 100644 (file)
@@ -277,7 +277,8 @@ dbus_server_listen (const char     *address,
   const char *address_problem_field;
   const char *address_problem_other;
 
-  _DBUS_ASSERT_ERROR_IS_CLEAR (error);
+  _dbus_return_val_if_fail (address != NULL, NULL);
+  _dbus_return_val_if_error_is_set (error, NULL);
   
   if (!dbus_parse_address (address, &entries, &len, error))
     return NULL;
@@ -452,6 +453,8 @@ dbus_server_listen (const char     *address,
 void
 dbus_server_ref (DBusServer *server)
 {
+  _dbus_return_if_fail (server != NULL);
+  
   server->refcount += 1;
 }
 
@@ -466,7 +469,8 @@ dbus_server_ref (DBusServer *server)
 void
 dbus_server_unref (DBusServer *server)
 {
-  _dbus_assert (server != NULL);
+  _dbus_return_if_fail (server != NULL);
+
   _dbus_assert (server->refcount > 0);
 
   server->refcount -= 1;
@@ -489,6 +493,8 @@ dbus_server_unref (DBusServer *server)
 void
 dbus_server_disconnect (DBusServer *server)
 {
+  _dbus_return_if_fail (server != NULL);
+  
   _dbus_assert (server->vtable->disconnect != NULL);
 
   if (server->disconnected)
@@ -506,6 +512,8 @@ dbus_server_disconnect (DBusServer *server)
 dbus_bool_t
 dbus_server_get_is_connected (DBusServer *server)
 {
+  _dbus_return_val_if_fail (server != NULL, FALSE);
+  
   return !server->disconnected;
 }
 
@@ -519,6 +527,8 @@ dbus_server_get_is_connected (DBusServer *server)
 char*
 dbus_server_get_address (DBusServer *server)
 {
+  _dbus_return_val_if_fail (server != NULL, NULL);
+  
   return _dbus_strdup (server->address);
 }
 
@@ -540,6 +550,8 @@ dbus_server_set_new_connection_function (DBusServer                *server,
                                          void                      *data,
                                          DBusFreeFunction           free_data_function)
 {
+  _dbus_return_if_fail (server != NULL);
+  
   if (server->new_connection_free_data_function != NULL)
     (* server->new_connection_free_data_function) (server->new_connection_data);
   
@@ -572,6 +584,8 @@ dbus_server_set_watch_functions (DBusServer              *server,
                                  void                    *data,
                                  DBusFreeFunction         free_data_function)
 {
+  _dbus_return_val_if_fail (server != NULL, FALSE);
+  
   return _dbus_watch_list_set_functions (server->watches,
                                          add_function,
                                          remove_function,
@@ -603,6 +617,8 @@ dbus_server_set_timeout_functions (DBusServer                *server,
                                   void                      *data,
                                   DBusFreeFunction           free_data_function)
 {
+  _dbus_return_val_if_fail (server != NULL, FALSE);
+  
   return _dbus_timeout_list_set_functions (server->timeouts,
                                            add_function, remove_function,
                                            toggled_function,
@@ -625,6 +641,8 @@ dbus_server_set_auth_mechanisms (DBusServer  *server,
 {
   char **copy;
 
+  _dbus_return_val_if_fail (server != NULL, FALSE);
+  
   if (mechanisms != NULL)
     {
       copy = _dbus_dup_string_array (mechanisms);
@@ -675,6 +693,8 @@ dbus_server_allocate_data_slot (void)
 void
 dbus_server_free_data_slot (int slot)
 {
+  _dbus_return_if_fail (slot >= 0);
+  
   _dbus_data_slot_allocator_free (&slot_allocator, slot);
 }
 
@@ -692,7 +712,7 @@ dbus_server_free_data_slot (int slot)
  * @returns #TRUE if there was enough memory to store the data
  */
 dbus_bool_t
-dbus_server_set_data (DBusServer   *server,
+dbus_server_set_data (DBusServer       *server,
                       int               slot,
                       void             *data,
                       DBusFreeFunction  free_data_func)
@@ -701,6 +721,8 @@ dbus_server_set_data (DBusServer   *server,
   void *old_data;
   dbus_bool_t retval;
 
+  _dbus_return_val_if_fail (server != NULL, FALSE);
+  
 #if 0
   dbus_mutex_lock (server->mutex);
 #endif
@@ -734,9 +756,11 @@ dbus_server_set_data (DBusServer   *server,
  */
 void*
 dbus_server_get_data (DBusServer   *server,
-                      int               slot)
+                      int           slot)
 {
   void *res;
+
+  _dbus_return_val_if_fail (server != NULL, NULL);
   
 #if 0
   dbus_mutex_lock (server->mutex);
index 7161e6e..5a36703 100644 (file)
@@ -588,13 +588,6 @@ _dbus_babysitter_get_child_exited (DBusBabysitter *sitter)
   return sitter->socket_to_babysitter < 0;
 }
 
-static void
-_dbus_babysitter_block_for_child_exit (DBusBabysitter *sitter)
-{
-  while (LIVE_CHILDREN (sitter))
-    babysitter_iteration (sitter, TRUE);
-}
-
 /**
  * Sets the #DBusError with an explanation of why the spawned
  * child process exited (on a signal, or whatever). If
@@ -1162,6 +1155,13 @@ _dbus_spawn_async_with_babysitter (DBusBabysitter          **sitter_p,
 
 #ifdef DBUS_BUILD_TESTS
 
+static void
+_dbus_babysitter_block_for_child_exit (DBusBabysitter *sitter)
+{
+  while (LIVE_CHILDREN (sitter))
+    babysitter_iteration (sitter, TRUE);
+}
+
 static dbus_bool_t
 check_spawn_nonexistent (void *data)
 {
index 9e7b750..147f834 100644 (file)
--- a/doc/TODO
+++ b/doc/TODO
  - there are various bits of code to manage ref/unref of data slots, that should 
    be merged into a generic facility
 
- - add _dbus_return_if_fail, _dbus_return_val_if_fail() and use on public entry 
-   points in place of _dbus_assert(). Add --disable-checks to control whether these
-   do anything.
-
  - assorted _-prefixed symbols in libdbus aren't actually used by
    libdbus, only by the message bus. These bloat up the library
    size. Not sure how to fix, really.
 
  - dbus_error_has_name(), dbus_message_name_is()
 
- - add DBUS_TYPE_INT64 ? 
-
  - if you send a message to a service then block for reply, and the service exits/crashes
    after the message bus has processed your message but before the service has replied, 
    it would be nice if the message bus sent you an error reply.
index 9fcbe4c..d963ee3 100644 (file)
@@ -30,7 +30,8 @@ main (int argc, char **argv)
 
   dbus_connection_setup_with_g_main (connection, NULL);
 
-  message = dbus_message_new ("org.freedesktop.DBus", "org.freedesktop.DBus.Hello");
+  message = dbus_message_new (DBUS_MESSAGE_HELLO,
+                              DBUS_SERVICE_DBUS);
 
   dbus_error_init (&error);
   reply = dbus_connection_send_with_reply_and_block (connection, message, -1, &error);
index 3ae0a51..02ebdf6 100644 (file)
@@ -19,7 +19,7 @@ thread_func (gpointer data)
 
   while (1)
     {
-      message = dbus_message_new (NULL, "org.freedesktop.ThreadTest");
+      message = dbus_message_new ("org.freedesktop.ThreadTest", NULL);
 
       dbus_message_append_iter_init (message, &iter);
 
index f9f9881..a105f8b 100644 (file)
@@ -75,7 +75,7 @@ main (int argc, char *argv[])
       exit (1);
     }
 
-  message = dbus_message_new (dest, name);
+  message = dbus_message_new (name, dest);
   if (message == NULL)
     {
       fprintf (stderr, "Couldn't allocate D-BUS message\n");