summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon McVittie <smcv@collabora.com>2018-11-20 12:17:20 +0000
committerSimon McVittie <smcv@collabora.com>2018-11-20 12:17:20 +0000
commiteef153e82815e19851d3f6dc1a9b1c901c41eb2b (patch)
tree1dea55c57128374c4bfe647bff503278ac040d06
parent3987f5a4bd75a7039e9da21d5dd01ffc1fda5063 (diff)
downloaddbus-eef153e82815e19851d3f6dc1a9b1c901c41eb2b.tar.gz
_DBUS_ASSERT_ERROR_XOR_BOOL: Add and use
As suggested by Philip Withnall in dbus!43. Signed-off-by: Simon McVittie <smcv@collabora.com>
-rw-r--r--bus/activation.c5
-rw-r--r--bus/desktop-file.c6
-rw-r--r--bus/driver.c5
-rw-r--r--dbus/dbus-file-unix.c4
-rw-r--r--dbus/dbus-internals.h25
-rw-r--r--dbus/dbus-sysdeps-unix.c5
-rw-r--r--dbus/dbus-sysdeps-win.c6
-rw-r--r--dbus/dbus-transport.c5
8 files changed, 32 insertions, 29 deletions
diff --git a/bus/activation.c b/bus/activation.c
index 8f17711e..706707ce 100644
--- a/bus/activation.c
+++ b/bus/activation.c
@@ -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);
diff --git a/bus/desktop-file.c b/bus/desktop-file.c
index 69d628c6..af6bb4ee 100644
--- a/bus/desktop-file.c
+++ b/bus/desktop-file.c
@@ -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;
}
diff --git a/bus/driver.c b/bus/driver.c
index 9b3e43ee..267c881d 100644
--- a/bus/driver.c
+++ b/bus/driver.c
@@ -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;
diff --git a/dbus/dbus-file-unix.c b/dbus/dbus-file-unix.c
index 830d3fe4..16f3b85a 100644
--- a/dbus/dbus-file-unix.c
+++ b/dbus/dbus-file-unix.c
@@ -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;
}
diff --git a/dbus/dbus-internals.h b/dbus/dbus-internals.h
index 5120ab9a..a11c6bc1 100644
--- a/dbus/dbus-internals.h
+++ b/dbus/dbus-internals.h
@@ -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)))
diff --git a/dbus/dbus-sysdeps-unix.c b/dbus/dbus-sysdeps-unix.c
index 2b1c6069..026f6b20 100644
--- a/dbus/dbus-sysdeps-unix.c
+++ b/dbus/dbus-sysdeps-unix.c
@@ -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]);
diff --git a/dbus/dbus-sysdeps-win.c b/dbus/dbus-sysdeps-win.c
index c1eb073e..afeeeec2 100644
--- a/dbus/dbus-sysdeps-win.c
+++ b/dbus/dbus-sysdeps-win.c
@@ -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);
diff --git a/dbus/dbus-transport.c b/dbus/dbus-transport.c
index 2337dd35..ed13a9e6 100644
--- a/dbus/dbus-transport.c
+++ b/dbus/dbus-transport.c
@@ -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);