summaryrefslogtreecommitdiffstats
path: root/contrib/libf2c/libI77/open.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/libf2c/libI77/open.c')
-rw-r--r--contrib/libf2c/libI77/open.c18
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':
OpenPOWER on IntegriCloud