]> granicus.if.org Git - check/commitdiff
Change how a tmp dir is found
authorBranden Archer <b.m.archer4@gmail.com>
Sun, 18 Dec 2016 16:47:46 +0000 (11:47 -0500)
committerBranden Archer <b.m.archer4@gmail.com>
Tue, 20 Dec 2016 02:48:37 +0000 (21:48 -0500)
It was found that on Windows the TMPDIR environment variable was
honored, but for Linux/et al it was not. This resulted in files ending
up in the build directory (the present directory when the tests
were run). As the test may not have permission to write in the build
directory, attempt to honor the P_tmpdir macro or TMPDIR environment
variable.

src/check_msg.c

index a8139d22c1957b55b43b5a98369be05a81070448..9483654bace2520a2996d421e00e2a5149b11cd6 100644 (file)
@@ -243,6 +243,13 @@ FILE *open_tmp_file(char **name)
     file = tmpfile();
     if(file == NULL)
     {
+        /*
+         * The heuristic for selecting a temporary folder is as follows:
+         * 1) If the TEMP environment variable is defined, use that directory.
+         * 2) If the P_tmpdir macro is defined, use that directory.
+         * 3) If the TMPDIR environment variable is defined, use that directory.
+         * 4) Use the platform defined temporary directory, or the current directory.
+         */
         char *tmp = getenv("TEMP");
         char *tmp_file = tempnam(tmp, "check_");
 
@@ -263,9 +270,27 @@ FILE *open_tmp_file(char **name)
         free(tmp_file);
     }
 #else
+    /*
+     * The heuristic for selecting a temporary folder is as follows:
+     * 1) If the TEMP environment variable is defined, use that directory.
+     * 2) If the P_tmpdir macro is defined, use that directory.
+     * 3) If the TMPDIR environment variable is defined, use that directory.
+     * 4) Use the current directory
+     */
+
     int fd = -1;
     const char *tmp_dir = getenv ("TEMP");
-    if (!tmp_dir)
+#ifdef P_tmpdir
+    if (tmp_dir == NULL)
+    {
+        tmp_dir = P_tmpdir;
+    }
+#endif /*P_tmpdir*/
+    if (tmp_dir == NULL)
+    {
+        tmp_dir = getenv ("TMPDIR");
+    }
+    if (tmp_dir == NULL)
     {
         tmp_dir = ".";
     }