diff options
author | Simon McVittie <smcv@collabora.com> | 2018-11-20 12:17:20 +0000 |
---|---|---|
committer | Simon McVittie <smcv@collabora.com> | 2018-11-20 12:17:20 +0000 |
commit | eef153e82815e19851d3f6dc1a9b1c901c41eb2b (patch) | |
tree | 1dea55c57128374c4bfe647bff503278ac040d06 | |
parent | 3987f5a4bd75a7039e9da21d5dd01ffc1fda5063 (diff) | |
download | dbus-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.c | 5 | ||||
-rw-r--r-- | bus/desktop-file.c | 6 | ||||
-rw-r--r-- | bus/driver.c | 5 | ||||
-rw-r--r-- | dbus/dbus-file-unix.c | 4 | ||||
-rw-r--r-- | dbus/dbus-internals.h | 25 | ||||
-rw-r--r-- | dbus/dbus-sysdeps-unix.c | 5 | ||||
-rw-r--r-- | dbus/dbus-sysdeps-win.c | 6 | ||||
-rw-r--r-- | dbus/dbus-transport.c | 5 |
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); |