On 6/8/20 6:45 AM, Markus Armbruster wrote: > Philippe Mathieu-Daudé <phi...@redhat.com> writes: > >> On 2/28/20 6:32 PM, Markus Armbruster wrote: [...] >>> warn_reportf_err() is a convenience function to error_prepend(), >>> warn_report() and free @local_err. > [...] >> Why warn_reportf_err() doesn't take a 'Error **err' instead, to set err >> to NULL after freeing *err? > > Why doesn't free() take a void ** argument, to set the pointer to null > after freeing what it points to? Why doesn't close() take an int * > argument?
=) Usually I see the code checking an Error* hasn't been set by a callee. If it has, the caller usually returns. You explained me warn_reportf_err() consume Error* and free() it. So regarding the rest of our Error* use, a function calling warn_reportf_err has to do extra care to set Error* to NULL. Genuinely looks confuse or dangerous to me... Note however I was not asking for a change, just asking 'why' to better understand if there were not a design problem, or o invalid use of different APIs. > > [...] >