From db23ac43e721b41820719e5c5e5edfb42ea022ac Mon Sep 17 00:00:00 2001 From: ktietz Date: Fri, 30 Apr 2010 09:15:03 +0000 Subject: 2010-04-30 Kai Tietz PR/43844 * io/unix.c (raw_truncate): Explicit cast from integer-scal to pointer. (empfile): Use for mingw GetTempPath and avoid double slash for path. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@158925 138bc75d-0d04-0410-961f-82ee72b054a4 --- libgfortran/ChangeLog | 8 ++++++++ libgfortran/io/unix.c | 32 ++++++++++++++++++++++++++++---- 2 files changed, 36 insertions(+), 4 deletions(-) (limited to 'libgfortran') diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 2c38ba39af1..a869f31ccc8 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,11 @@ +2010-04-30 Kai Tietz + + 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 PR/43844 diff --git a/libgfortran/io/unix.c b/libgfortran/io/unix.c index b3bd438c32d..9ab5bcdbc56 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) -- cgit v1.2.1