On 18/01/2018 12:21, Philippe Mathieu-Daudé wrote: >> I'm not a fan of bool return types, in general (because "!" is often >> success while "< 0" is failure) and especially when there is an Error**; >> I disagree with commit 9d3b155186. But the function is not in an area I >> maintain so I'm queuing this, thanks. > Do you prefer "if (local_err)" and "if (errp && *errp)" ?
The latter is wrong. I do prefer if (local_err) { error_propagate(errp, local_err); return; } or maybe (but only if there is a meaning to a zero vs. positive return value, or if errno is an important part of the returned Error *) ret = f(..., errp); if (ret < 0) { return; } > I wondered once if a macro might improve this pattern but thought the > code would get more obscure. Eduardo had a series to avoid error_propagate, where NULL was replaced by a (non-NULL) IGNORED_ERRORS macro. Then you could do: f(..., errp); if (error_is_set(errp)) { return; } See here: https://lists.gnu.org/archive/html/qemu-devel/2017-06/msg03139.html Paolo