summaryrefslogtreecommitdiffstats
path: root/src/ex_getln.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-04-14 20:15:49 +0200
committerBram Moolenaar <Bram@vim.org>2020-04-14 20:15:49 +0200
commit6c2b7b8055b96463f78abb70f58c4c6d6d4b9d55 (patch)
tree597e3992bed8691b13c5a2c4a459d2541b9acc18 /src/ex_getln.c
parent7a1637f4c00ac3d0cbf894803ada1586a1717470 (diff)
patch 8.2.0578: heredoc for interfaces does not support "trim"v8.2.0578
Problem: Heredoc for interfaces does not support "trim". Solution: Update the script heredoc support to be same as the :let command. (Yegappan Lakshmanan, closes #5916)
Diffstat (limited to 'src/ex_getln.c')
-rw-r--r--src/ex_getln.c41
1 files changed, 17 insertions, 24 deletions
diff --git a/src/ex_getln.c b/src/ex_getln.c
index accedb5403..9b959fbad5 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -4408,44 +4408,37 @@ open_cmdwin(void)
* Returns a pointer to allocated memory with {script} or NULL.
*/
char_u *
-script_get(exarg_T *eap, char_u *cmd)
+script_get(exarg_T *eap UNUSED, char_u *cmd UNUSED)
{
- char_u *theline;
- char *end_pattern = NULL;
- char dot[] = ".";
+#ifdef FEAT_EVAL
+ list_T *l;
+ listitem_T *li;
+ char_u *s;
garray_T ga;
if (cmd[0] != '<' || cmd[1] != '<' || eap->getline == NULL)
return NULL;
+ cmd += 2;
- ga_init2(&ga, 1, 0x400);
+ l = heredoc_get(eap, cmd, TRUE);
+ if (l == NULL)
+ return NULL;
- if (cmd[2] != NUL)
- end_pattern = (char *)skipwhite(cmd + 2);
- else
- end_pattern = dot;
+ ga_init2(&ga, 1, 0x400);
- for (;;)
+ FOR_ALL_LIST_ITEMS(l, li)
{
- theline = eap->getline(
-#ifdef FEAT_EVAL
- eap->cstack->cs_looplevel > 0 ? -1 :
-#endif
- NUL, eap->cookie, 0, TRUE);
-
- if (theline == NULL || STRCMP(end_pattern, theline) == 0)
- {
- vim_free(theline);
- break;
- }
-
- ga_concat(&ga, theline);
+ s = tv_get_string(&li->li_tv);
+ ga_concat(&ga, s);
ga_append(&ga, '\n');
- vim_free(theline);
}
ga_append(&ga, NUL);
+ list_free(l);
return (char_u *)ga.ga_data;
+#else
+ return NULL;
+#endif
}
#if defined(FEAT_EVAL) || defined(PROTO)