summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ex_cmds2.c38
-rw-r--r--src/version.c2
2 files changed, 26 insertions, 14 deletions
diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c
index 4b2564bbd..ddfe103b6 100644
--- a/src/ex_cmds2.c
+++ b/src/ex_cmds2.c
@@ -3439,22 +3439,32 @@ getsourceline(c, cookie, indent)
{
/* compensate for the one line read-ahead */
--sourcing_lnum;
- for (;;)
+
+ /* Get the next line and concatenate it when it starts with a
+ * backslash. We always need to read the next line, keep it in
+ * sp->nextline. */
+ sp->nextline = get_one_sourceline(sp);
+ if (sp->nextline != NULL && *(p = skipwhite(sp->nextline)) == '\\')
{
- sp->nextline = get_one_sourceline(sp);
- if (sp->nextline == NULL)
- break;
- p = skipwhite(sp->nextline);
- if (*p != '\\')
- break;
- s = alloc((unsigned)(STRLEN(line) + STRLEN(p)));
- if (s == NULL) /* out of memory */
- break;
- STRCPY(s, line);
- STRCAT(s, p + 1);
+ garray_T ga;
+
+ ga_init2(&ga, (int)sizeof(char_u), 200);
+ ga_concat(&ga, line);
+ ga_concat(&ga, p + 1);
+ for (;;)
+ {
+ vim_free(sp->nextline);
+ sp->nextline = get_one_sourceline(sp);
+ if (sp->nextline == NULL)
+ break;
+ p = skipwhite(sp->nextline);
+ if (*p != '\\')
+ break;
+ ga_concat(&ga, p + 1);
+ }
+ ga_append(&ga, NUL);
vim_free(line);
- line = s;
- vim_free(sp->nextline);
+ line = ga.ga_data;
}
}
diff --git a/src/version.c b/src/version.c
index c1c568d0a..7fd75fdef 100644
--- a/src/version.c
+++ b/src/version.c
@@ -715,6 +715,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 433,
+/**/
432,
/**/
431,