aboutsummaryrefslogtreecommitdiff
path: root/libgfortran/runtime
diff options
context:
space:
mode:
authorTobias Burnus <burnus@gcc.gnu.org>2012-01-11 15:39:28 +0100
committerTobias Burnus <burnus@gcc.gnu.org>2012-01-11 15:39:28 +0100
commit4dec0a42c32ae918ed6c727e6c9ea4399676e7aa (patch)
treef1d8fe218cd54aa92750dbada0cd3015f9ffb20e /libgfortran/runtime
parent1c97289f9f4b592c877471145993191d0312878d (diff)
downloadgcc-4dec0a42c32ae918ed6c727e6c9ea4399676e7aa.zip
gcc-4dec0a42c32ae918ed6c727e6c9ea4399676e7aa.tar.gz
gcc-4dec0a42c32ae918ed6c727e6c9ea4399676e7aa.tar.bz2
main.c (store_exe_path): Fix absolute path detection for Windows.
2012-01-11 Tobias Burnus <burnus@net-b.de> * runtime/main.c (store_exe_path): Fix absolute path detection for Windows. From-SVN: r183094
Diffstat (limited to 'libgfortran/runtime')
-rw-r--r--libgfortran/runtime/main.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/libgfortran/runtime/main.c b/libgfortran/runtime/main.c
index 1cad5ef..9ee4702 100644
--- a/libgfortran/runtime/main.c
+++ b/libgfortran/runtime/main.c
@@ -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)