diff options
author | Bram Moolenaar <Bram@vim.org> | 2017-08-17 17:21:05 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2017-08-17 17:21:05 +0200 |
commit | bc906e445c77eb4fb5ef97465a45b46499bba111 (patch) | |
tree | afb23c34daba166727f75481acb834ec3057f70f /src/main.c | |
parent | f5be7cd01642fafc4b7d68894eb60cca60c7a405 (diff) | |
download | vim-git-bc906e445c77eb4fb5ef97465a45b46499bba111.tar.gz |
patch 8.0.0954: /proc/self/exe might be a relative pathv8.0.0954
Problem: /proc/self/exe might be a relative path.
Solution: Make the path a full path. (James McCoy, closes #1983)
Diffstat (limited to 'src/main.c')
-rw-r--r-- | src/main.c | 35 |
1 files changed, 17 insertions, 18 deletions
diff --git a/src/main.c b/src/main.c index c6b103e5e..584008585 100644 --- a/src/main.c +++ b/src/main.c @@ -3597,36 +3597,35 @@ set_progpath(char_u *argv0) { char_u *val = argv0; -# ifdef PROC_EXE_LINK - char buf[MAXPATHL + 1]; - ssize_t len; - - len = readlink(PROC_EXE_LINK, buf, MAXPATHL); - if (len > 0) - { - buf[len] = NUL; - val = (char_u *)buf; - } -# else +# if defined(WIN32) /* A relative path containing a "/" will become invalid when using ":cd", * turn it into a full path. * On MS-Windows "vim" should be expanded to "vim.exe", thus always do * this. */ -# ifdef WIN32 char_u *path = NULL; if (mch_can_exe(argv0, &path, FALSE) && path != NULL) val = path; -# else - char_u buf[MAXPATHL]; +# else + char_u buf[MAXPATHL + 1]; +# ifdef PROC_EXE_LINK + char linkbuf[MAXPATHL + 1]; + ssize_t len; - if (!mch_isFullName(argv0)) + len = readlink(PROC_EXE_LINK, linkbuf, MAXPATHL); + if (len > 0) { - if (gettail(argv0) != argv0 - && vim_FullName(argv0, buf, MAXPATHL, TRUE) != FAIL) - val = buf; + linkbuf[len] = NUL; + val = (char_u *)linkbuf; } # endif + + if (!mch_isFullName(val)) + { + if (gettail(val) != val + && vim_FullName(val, buf, MAXPATHL, TRUE) != FAIL) + val = buf; + } # endif set_vim_var_string(VV_PROGPATH, val, -1); |