Skip to content

Commit 43a908c

Browse files
committed
updated for version 7.4.654
Problem: glob() and globpath() cannot include links to non-existing files. (Charles Campbell) Solution: Add an argument to include all links with glob(). (James McCoy) Also for globpath().
1 parent 1c9708a commit 43a908c

File tree

4 files changed

+35
-19
lines changed

4 files changed

+35
-19
lines changed

src/eval.c

+20-10
Original file line numberDiff line numberDiff line change
@@ -8141,8 +8141,8 @@ static struct fst
81418141
{"getwinposx", 0, 0, f_getwinposx},
81428142
{"getwinposy", 0, 0, f_getwinposy},
81438143
{"getwinvar", 2, 3, f_getwinvar},
8144-
{"glob", 1, 3, f_glob},
8145-
{"globpath", 2, 4, f_globpath},
8144+
{"glob", 1, 4, f_glob},
8145+
{"globpath", 2, 5, f_globpath},
81468146
{"has", 1, 1, f_has},
81478147
{"has_key", 2, 2, f_has_key},
81488148
{"haslocaldir", 0, 0, f_haslocaldir},
@@ -12412,11 +12412,16 @@ f_glob(argvars, rettv)
1241212412
{
1241312413
if (get_tv_number_chk(&argvars[1], &error))
1241412414
options |= WILD_KEEP_ALL;
12415-
if (argvars[2].v_type != VAR_UNKNOWN
12416-
&& get_tv_number_chk(&argvars[2], &error))
12415+
if (argvars[2].v_type != VAR_UNKNOWN)
1241712416
{
12418-
rettv->v_type = VAR_LIST;
12419-
rettv->vval.v_list = NULL;
12417+
if (get_tv_number_chk(&argvars[2], &error))
12418+
{
12419+
rettv->v_type = VAR_LIST;
12420+
rettv->vval.v_list = NULL;
12421+
}
12422+
if (argvars[3].v_type != VAR_UNKNOWN
12423+
&& get_tv_number_chk(&argvars[3], &error))
12424+
options |= WILD_ALLLINKS;
1242012425
}
1242112426
}
1242212427
if (!error)
@@ -12466,11 +12471,16 @@ f_globpath(argvars, rettv)
1246612471
{
1246712472
if (get_tv_number_chk(&argvars[2], &error))
1246812473
flags |= WILD_KEEP_ALL;
12469-
if (argvars[3].v_type != VAR_UNKNOWN
12470-
&& get_tv_number_chk(&argvars[3], &error))
12474+
if (argvars[3].v_type != VAR_UNKNOWN)
1247112475
{
12472-
rettv->v_type = VAR_LIST;
12473-
rettv->vval.v_list = NULL;
12476+
if (get_tv_number_chk(&argvars[3], &error))
12477+
{
12478+
rettv->v_type = VAR_LIST;
12479+
rettv->vval.v_list = NULL;
12480+
}
12481+
if (argvars[4].v_type != VAR_UNKNOWN
12482+
&& get_tv_number_chk(&argvars[4], &error))
12483+
flags |= WILD_ALLLINKS;
1247412484
}
1247512485
}
1247612486
if (file != NULL && !error)

src/ex_getln.c

+2
Original file line numberDiff line numberDiff line change
@@ -4563,6 +4563,8 @@ ExpandFromContext(xp, pat, num_file, file, options)
45634563
flags |= EW_KEEPALL;
45644564
if (options & WILD_SILENT)
45654565
flags |= EW_SILENT;
4566+
if (options & WILD_ALLLINKS)
4567+
flags |= EW_ALLLINKS;
45664568

45674569
if (xp->xp_context == EXPAND_FILES
45684570
|| xp->xp_context == EXPAND_DIRECTORIES

src/version.c

+2
Original file line numberDiff line numberDiff line change
@@ -741,6 +741,8 @@ static char *(features[]) =
741741

742742
static int included_patches[] =
743743
{ /* Add new patch number below this line */
744+
/**/
745+
654,
744746
/**/
745747
653,
746748
/**/

src/vim.h

+11-9
Original file line numberDiff line numberDiff line change
@@ -814,15 +814,16 @@ extern char *(*dyn_libintl_textdomain)(const char *domainname);
814814
#define WILD_LONGEST 7
815815
#define WILD_ALL_KEEP 8
816816

817-
#define WILD_LIST_NOTFOUND 1
818-
#define WILD_HOME_REPLACE 2
819-
#define WILD_USE_NL 4
820-
#define WILD_NO_BEEP 8
821-
#define WILD_ADD_SLASH 16
822-
#define WILD_KEEP_ALL 32
823-
#define WILD_SILENT 64
824-
#define WILD_ESCAPE 128
825-
#define WILD_ICASE 256
817+
#define WILD_LIST_NOTFOUND 0x01
818+
#define WILD_HOME_REPLACE 0x02
819+
#define WILD_USE_NL 0x04
820+
#define WILD_NO_BEEP 0x08
821+
#define WILD_ADD_SLASH 0x10
822+
#define WILD_KEEP_ALL 0x20
823+
#define WILD_SILENT 0x40
824+
#define WILD_ESCAPE 0x80
825+
#define WILD_ICASE 0x100
826+
#define WILD_ALLLINKS 0x200
826827

827828
/* Flags for expand_wildcards() */
828829
#define EW_DIR 0x01 /* include directory names */
@@ -839,6 +840,7 @@ extern char *(*dyn_libintl_textdomain)(const char *domainname);
839840
#define EW_KEEPDOLLAR 0x800 /* do not escape $, $var is expanded */
840841
/* Note: mostly EW_NOTFOUND and EW_SILENT are mutually exclusive: EW_NOTFOUND
841842
* is used when executing commands and EW_SILENT for interactive expanding. */
843+
#define EW_ALLLINKS 0x1000 /* also links not pointing to existing file */
842844

843845
/* Flags for find_file_*() functions. */
844846
#define FINDFILE_FILE 0 /* only files */

0 commit comments

Comments
 (0)