
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 :|