diff options
author | ktietz <ktietz@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-04-30 09:15:03 +0000 |
---|---|---|
committer | ktietz <ktietz@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-04-30 09:15:03 +0000 |
commit | db23ac43e721b41820719e5c5e5edfb42ea022ac (patch) | |
tree | 374e660ca9135e3767b6552ac34ca325e626b5a3 /libgfortran | |
parent | 4d6c561bfad8de02b048f8947a8f2ef803ca979c (diff) | |
download | gcc-db23ac43e721b41820719e5c5e5edfb42ea022ac.tar.gz |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@158925 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgfortran')
-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 2c38ba39af1..a869f31ccc8 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 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) |