summaryrefslogtreecommitdiff
path: root/libgfortran
diff options
context:
space:
mode:
authorktietz <ktietz@138bc75d-0d04-0410-961f-82ee72b054a4>2010-04-30 09:15:03 +0000
committerktietz <ktietz@138bc75d-0d04-0410-961f-82ee72b054a4>2010-04-30 09:15:03 +0000
commitdb23ac43e721b41820719e5c5e5edfb42ea022ac (patch)
tree374e660ca9135e3767b6552ac34ca325e626b5a3 /libgfortran
parent4d6c561bfad8de02b048f8947a8f2ef803ca979c (diff)
downloadgcc-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/ChangeLog8
-rw-r--r--libgfortran/io/unix.c32
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)