OSDN Git Service

2010-04-30 Kai Tietz <kai.tietz@onevision.com>
[pf3gnuchains/gcc-fork.git] / libgfortran / io / unix.c
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)