From: Dmitry Goncharov Date: Sun, 23 Oct 2022 19:45:42 +0000 (-0400) Subject: * src/posixos.c (os_anontmp): If O_TMPFILE fails try dup() method. X-Git-Tag: 4.3.92~4 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=252c26bd2086f80d4ef75f57ee5825dee2f60d83;p=thirdparty%2Fmake.git * src/posixos.c (os_anontmp): If O_TMPFILE fails try dup() method. --- diff --git a/src/posixos.c b/src/posixos.c index fca31927..48e8cf5c 100644 --- a/src/posixos.c +++ b/src/posixos.c @@ -839,17 +839,22 @@ fd_set_append (int fd) int os_anontmp () { + const char *tdir = get_tmpdir (); int fd = -1; #ifdef O_TMPFILE - EINTRLOOP (fd, open (get_tmpdir (), O_RDWR | O_TMPFILE | O_EXCL, 0600)); - if (fd < 0) - pfatal_with_name ("open(O_TMPFILE)"); -#elif HAVE_DUP - /* We don't have O_TMPFILE but we can dup: if we are creating temp files in - the default location then try tmpfile() + dup() + fclose() to avoid ever - having a name for a file. */ - if (streq (get_tmpdir (), DEFAULT_TMPDIR)) + EINTRLOOP (fd, open (tdir, O_RDWR | O_TMPFILE | O_EXCL, 0600)); + if (fd >= 0) + return fd; + + DB (DB_BASIC, (_("Cannot open '%s' with O_TMPFILE: %s.\n"), + tdir, strerror (errno))); +#endif + +#if HAVE_DUP + /* If we can dup and we are creating temp files in the default location then + try tmpfile() + dup() + fclose() to avoid ever having a named file. */ + if (streq (tdir, DEFAULT_TMPDIR)) { mode_t mask = umask (0077); FILE *tfile;