diff options
-rw-r--r-- | libgfortran/ChangeLog | 8 | ||||
-rw-r--r-- | libgfortran/io/unix.c | 32 |
2 files changed, 36 insertions, 4 deletions
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 2c38ba3..a869f31 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,11 @@ +2010-04-30 Kai Tietz <kai.tietz@onevision.com> + + PR/43844 + * io/unix.c (raw_truncate): Explicit cast from integer-scalar + to pointer. + (empfile): Use for mingw GetTempPath and avoid double slash + for path. + 2010-04-24 Kai Tietz <kai.tietz@onevision.com> PR/43844 diff --git a/libgfortran/io/unix.c b/libgfortran/io/unix.c index b3bd438..9ab5bcd 100644 --- a/libgfortran/io/unix.c +++ b/libgfortran/io/unix.c @@ -308,7 +308,7 @@ raw_truncate (unix_stream * s, gfc_offset length) errno = EBADF; return -1; } - h = _get_osfhandle (s->fd); + h = (HANDLE) _get_osfhandle (s->fd); if (h == INVALID_HANDLE_VALUE) { errno = EBADF; @@ -877,20 +877,45 @@ tempfile (st_parameter_open *opp) { 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); @@ -898,7 +923,7 @@ tempfile (st_parameter_open *opp) 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) @@ -909,7 +934,6 @@ tempfile (st_parameter_open *opp) #endif } while (fd == -1 && errno == EEXIST); - #endif /* HAVE_MKSTEMP */ if (fd < 0) |