On Tue, Aug 20, 2013 at 11:33:43AM +0200, Peter Krempa wrote: > Re-arrange the code so that the returned bitmap is always initialized to > NULL even on early failures and return an error message as some callers > are already expecting it. > --- > > Notes: > Version 2: > Was already ACKed in v1, but: > * fixed bracing of arguments of the _() macro > * added src/uti/virbitmap.c to po/POTFILES.in > (noticed by doing a full build ... ) > > po/POTFILES.in | 1 + > src/util/virbitmap.c | 18 +++++++++--------- > 2 files changed, 10 insertions(+), 9 deletions(-) > > diff --git a/po/POTFILES.in b/po/POTFILES.in > index 36d027a..9a83069 100644 > --- a/po/POTFILES.in > +++ b/po/POTFILES.in > @@ -147,6 +147,7 @@ src/util/viralloc.c > src/util/viraudit.c > src/util/virauth.c > src/util/virauthconfig.c > +src/util/virbitmap.c > src/util/vircgroup.c > src/util/virclosecallbacks.c > src/util/vircommand.c > diff --git a/src/util/virbitmap.c b/src/util/virbitmap.c > index 47c678e..289a7b9 100644 > --- a/src/util/virbitmap.c > +++ b/src/util/virbitmap.c > @@ -298,23 +298,21 @@ virBitmapParse(const char *str, > size_t bitmapSize) > { > bool neg = false; > - const char *cur; > + const char *cur = str; > char *tmp; > size_t i; > int start, last; > > - if (!str) > + if (!(*bitmap = virBitmapNew(bitmapSize))) > return -1; > > - cur = str; > - virSkipSpaces(&cur); > + if (!str) > + goto error; > > - if (*cur == 0) > - return -1; > + virSkipSpaces(&cur); > > - *bitmap = virBitmapNew(bitmapSize); > - if (!*bitmap) > - return -1; > + if (*cur == '\0') > + goto error; > > while (*cur != 0 && *cur != terminator) { > /* > @@ -384,6 +382,8 @@ virBitmapParse(const char *str, > return virBitmapCountBits(*bitmap); > > error: > + virReportError(VIR_ERR_INTERNAL_ERROR, > + _("Failed to parse bitmap '%s'"), str); If you're going to add this, then you must fix all the callers which currently report their own error. # git grep --after 4 virBitmapParse src/ Shows a great many needing fixing. Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list