On 07/15/2014 09:41 AM, Eric Blake wrote:
<...snip...>
This definition was doing two things - casting away const, AND doing
type validation. virFree(&foo) will compile even if foo is an int, but
we want to ensure that foo is of type char*.
I think what you want is:
# define VIR_FREE(ptr) virFree(1 ? &(ptr) : (ptr))
> -# else
> -/* The Coverity static analyzer considers the else path of the "?:" and
> - * flags the VIR_FREE() of the address of the address of memory as a
> - * RESOURCE_LEAK resulting in numerous false positives (eg, VIR_FREE(&ptr))
> - */
> -# define VIR_FREE(ptr) virFree((void *) &(ptr))
and keep this alternative to hush up coverity.
FWIW: I got notice a couple weeks ago that Coverity 7.5.0 (released June
27, 2014) has a fix for this issue.
Since there's no "guarantee" that everyone who runs a Coverity scan will
update to that new version - I'd be hesitant to say that we could just
do away with it since without this "condition"- Coverity will be very noisy.
John