X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=src%2Fappliance.c;h=822fe772e889e87ae6a64ec13fc1be928abb47af;hb=25791edff58665a949807081d131ef74e74a2d7c;hp=1b6b505e776bc6bf2596529610ee28be20bfab52;hpb=a6bfc9f3c44c6b4421d5a7b1d872411583a5cffa;p=libguestfs.git diff --git a/src/appliance.c b/src/appliance.c index 1b6b505..822fe77 100644 --- a/src/appliance.c +++ b/src/appliance.c @@ -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; } @@ -308,7 +308,7 @@ check_for_cached_appliance (guestfs_h *g, uid_t uid, char **kernel, char **initrd, char **appliance) { - const char *tmpdir = guestfs_tmpdir (); + const char *tmpdir = guestfs___persistent_tmpdir (); /* len must be longer than the length of any pathname we can * generate in this function. @@ -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; } @@ -419,7 +429,7 @@ build_supermin_appliance (guestfs_h *g, if (g->verbose) guestfs___print_timestamped_message (g, "begin building supermin appliance"); - const char *tmpdir = guestfs_tmpdir (); + const char *tmpdir = guestfs___persistent_tmpdir (); /* len must be longer than the length of any pathname we can * generate in this function. @@ -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; }