Daniel P. Berrange wrote:
On Thu, Nov 29, 2007 at 05:28:07PM +0000, Richard W.M. Jones wrote:
> Daniel P. Berrange wrote:
>
> All ACKed except:
>
>> @@ -3808,20 +3808,13 @@ server_error (virConnectPtr conn, remote
>> dom = err->dom ? get_nonnull_domain (conn, *err->dom) : NULL;
>> net = err->net ? get_nonnull_network (conn, *err->net) : NULL;
>>
>> - /* These strings are nullable. OK to ignore the return value
>> - * of strdup since these strings are informational.
>> - */
>> - char *str1 = err->str1 ? strdup (*err->str1) : NULL;
>> - char *str2 = err->str2 ? strdup (*err->str2) : NULL;
>> - char *str3 = err->str3 ? strdup (*err->str3) : NULL;
>> -
>> - char *message = err->message ? strdup (*err->message) : NULL;
>> -
>> __virRaiseError (conn, dom, net,
>> err->domain, err->code, err->level,
>> - str1, str2, str3,
>> + err->str1 ? *err->str1 : NULL,
>> + err->str2 ? *err->str2 : NULL,
>> + err->str3 ? *err->str3 : NULL,
>> err->int1, err->int2,
>> - "%s", message);
>> + "%s", err->message ? *err->message :
NULL);
>> }
>>
>> /* get_nonnull_domain and get_nonnull_network turn an on-wire
> Don't we need to dup these strings because the following xdr_free (in
> the caller) will free them?
No, all the params to __virRaiseError, get strdup'd inside virRaiseError
before being stored in the virError object.
/*
* Save the information about the error
*/
virResetError(to);
to->conn = conn;
to->dom = dom;
to->net = net;
to->domain = domain;
to->code = code;
to->message = str;
to->level = level;
if (str1 != NULL)
to->str1 = strdup(str1);
if (str2 != NULL)
to->str2 = strdup(str2);
if (str3 != NULL)
to->str3 = strdup(str3);
to->int1 = int1;
to->int2 = int2;
And the 'msg' arg gets re-allocated as the va-args are procssed with
vsnprintf, so there's no need for the virRaiseError caller to strdup
stuff itself
Right you are, so +1.
Rich.
--
Emerging Technologies, Red Hat -
http://et.redhat.com/~rjones/
Registered Address: Red Hat UK Ltd, Amberley Place, 107-111 Peascod
Street, Windsor, Berkshire, SL4 1TE, United Kingdom. Registered in
England and Wales under Company Registration No. 03798903