From bc906e445c77eb4fb5ef97465a45b46499bba111 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Thu, 17 Aug 2017 17:21:05 +0200 Subject: [PATCH] patch 8.0.0954: /proc/self/exe might be a relative path Problem: /proc/self/exe might be a relative path. Solution: Make the path a full path. (James McCoy, closes #1983) --- src/main.c | 35 +++++++++++++++++------------------ src/version.c | 2 ++ 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/src/main.c b/src/main.c index c6b103e5e9195..584008585a9b3 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); diff --git a/src/version.c b/src/version.c index 352e0a9fef9ad..0990d834ab9a4 100644 --- a/src/version.c +++ b/src/version.c @@ -769,6 +769,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 954, /**/ 953, /**/