On Sun, Apr 03, 2011 at 11:21:14AM +0200, Matthias Bolte wrote: > Make virFileBuildPath operate on the heap instead of the stack. It > allocates a buffer instead of expecting a preexisting buffer. > --- > src/conf/nwfilter_conf.c | 21 +++++++-------------- > src/conf/storage_conf.c | 44 +++++++++++++++----------------------------- > src/util/util.c | 29 +++++++++++++++-------------- > src/util/util.h | 8 +++----- > src/xen/xen_inotify.c | 16 +++++++++------- > src/xen/xm_internal.c | 33 +++++++++++++++++---------------- > 6 files changed, 66 insertions(+), 85 deletions(-) > - if (!(pool->autostartLink = strdup(path))) { > + if (!(pool->autostartLink = virFileBuildPath(driver->autostartDir, > + def->name, ".xml"))) { > virReportOOMError(); > VIR_FREE(pool->configFile); > return -1; > diff --git a/src/util/util.c b/src/util/util.c > index 43794b1..31feecc 100644 > --- a/src/util/util.c > +++ b/src/util/util.c > @@ -1841,23 +1841,24 @@ cleanup: > return err; > } > > -/* Build up a fully qualfiied path for a config file to be > +/* Build up a fully qualified path for a config file to be > * associated with a persistent guest or network */ > -int virFileBuildPath(const char *dir, > - const char *name, > - const char *ext, > - char *buf, > - unsigned int buflen) > +char * > +virFileBuildPath(const char *dir, const char *name, const char *ext) > { > - if ((strlen(dir) + 1 + strlen(name) + (ext ? strlen(ext) : 0) + 1) >= (buflen-1)) > - return -1; > + char *path; > > - strcpy(buf, dir); > - strcat(buf, "/"); > - strcat(buf, name); > - if (ext) > - strcat(buf, ext); > - return 0; > + if (ext == NULL) { > + if (virAsprintf(&path, "%s/%s", dir, name) < 0) { > + return NULL; > + } > + } else { > + if (virAsprintf(&path, "%s/%s%s", dir, name, ext) < 0) { > + return NULL; > + } > + } > + > + return path; > } ACK to the patch, but we might like to make virFileBuildPath invoke virReportOOMError() itself as a followup, so callers don't have to worry about it Regards, 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