diff options
author | Kai Tietz <kai.tietz@onevision.com> | 2010-04-30 09:15:03 +0000 |
---|---|---|
committer | Kai Tietz <ktietz@gcc.gnu.org> | 2010-04-30 11:15:03 +0200 |
commit | e7fc9c75d0e914748acda8cd682479fbe9da38e9 (patch) | |
tree | 374e660ca9135e3767b6552ac34ca325e626b5a3 /libgfortran/io | |
parent | 4be68d9a2d50985d79835f109a46d7665eec721a (diff) | |
download | gcc-e7fc9c75d0e914748acda8cd682479fbe9da38e9.zip gcc-e7fc9c75d0e914748acda8cd682479fbe9da38e9.tar.gz gcc-e7fc9c75d0e914748acda8cd682479fbe9da38e9.tar.bz2 |
unix.c (raw_truncate): Explicit cast from integer-scal to pointer.
2010-04-30 Kai Tietz <kai.tietz@onevision.com>
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.
From-SVN: r158925
Diffstat (limited to 'libgfortran/io')
-rw-r--r-- | libgfortran/io/unix.c | 32 |
1 files changed, 28 insertions, 4 deletions
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) |