errno = EBADF;
return -1;
}
- h = _get_osfhandle (s->fd);
+ h = (HANDLE) _get_osfhandle (s->fd);
if (h == INVALID_HANDLE_VALUE)
{
errno = EBADF;
{
const char *tempdir;
char *template;
+ const char *slash = "/";
int fd;
tempdir = getenv ("GFORTRAN_TMPDIR");
+#ifdef __MINGW32__
+ if (tempdir == NULL)
+ {
+ char buffer[MAX_PATH + 1];
+ DWORD ret;
+ ret = GetTempPath (MAX_PATH, buffer);
+ /* If we are not able to get a temp-directory, we use
+ current directory. */
+ if (ret > MAX_PATH || !ret)
+ buffer[0] = 0;
+ else
+ buffer[ret] = 0;
+ tempdir = strdup (buffer);
+ }
+#else
if (tempdir == NULL)
tempdir = getenv ("TMP");
if (tempdir == NULL)
tempdir = getenv ("TEMP");
if (tempdir == NULL)
tempdir = DEFAULT_TEMPDIR;
+#endif
+ /* Check for special case that tempdir contains slash
+ or backslash at end. */
+ if (*tempdir == 0 || tempdir[strlen (tempdir) - 1] == '/'
+#ifdef __MINGW32__
+ || tempdir[strlen (tempdir) - 1] == '\\'
+#endif
+ )
+ slash = "";
template = get_mem (strlen (tempdir) + 20);
#ifdef HAVE_MKSTEMP
- sprintf (template, "%s/gfortrantmpXXXXXX", tempdir);
+ sprintf (template, "%s%sgfortrantmpXXXXXX", tempdir, slash);
fd = mkstemp (template);
fd = -1;
do
{
- sprintf (template, "%s/gfortrantmpXXXXXX", tempdir);
+ sprintf (template, "%s%sgfortrantmpXXXXXX", tempdir, slash);
if (!mktemp (template))
break;
#if defined(HAVE_CRLF) && defined(O_BINARY)
#endif
}
while (fd == -1 && errno == EEXIST);
-
#endif /* HAVE_MKSTEMP */
if (fd < 0)