OSDN Git Service

2010-04-30 Kai Tietz <kai.tietz@onevision.com>
authorktietz <ktietz@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 30 Apr 2010 09:15:03 +0000 (09:15 +0000)
committerMasaki Muranaka <monaka@monami-software.com>
Sun, 23 May 2010 05:37:15 +0000 (14:37 +0900)
        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
libgfortran/io/unix.c

index 2c38ba3..a869f31 100644 (file)
@@ -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
index b3bd438..9ab5bcd 100644 (file)
@@ -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)