On 04/22/2011 10:31 AM, Christophe Fergeau wrote:
On Fri, Apr 22, 2011 at 10:17:01AM -0600, Eric Blake wrote:
> On 04/22/2011 10:11 AM, Matthias Bolte wrote:
>> remoteDispatchError(rerr);
>> - VIR_FREE(ret->names.names_len);
>> + VIR_FREE(ret->names.names_val);
>
> And to think I missed those in the huge patch. Oops.
Maybe VIR_FREE should be changed to something like
-# define VIR_FREE(ptr) virFree(&(ptr))
+# define VIR_FREE(ptr) \
+ do { void *check_type = (ptr); virFree(&(check_type)); } while (0)
Not quite. That assigns check_type to NULL, rather than the intended
assignment of ptr.
But the idea has merit; I'll see if I can come up with a variant that
still evaluates ptr only once, by wrapping the type check in a sizeof hack.
I also get more warnings about casting from const to non-const, this
can
be avoided by making check_type const void *, but maybe these warnings
indicate that something that shouldn't be freed is freed.
How many warnings? If it's only a handful, we should start
investigating; if it's lots, then I'm not sure how much it buys us.
--
Eric Blake eblake(a)redhat.com +1-801-349-2682
Libvirt virtualization library
http://libvirt.org