[PATCH] When saving out the infostore, clear any previous data

# HG changeset patch # User Kaitlin Rupert <karupert@us.ibm.com> # Date 1217613773 25200 # Node ID a9e3b40692cef1635f1c377f896fc2d5be0b3c16 # Parent d7406e2f4670208cfe61ef9c0065164292ab3942 When saving out the infostore, clear any previous data. Signed-off-by: Kaitlin Rupert <karupert@us.ibm.com> diff -r d7406e2f4670 -r a9e3b40692ce libxkutil/infostore.c --- a/libxkutil/infostore.c Tue Jul 29 12:34:38 2008 -0700 +++ b/libxkutil/infostore.c Fri Aug 01 11:02:53 2008 -0700 @@ -24,6 +24,7 @@ #include <unistd.h> #include <inttypes.h> #include <sys/file.h> +#include <string.h> #include <libvirt/libvirt.h> #include <libxml/parser.h> @@ -42,6 +43,7 @@ xmlNodePtr root; xmlXPathContextPtr xpathctx; int fd; + char *filename; }; static void infostore_cleanup_ctx(struct infostore_ctx *ctx) @@ -49,6 +51,7 @@ xmlXPathFreeContext(ctx->xpathctx); xmlFreeDoc(ctx->doc); close(ctx->fd); + free(ctx->filename); free(ctx); } @@ -148,7 +151,12 @@ xmlSaveCtxtPtr save = NULL; long size = 0; - lseek(ctx->fd, 0, SEEK_SET); + close(ctx->fd); + ctx->fd = open(ctx->filename, O_RDWR|O_TRUNC, 0600); + if (ctx->fd < 0) { + CU_DEBUG("Unable to open `%s': %m", ctx->filename); + goto out; + } save = xmlSaveToFd(ctx->fd, NULL, 0); if (save == NULL) { @@ -179,6 +187,8 @@ filename = make_filename(dom); if (filename == NULL) goto err; + + isc->filename = strdup(filename); isc->fd = open(filename, O_RDWR|O_CREAT, 0600); if (isc->fd < 0) { @@ -310,6 +320,7 @@ } xmlNodeSetContent(node, BAD_CAST val); + out: xmlXPathFreeObject(result);

KR> - lseek(ctx->fd, 0, SEEK_SET); KR> + close(ctx->fd); KR> + ctx->fd = open(ctx->filename, O_RDWR|O_TRUNC, 0600); KR> + if (ctx->fd < 0) { KR> + CU_DEBUG("Unable to open `%s': %m", ctx->filename); KR> + goto out; KR> + } Why not just leave the lseek() in place, and then call an ftruncate() on the file descriptor? That saves us from adding all the infrastructure for saving the filename, etc. It's my fault for not calling for the truncate in the original code... Good catch! -- Dan Smith IBM Linux Technology Center Open Hypervisor Team email: danms@us.ibm.com
participants (2)
-
Dan Smith
-
Kaitlin Rupert