[Libguestfs] [PATCH 2/2] lib: Try harder to remove temporary directory along error paths (RHBZ#769680).

Richard W.M. Jones rjones at redhat.com
Fri Dec 23 10:38:26 UTC 2011


From: "Richard W.M. Jones" <rjones at redhat.com>

---
 src/appliance.c |   12 +++++++++++-
 1 files changed, 11 insertions(+), 1 deletions(-)

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.7.6




More information about the Libguestfs mailing list