main.c (store_exe_path): Fix absolute path detection for Windows.
authorTobias Burnus <burnus@gcc.gnu.org>
Wed, 11 Jan 2012 14:39:28 +0000 (15:39 +0100)
committerTobias Burnus <burnus@gcc.gnu.org>
Wed, 11 Jan 2012 14:39:28 +0000 (15:39 +0100)
2012-01-11  Tobias Burnus  <burnus@net-b.de>

        * runtime/main.c (store_exe_path): Fix absolute path
        detection for Windows.

From-SVN: r183094

libgfortran/ChangeLog
libgfortran/runtime/main.c

index 3e27ed952c05275171dc56c7af503f70029b5150..b1e2b049b4f82c866f7c0ec2b44eed0ff2d85aad 100644 (file)
@@ -1,5 +1,10 @@
+2012-01-11  Tobias Burnus  <burnus@net-b.de>
+
+       * runtime/main.c (store_exe_path): Fix absolute path
+       detection for Windows.
+
 2012-01-11  Janne Blomqvist  <jb@gcc.gnu.org>
-            Mike Stump  <mikestump@comcast.net>
+           Mike Stump  <mikestump@comcast.net>
        PR libfortran/51803
        * runtime/main.c (store_exe_path): Handle getcwd failure and lack
        of the function better.
index 1cad5eff7257145f0c89fd2e5bd45e4f0cfe8172..9ee47022cc9b2336e959e7d6fc949a89ec57bfdc 100644 (file)
@@ -86,7 +86,8 @@ store_exe_path (const char * argv0)
 #define DIR_SEPARATOR '/'
 #endif
 
-  char buf[PATH_MAX], *cwd, *path;
+  char buf[PATH_MAX], *path;
+  const char *cwd;
 
   /* This can only happen if store_exe_path is called multiple times.  */
   if (please_free_exe_path_when_done)
@@ -105,15 +106,22 @@ store_exe_path (const char * argv0)
     }
 #endif
 
-  /* On the simulator argv is not set.  */
-  if (argv0 == NULL || argv0[0] == '/')
+  /* If the path is absolute or on a simulator where argv is not set.  */
+#ifdef __MINGW32__
+  if (argv0 == NULL
+      || ('A' <= argv0[0] && argv0[0] <= 'Z' && argv0[1] == ':')
+      || ('a' <= argv0[0] && argv0[0] <= 'z' && argv0[1] == ':')
+      || (argv0[0] == '/' && argv0[1] == '/')
+      || (argv0[0] == '\\' && argv0[1] == '\\'))
+#else
+  if (argv0 == NULL || argv0[0] == DIR_SEPARATOR)
+#endif
     {
       exe_path = argv0;
       please_free_exe_path_when_done = 0;
       return;
     }
 
-  memset (buf, 0, sizeof (buf));
 #ifdef HAVE_GETCWD
   cwd = getcwd (buf, sizeof (buf));
   if (!cwd)