Mounting /tmp at TMP or TEMP as a last resort

Earl Chew echew@ixiacom.com
Wed Sep 8 22:27:00 GMT 2010


We have an installation that we deploy to a bunch of workstations. We prefer
if the installation uses the temporary file directory that Windows has already
allocated for the user.

The entry for /tmp in /etc/fstab, or the directory /tmp, is preferred.
If neither is found, the patch mounts /tmp at the directory indicated
by the environment variable TMP or, if that is not set, TEMP. The patch
does nothing if neither environment variable is set.

Earl

--- mount.h.orig	2010-03-18 07:57:09.000000000 -0700
+++ mount.h	2010-09-08 11:10:23.218802900 -0700
@@ -140,6 +140,7 @@
   int nmounts;
   mount_item mount[MAX_MOUNTS];
 
+  static bool got_tmp;
   static bool got_usr_bin;
   static bool got_usr_lib;
   static int root_idx;
--- mount.cc.orig	2010-03-30 03:03:09.000000000 -0700
+++ mount.cc	2010-09-08 11:35:27.765251900 -0700
@@ -45,6 +45,7 @@
 #define isproc(path) \
   (path_prefix_p (proc, (path), proc_len, false))
 
+bool NO_COPY mount_info::got_tmp;
 bool NO_COPY mount_info::got_usr_bin;
 bool NO_COPY mount_info::got_usr_lib;
 int NO_COPY mount_info::root_idx = -1;
@@ -390,6 +391,24 @@
 		  MOUNT_SYSTEM | MOUNT_BINARY | MOUNT_AUTOMATIC);
       }
     }
+
+  if (!got_tmp)
+    {
+      char tmpdir[PATH_MAX];
+      if (root_idx < 0)
+	api_fatal ("root_idx %d, user_shared magic %p, nmounts %d", root_idx, user_shared->version, nmounts);
+      char *p = stpcpy (tmpdir, mount[root_idx].native_path);
+      stpcpy (p, "\\tmp");
+      if (GetFileAttributes (tmpdir) != FILE_ATTRIBUTE_DIRECTORY)
+        {
+	  const char *tmp = getenv("TMP");
+	  if (!tmp)
+	    tmp = getenv("TEMP");
+	  if (tmp)
+	    add_item (tmp, "/tmp",
+		      MOUNT_SYSTEM | MOUNT_BINARY | MOUNT_AUTOMATIC);
+	}
+    }
 }
 
 static void
@@ -1342,6 +1361,9 @@
   if (i == nmounts)
     nmounts++;
 
+  if (strcmp (posixtmp, "/tmp") == 0)
+    got_tmp = true;
+
   if (strcmp (posixtmp, "/usr/bin") == 0)
     got_usr_bin = true;
 



More information about the Cygwin-patches mailing list