summaryrefslogtreecommitdiff
path: root/src/misc.c
diff options
context:
space:
mode:
authorPaul Smith <psmith@gnu.org>2022-10-24 00:47:22 -0400
committerPaul Smith <psmith@gnu.org>2022-10-24 01:50:12 -0400
commitdeb4a42c3e85f1eb25f72c8952866625c0a3c7aa (patch)
treebe6e0f6fcbf0bf3d2aebb3455940e0c0b7c3cf02 /src/misc.c
parent252c26bd2086f80d4ef75f57ee5825dee2f60d83 (diff)
downloadmake-git-deb4a42c3e85f1eb25f72c8952866625c0a3c7aa.tar.gz
* src/misc.c (get_tmpdir): Report errors if tmpdirs are invalid
* src/main.c (main): Set up initial temporary directories.
Diffstat (limited to 'src/misc.c')
-rw-r--r--src/misc.c36
1 files changed, 29 insertions, 7 deletions
diff --git a/src/misc.c b/src/misc.c
index 4f52e78c..bf6fe7ca 100644
--- a/src/misc.c
+++ b/src/misc.c
@@ -568,7 +568,6 @@ umask (mode_t mask)
}
#endif
-#define MAKE_TMPDIR "MAKE_TMPDIR"
#ifdef VMS
# define DEFAULT_TMPFILE "sys$scratch:gnv$make_cmdXXXXXX.com"
#else
@@ -582,13 +581,36 @@ get_tmpdir ()
if (!tmpdir)
{
- if (((tmpdir = getenv (MAKE_TMPDIR)) == NULL || *tmpdir == '\0')
#if defined (__MSDOS__) || defined (WINDOWS32) || defined (__EMX__)
- && ((tmpdir = getenv ("TMP")) == NULL || *tmpdir == '\0')
- && ((tmpdir = getenv ("TEMP")) == NULL || *tmpdir == '\0')
-#endif
- && ((tmpdir = getenv ("TMPDIR")) == NULL || *tmpdir == '\0'))
- tmpdir = DEFAULT_TMPDIR;
+# define TMP_EXTRAS "TMP", "TEMP",
+#else
+# define TMP_EXTRAS
+#endif
+ const char *tlist[] = { "MAKE_TMPDIR", "TMPDIR", TMP_EXTRAS NULL };
+ const char **tp;
+ unsigned int found = 0;
+
+ for (tp = tlist; *tp; ++tp)
+ if ((tmpdir = getenv (*tp)) && *tmpdir != '\0')
+ {
+ struct stat st;
+ int r;
+ found = 1;
+ EINTRLOOP(r, stat (tmpdir, &st));
+ if (r < 0)
+ OSSS (error, NILF,
+ _("%s value %s: %s"), *tp, tmpdir, strerror (errno));
+ else if (! S_ISDIR (st.st_mode))
+ OSS (error, NILF,
+ _("%s value %s: not a directory"), *tp, tmpdir);
+ else
+ return tmpdir;
+ }
+
+ tmpdir = DEFAULT_TMPDIR;
+
+ if (found)
+ OS (error, NILF, _("using default temporary directory '%s'"), tmpdir);
}
return tmpdir;