aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKai Tietz <kai.tietz@onevision.com>2010-04-30 09:15:03 +0000
committerKai Tietz <ktietz@gcc.gnu.org>2010-04-30 11:15:03 +0200
commite7fc9c75d0e914748acda8cd682479fbe9da38e9 (patch)
tree374e660ca9135e3767b6552ac34ca325e626b5a3
parent4be68d9a2d50985d79835f109a46d7665eec721a (diff)
downloadgcc-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
-rw-r--r--libgfortran/ChangeLog8
-rw-r--r--libgfortran/io/unix.c32
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)