Allow TMPDIR to override directory used for temporary files (RHBZ#512905).
authorRichard W.M. Jones <rjones@redhat.com>
Tue, 21 Jul 2009 10:47:57 +0000 (11:47 +0100)
committerRichard W.M. Jones <rjones@redhat.com>
Tue, 21 Jul 2009 10:47:57 +0000 (11:47 +0100)
guestfish.pod
guestfs.pod
src/guestfs.c

index 32a3090..f2255f1 100644 (file)
@@ -576,6 +576,16 @@ used.
 The C<more> command uses C<$PAGER> as the pager.  If not
 set, it uses C<more>.
 
+=item TMPDIR
+
+Location of temporary directory, defaults to C</tmp>.
+
+If libguestfs was compiled to use the supermin appliance then each
+handle will require rather a large amount of space in this directory
+for short periods of time (~ 80 MB).  You can use C<$TMPDIR> to
+configure another directory to use in case C</tmp> is not large
+enough.
+
 =back
 
 =head1 EXIT CODE
index 2fd88ce..4235454 100644 (file)
@@ -937,6 +937,16 @@ used.
 
 See also L<QEMU WRAPPERS> above.
 
+=item TMPDIR
+
+Location of temporary directory, defaults to C</tmp>.
+
+If libguestfs was compiled to use the supermin appliance then each
+handle will require rather a large amount of space in this directory
+for short periods of time (~ 80 MB).  You can use C<$TMPDIR> to
+configure another directory to use in case C</tmp> is not large
+enough.
+
 =back
 
 =head1 SEE ALSO
index f445ada..386dee6 100644 (file)
@@ -875,7 +875,8 @@ static const char *supermin_hostfiles_name =
 int
 guestfs_launch (guestfs_h *g)
 {
-  static const char *dir_template = "/tmp/libguestfsXXXXXX";
+  const char *tmpdir;
+  char dir_template[PATH_MAX];
   int r, i, pmore;
   size_t len;
   int wfd[2], rfd[2];
@@ -885,6 +886,15 @@ guestfs_launch (guestfs_h *g)
   char unixsock[256];
   struct sockaddr_un addr;
 
+#ifdef P_tmpdir
+  tmpdir = P_tmpdir;
+#else
+  tmpdir = "/tmp";
+#endif
+
+  tmpdir = getenv ("TMPDIR") ? : tmpdir;
+  snprintf (dir_template, sizeof dir_template, "%s/libguestfsXXXXXX", tmpdir);
+
   /* Configured? */
   if (!g->cmdline) {
     error (g, _("you must call guestfs_add_drive before guestfs_launch"));