updated for version 7.2-262
diff --git a/src/ex_getln.c b/src/ex_getln.c
index c9d8c30..1537128 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -3266,7 +3266,6 @@
int i, j;
char_u *p1;
char_u *p2;
- int oldlen;
int difflen;
int v;
@@ -3291,7 +3290,7 @@
out_flush();
i = (int)(xp->xp_pattern - ccline.cmdbuff);
- oldlen = ccline.cmdpos - i;
+ xp->xp_pattern_len = ccline.cmdpos - i;
if (type == WILD_NEXT || type == WILD_PREV)
{
@@ -3305,18 +3304,20 @@
/*
* Translate string into pattern and expand it.
*/
- if ((p1 = addstar(&ccline.cmdbuff[i], oldlen, xp->xp_context)) == NULL)
+ if ((p1 = addstar(xp->xp_pattern, xp->xp_pattern_len,
+ xp->xp_context)) == NULL)
p2 = NULL;
else
{
- p2 = ExpandOne(xp, p1, vim_strnsave(&ccline.cmdbuff[i], oldlen),
+ p2 = ExpandOne(xp, p1,
+ vim_strnsave(&ccline.cmdbuff[i], xp->xp_pattern_len),
WILD_HOME_REPLACE|WILD_ADD_SLASH|WILD_SILENT|WILD_ESCAPE
|options, type);
vim_free(p1);
/* longest match: make sure it is not shorter (happens with :help */
if (p2 != NULL && type == WILD_LONGEST)
{
- for (j = 0; j < oldlen; ++j)
+ for (j = 0; j < xp->xp_pattern_len; ++j)
if (ccline.cmdbuff[i + j] == '*'
|| ccline.cmdbuff[i + j] == '?')
break;
@@ -3331,7 +3332,7 @@
if (p2 != NULL && !got_int)
{
- difflen = (int)STRLEN(p2) - oldlen;
+ difflen = (int)STRLEN(p2) - xp->xp_pattern_len;
if (ccline.cmdlen + difflen > ccline.cmdbufflen - 4)
{
v = realloc_cmdbuff(ccline.cmdlen + difflen);
@@ -3620,6 +3621,7 @@
expand_T *xp;
{
xp->xp_pattern = NULL;
+ xp->xp_pattern_len = 0;
xp->xp_backslash = XP_BS_NONE;
#ifndef BACKSLASH_IN_FILENAME
xp->xp_shell = FALSE;
@@ -4311,8 +4313,8 @@
}
/* add star to file name, or convert to regexp if not exp. files. */
- file_str = addstar(xp->xp_pattern,
- (int)(str + col - xp->xp_pattern), xp->xp_context);
+ xp->xp_pattern_len = (int)(str + col - xp->xp_pattern);
+ file_str = addstar(xp->xp_pattern, xp->xp_pattern_len, xp->xp_context);
if (file_str == NULL)
return EXPAND_UNSUCCESSFUL;
@@ -4781,7 +4783,7 @@
sprintf((char *)num, "%d", ccline.cmdpos);
args[1] = ccline.cmdbuff;
}
- args[0] = xp->xp_pattern;
+ args[0] = vim_strnsave(xp->xp_pattern, xp->xp_pattern_len);
args[2] = num;
/* Save the cmdline, we don't know what the function may do. */
@@ -4797,6 +4799,7 @@
if (ccline.cmdbuff != NULL)
ccline.cmdbuff[ccline.cmdlen] = keep;
+ vim_free(args[0]);
return ret;
}
diff --git a/src/structs.h b/src/structs.h
index 137352d..99afecf 100644
--- a/src/structs.h
+++ b/src/structs.h
@@ -432,6 +432,7 @@
{
int xp_context; /* type of expansion */
char_u *xp_pattern; /* start of item to expand */
+ int xp_pattern_len; /* bytes in xp_pattern before cursor */
#if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
char_u *xp_arg; /* completion function */
int xp_scriptID; /* SID for completion function */
diff --git a/src/version.c b/src/version.c
index 9ccfc52..ae540d7 100644
--- a/src/version.c
+++ b/src/version.c
@@ -677,6 +677,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 262,
+/**/
261,
/**/
260,