From: Bram Moolenaar Date: Sat, 2 Jul 2022 16:36:31 +0000 (+0100) Subject: patch 9.0.0028: MS-Windows: tests fail if there is a "runtime" directory X-Git-Tag: v9.0.0028 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=022f9ef16c955d6b5fca0f53b79899c56a3966c5;p=vim patch 9.0.0028: MS-Windows: tests fail if there is a "runtime" directory Problem: MS-Windows: tests fail if there is a stray "runtime" directory. Solution: Only use a "runtime" directory if it contains "defaults.vim". --- diff --git a/src/filepath.c b/src/filepath.c index 854d823c9..f1ae18e0b 100644 --- a/src/filepath.c +++ b/src/filepath.c @@ -774,6 +774,26 @@ shorten_dir(char_u *str) shorten_dir_len(str, 1); } +/* + * Return TRUE if "fname" is a readable file. + */ + int +file_is_readable(char_u *fname) +{ + int fd; + +#ifndef O_NONBLOCK +# define O_NONBLOCK 0 +#endif + if (*fname && !mch_isdir(fname) + && (fd = mch_open((char *)fname, O_RDONLY | O_NONBLOCK, 0)) >= 0) + { + close(fd); + return TRUE; + } + return FALSE; +} + #if defined(FEAT_EVAL) || defined(PROTO) /* @@ -893,26 +913,6 @@ f_exepath(typval_T *argvars, typval_T *rettv) rettv->vval.v_string = p; } -/* - * Return TRUE if "fname" is a readable file. - */ - int -file_is_readable(char_u *fname) -{ - int fd; - -#ifndef O_NONBLOCK -# define O_NONBLOCK 0 -#endif - if (*fname && !mch_isdir(fname) - && (fd = mch_open((char *)fname, O_RDONLY | O_NONBLOCK, 0)) >= 0) - { - close(fd); - return TRUE; - } - return FALSE; -} - /* * "filereadable()" function */ diff --git a/src/misc1.c b/src/misc1.c index 91e208b35..1ab315941 100644 --- a/src/misc1.c +++ b/src/misc1.c @@ -1655,7 +1655,21 @@ vim_version_dir(char_u *vimdir) vim_free(p); p = concat_fnames(vimdir, (char_u *)RUNTIME_DIRNAME, TRUE); if (p != NULL && mch_isdir(p)) - return p; + { + char_u *fname = concat_fnames(p, (char_u *)"defaults.vim", TRUE); + + // Check that "defaults.vim" exists in this directory, to avoid picking + // up a stray "runtime" directory, it would make many tests fail in + // mysterious ways. + if (fname != NULL) + { + int exists = file_is_readable(fname); + + vim_free(fname); + if (exists) + return p; + } + } vim_free(p); return NULL; } diff --git a/src/version.c b/src/version.c index 458591515..77be61cf8 100644 --- a/src/version.c +++ b/src/version.c @@ -735,6 +735,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 28, /**/ 27, /**/