OSDN Git Service

2012-01-11 Tobias Burnus <burnus@net-b.de>
authorburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 11 Jan 2012 14:39:28 +0000 (14:39 +0000)
committerburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 11 Jan 2012 14:39:28 +0000 (14:39 +0000)
        * runtime/main.c (store_exe_path): Fix absolute path
        detection for Windows.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@183094 138bc75d-0d04-0410-961f-82ee72b054a4

libgfortran/ChangeLog
libgfortran/runtime/main.c

index 3e27ed9..b1e2b04 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>
 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.
        PR libfortran/51803
        * runtime/main.c (store_exe_path): Handle getcwd failure and lack
        of the function better.
index 1cad5ef..9ee4702 100644 (file)
@@ -86,7 +86,8 @@ store_exe_path (const char * argv0)
 #define DIR_SEPARATOR '/'
 #endif
 
 #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)
 
   /* 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
 
     }
 #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;
     }
 
     {
       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)
 #ifdef HAVE_GETCWD
   cwd = getcwd (buf, sizeof (buf));
   if (!cwd)