lib: Try harder to remove temporary directory along error paths (RHBZ#769680).
authorRichard W.M. Jones <rjones@redhat.com>
Fri, 23 Dec 2011 10:37:04 +0000 (10:37 +0000)
committerRichard W.M. Jones <rjones@redhat.com>
Fri, 23 Dec 2011 10:37:04 +0000 (10:37 +0000)
src/appliance.c

index 5f77a56..57ff38f 100644 (file)
@@ -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;
   }