From 6032da66819b7ccf99001ba636926100f475cb89 Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Fri, 23 Dec 2011 10:37:04 +0000 Subject: [PATCH] lib: Try harder to remove temporary directory along error paths (RHBZ#769680). --- src/appliance.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/appliance.c b/src/appliance.c index 5f77a56..57ff38f 100644 --- a/src/appliance.c +++ b/src/appliance.c @@ -450,8 +450,10 @@ build_supermin_appliance (guestfs_h *g, guestfs___print_timestamped_message (g, "run febootstrap-supermin-helper"); int r = run_supermin_helper (g, supermin_path, tmpcd, len); - if (r == -1) + if (r == -1) { + guestfs___remove_tmpdir (tmpcd); return -1; + } if (g->verbose) guestfs___print_timestamped_message (g, "finished building supermin appliance"); @@ -468,6 +470,7 @@ build_supermin_appliance (guestfs_h *g, int fd = open (filename, O_WRONLY|O_CREAT, 0755); if (fd == -1) { perrorf (g, "open: %s", filename); + guestfs___remove_tmpdir (tmpcd); return -1; } struct flock fl; @@ -481,6 +484,7 @@ build_supermin_appliance (guestfs_h *g, goto again; perrorf (g, "fcntl: F_SETLKW: %s", filename); close (fd); + guestfs___remove_tmpdir (tmpcd); return -1; } @@ -492,6 +496,7 @@ build_supermin_appliance (guestfs_h *g, if (ftruncate (fd, clen) == -1) { perrorf (g, "ftruncate: %s", filename); close (fd); + guestfs___remove_tmpdir (tmpcd); return -1; } @@ -499,11 +504,13 @@ build_supermin_appliance (guestfs_h *g, if (rr == -1) { perrorf (g, "write: %s", filename); close (fd); + guestfs___remove_tmpdir (tmpcd); return -1; } if ((size_t) rr != clen) { error (g, "partial write: %s", filename); close (fd); + guestfs___remove_tmpdir (tmpcd); return -1; } @@ -513,6 +520,7 @@ build_supermin_appliance (guestfs_h *g, if (rename (filename, filename2) == -1) { perrorf (g, "rename: %s %s", filename, filename2); close (fd); + guestfs___remove_tmpdir (tmpcd); return -1; } @@ -522,6 +530,7 @@ build_supermin_appliance (guestfs_h *g, if (rename (filename, filename2) == -1) { perrorf (g, "rename: %s %s", filename, filename2); close (fd); + guestfs___remove_tmpdir (tmpcd); return -1; } @@ -531,6 +540,7 @@ build_supermin_appliance (guestfs_h *g, if (rename (filename, filename2) == -1) { perrorf (g, "rename: %s %s", filename, filename2); close (fd); + guestfs___remove_tmpdir (tmpcd); return -1; } -- 1.8.3.1