Version 1.10.9.
[libguestfs.git] / src / appliance.c
index ef724be..822fe77 100644 (file)
@@ -1,5 +1,5 @@
 /* libguestfs
- * Copyright (C) 2010 Red Hat Inc.
+ * Copyright (C) 2010-2011 Red Hat Inc.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -240,15 +240,15 @@ calculate_supermin_checksum (guestfs_h *g, const char *supermin_path)
     return NULL;
   }
 
-  if (pclose (pp) == -1) {
-    perror ("pclose");
+  if (pclose (pp) != 0) {
+    warning (g, "pclose: %m");
     return NULL;
   }
 
   len = strlen (checksum);
 
   if (len < 16) {               /* sanity check */
-    fprintf (stderr, "libguestfs: internal error: febootstrap-supermin-helper -f checksum returned a short string\n");
+    warning (g, "febootstrap-supermin-helper -f checksum returned a short string");
     return NULL;
   }
 
@@ -351,7 +351,11 @@ check_for_cached_appliance (guestfs_h *g,
   int fd = open (filename, O_RDONLY);
   if (fd == -1)
     return 0;
+#ifdef HAVE_FUTIMENS
   (void) futimens (fd, NULL);
+#else
+  (void) futimes (fd, NULL);
+#endif
   struct flock fl;
   fl.l_type = F_RDLCK;
   fl.l_whence = SEEK_SET;
@@ -397,6 +401,12 @@ check_for_cached_appliance (guestfs_h *g,
   /* Releases the lock on checksum. */
   if (close (fd) == -1) {
     perrorf (g, "close");
+    /* Allocated in hard_link_to_cached_appliance above, must be
+     * freed along this error path.
+     */
+    free (*kernel);
+    free (*initrd);
+    free (*appliance);
     return -1;
   }
 
@@ -535,6 +545,12 @@ build_supermin_appliance (guestfs_h *g,
   /* Releases the lock on checksum. */
   if (close (fd) == -1) {
     perrorf (g, "close");
+    /* Allocated in hard_link_to_cached_appliance above, must be
+     * freed along this error path.
+     */
+    free (*kernel);
+    free (*initrd);
+    free (*appliance);
     return -1;
   }