On Wed, Apr 27, 2011 at 01:43:24PM +0800, Wen Congyang wrote: > When buf->error is 1, we do not return buf->content in the function > virBufferContentAndReset(). So we should free buf->content when > vsnprintf() failed. > > --- > Changes > v1->v2 > - rename virBufferNoMemory() to virBufferSetError() and use it > to free buf->content as Laine Stump suggested > > src/util/buf.c | 12 ++++++------ > 1 files changed, 6 insertions(+), 6 deletions(-) > > diff --git a/src/util/buf.c b/src/util/buf.c > index 7557ad1..a3cc063 100644 > --- a/src/util/buf.c > +++ b/src/util/buf.c > @@ -39,7 +39,7 @@ struct _virBuffer { > * freeing the content and setting the error flag. > */ > static void > -virBufferNoMemory(const virBufferPtr buf) > +virBufferSetError(const virBufferPtr buf) > { > VIR_FREE(buf->content); > buf->size = 0; > @@ -70,7 +70,7 @@ virBufferGrow(virBufferPtr buf, unsigned int len) > size = buf->use + len + 1000; > > if (VIR_REALLOC_N(buf->content, size) < 0) { > - virBufferNoMemory(buf); > + virBufferSetError(buf); > return -1; > } > buf->size = size; > @@ -241,7 +241,7 @@ virBufferVSprintf(const virBufferPtr buf, const char *format, ...) > size = buf->size - buf->use; > if ((count = vsnprintf(&buf->content[buf->use], > size, format, argptr)) < 0) { > - buf->error = 1; > + virBufferSetError(buf); > goto err; > } > > @@ -259,7 +259,7 @@ virBufferVSprintf(const virBufferPtr buf, const char *format, ...) > size = buf->size - buf->use; > if ((count = vsnprintf(&buf->content[buf->use], > size, format, argptr)) < 0) { > - buf->error = 1; > + virBufferSetError(buf); > goto err; > } > } > @@ -299,7 +299,7 @@ virBufferEscapeString(const virBufferPtr buf, const char *format, const char *st > } > > if (VIR_ALLOC_N(escaped, 6 * len + 1) < 0) { > - virBufferNoMemory(buf); > + virBufferSetError(buf); > return; > } > > @@ -386,7 +386,7 @@ virBufferEscapeSexpr(const virBufferPtr buf, > } > > if (VIR_ALLOC_N(escaped, 2 * len + 1) < 0) { > - virBufferNoMemory(buf); > + virBufferSetError(buf); > return; > } > ACK, Daniel -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ daniel@xxxxxxxxxxxx | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/ -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list