diff options
Diffstat (limited to 'contrib/libf2c/libI77/open.c')
-rw-r--r-- | contrib/libf2c/libI77/open.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/contrib/libf2c/libI77/open.c b/contrib/libf2c/libI77/open.c index 3e4c8bc..56bbc52 100644 --- a/contrib/libf2c/libI77/open.c +++ b/contrib/libf2c/libI77/open.c @@ -1,6 +1,7 @@ /* Define _XOPEN_SOURCE to get tempnam prototype with glibc et al -- more general than _INCLUDE_XOPEN_SOURCE used elsewhere `for HP-UX'. */ #define _XOPEN_SOURCE 1 +#include "config.h" #include "f2c.h" #include "fio.h" #include <string.h> @@ -133,10 +134,11 @@ integer f_open(olist *a) #endif { unit *b; integer rv; - char buf[256], *s; + char buf[256], *s, *env; cllist x; int ufmt; FILE *tf; + int fd, len; #ifndef NON_UNIX_STDIO int n; #endif @@ -209,6 +211,19 @@ integer f_open(olist *a) case 's': case 'S': b->uscrtch=1; +#ifdef HAVE_MKSTEMP /* Allow use of TMPDIR preferentially. */ + env = getenv("TMPDIR"); + if (!env) env = getenv("TEMP"); + if (!env) env = "/tmp"; + len = strlen(env); + if (len > 256 - sizeof "/tmp.FXXXXXX") + err (a->oerr, 132, "open"); + strcpy(buf, env); + strcat(buf, "/tmp.FXXXXXX"); + fd = mkstemp(buf); + if (fd == -1 || close(fd)) + err (a->oerr, 132, "open"); +#else /* ! defined (HAVE_MKSTEMP) */ #ifdef HAVE_TEMPNAM /* Allow use of TMPDIR preferentially. */ s = tempnam (0, buf); if (strlen (s) >= sizeof (buf)) @@ -223,6 +238,7 @@ integer f_open(olist *a) (void) mktemp(buf); #endif #endif /* ! defined (HAVE_TEMPNAM) */ +#endif /* ! defined (HAVE_MKSTEMP) */ goto replace; case 'n': case 'N': |