]> git.ipfire.org Git - thirdparty/dbus.git/commitdiff
_DBUS_ASSERT_ERROR_XOR_BOOL: Add and use
authorSimon McVittie <smcv@collabora.com>
Tue, 20 Nov 2018 12:17:20 +0000 (12:17 +0000)
committerSimon McVittie <smcv@collabora.com>
Tue, 20 Nov 2018 12:17:20 +0000 (12:17 +0000)
As suggested by Philip Withnall in dbus!43.

Signed-off-by: Simon McVittie <smcv@collabora.com>
bus/activation.c
bus/desktop-file.c
bus/driver.c
dbus/dbus-file-unix.c
dbus/dbus-internals.h
dbus/dbus-sysdeps-unix.c
dbus/dbus-sysdeps-win.c
dbus/dbus-transport.c

index 8f17711ee616fcbd6388f6f8d82b05cb87d8cd8c..706707ce182b3691e2bf1d100ee7a156a8c29e6f 100644 (file)
@@ -821,10 +821,7 @@ update_directory (BusActivation       *activation,
   retval = TRUE;
 
  out:
-  if (!retval)
-    _DBUS_ASSERT_ERROR_IS_SET (error);
-  else
-    _DBUS_ASSERT_ERROR_IS_CLEAR (error);
+  _DBUS_ASSERT_ERROR_XOR_BOOL (error, retval);
 
   if (iter != NULL)
     _dbus_directory_close (iter);
index 69d628c69ce6b0a6b457ddada34f03b02f526a0c..af6bb4eed7031016116b44d775f0e0da39d1fd82 100644 (file)
@@ -688,11 +688,7 @@ bus_desktop_file_load (DBusString *filename,
   parser.desktop_file = NULL;
 
 out:
-  if (result != NULL)
-    _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-  else
-    _DBUS_ASSERT_ERROR_IS_SET (error);
-
+  _DBUS_ASSERT_ERROR_XOR_BOOL (error, result != NULL);
   parser_clear (&parser);
   return result;
 }
index 9b3e43eeb5d99a595749367f4061119015a959d6..267c881dc229cfd3a8d45f0e01a1ae55c9ad7f82 100644 (file)
@@ -2310,10 +2310,7 @@ bus_driver_handle_become_monitor (DBusConnection *connection,
   ret = TRUE;
 
 out:
-  if (ret)
-    _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-  else
-    _DBUS_ASSERT_ERROR_IS_SET (error);
+  _DBUS_ASSERT_ERROR_XOR_BOOL (error, ret);
 
   for (iter = _dbus_list_get_first_link (&rules);
       iter != NULL;
index 830d3fe408894dcac7887b0022b255f8bc69a056..16f3b85a475787701f68c39dce6d028d3d4305a1 100644 (file)
@@ -310,9 +310,7 @@ _dbus_string_save_to_file (const DBusString *str,
 
   _dbus_string_free (&tmp_filename);
 
-  if (!retval)
-    _DBUS_ASSERT_ERROR_IS_SET (error);
-  
+  _DBUS_ASSERT_ERROR_XOR_BOOL (error, retval);
   return retval;
 }
 
index 5120ab9a7451c39393744bc56e64ab3139cdfc84..a11c6bc1b66e3ee8d36430131916f6efaa9b7de7 100644 (file)
@@ -198,6 +198,7 @@ void _dbus_real_assert_not_reached (const char *explanation,
  */
 #define _DBUS_ASSERT_ERROR_IS_SET(error) do { } while (0)
 #define _DBUS_ASSERT_ERROR_IS_CLEAR(error) do { } while (0)
+#define _DBUS_ASSERT_ERROR_XOR_BOOL(error, retval) do { } while (0)
 #else
 static inline void
 _dbus_assert_error_is_set (const DBusError *error)
@@ -211,8 +212,32 @@ _dbus_assert_error_is_clear (const DBusError *error)
     _dbus_assert (error == NULL || !dbus_error_is_set (error));
 }
 
+static inline void
+_dbus_assert_error_xor_bool (const DBusError *error,
+                             dbus_bool_t      retval)
+{
+  _dbus_assert (error == NULL || dbus_error_is_set (error) == !retval);
+}
+
+/**
+ * Assert that error is set, unless it is NULL in which case we cannot
+ * tell whether it would have been set.
+ */
 #define _DBUS_ASSERT_ERROR_IS_SET(error) _dbus_assert_error_is_set(error)
+
+/**
+ * Assert that error is not set, unless it is NULL in which case we cannot
+ * tell whether it would have been set.
+ */
 #define _DBUS_ASSERT_ERROR_IS_CLEAR(error) _dbus_assert_error_is_clear(error)
+
+/**
+ * Assert that error is consistent with retval: if error is not NULL,
+ * it must be set if and only if retval is false.
+ *
+ * retval can be a boolean expression like "result != NULL".
+ */
+#define _DBUS_ASSERT_ERROR_XOR_BOOL(error, retval), _dbus_assert_error_xor_bool (error, retval)
 #endif
 
 #define _dbus_return_if_error_is_set(error) _dbus_return_if_fail ((error) == NULL || !dbus_error_is_set ((error)))
index 2b1c60691cdaf2989c5b171175f60c7b8cc5db8a..026f6b20799a297915967df17a867ee8f27bcb1c 100644 (file)
@@ -4052,10 +4052,7 @@ _read_subprocess_line_argv (const char *progpath,
  out:
   sigprocmask (SIG_SETMASK, &old_set, NULL);
 
-  if (retval)
-    _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-  else
-    _DBUS_ASSERT_ERROR_IS_SET (error);
+  _DBUS_ASSERT_ERROR_XOR_BOOL (error, retval);
 
   if (result_pipe[0] != -1)
     close (result_pipe[0]);
index c1eb073eaecd2c3fafb30c129c5e0839057a63a6..afeeeec2d3f2695acadb958c1fc12645e238d831 100644 (file)
@@ -3217,11 +3217,7 @@ _dbus_get_autolaunch_address (const char *scope, DBusString *address,
     }
 
 out:
-  if (retval)
-    _DBUS_ASSERT_ERROR_IS_CLEAR (error);
-  else
-    _DBUS_ASSERT_ERROR_IS_SET (error);
-  
+  _DBUS_ASSERT_ERROR_XOR_BOOL (error, retval);
   _dbus_global_unlock (mutex);
   _dbus_string_free (&shm_name);
 
index 2337dd35834b1aad8c37d2a036ed77ebcf08e7c4..ed13a9e60199d0ec658aacfca4c0c9daf7226cd8 100644 (file)
@@ -301,10 +301,7 @@ _dbus_transport_new_for_autolaunch (const char *scope, DBusError *error)
     }
 
   result = check_address (_dbus_string_get_const_data (&address), error);
-  if (result == NULL)
-    _DBUS_ASSERT_ERROR_IS_SET (error);
-  else
-    _DBUS_ASSERT_ERROR_IS_CLEAR (error);
+  _DBUS_ASSERT_ERROR_XOR_BOOL (error, result != NULL);
 
  out:
   _dbus_string_free (&address);