patch 8.2.4040: keeping track of allocated lines is too complicated
Problem: Keeping track of allocated lines in user functions is too
complicated.
Solution: Instead of freeing individual lines keep them all until the end.
diff --git a/src/alloc.c b/src/alloc.c
index 3651a2e..e3cd857 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -702,7 +702,7 @@
}
void
-ga_init2(garray_T *gap, int itemsize, int growsize)
+ga_init2(garray_T *gap, size_t itemsize, int growsize)
{
ga_init(gap);
gap->ga_itemsize = itemsize;
@@ -789,7 +789,7 @@
* When out of memory nothing changes and FAIL is returned.
*/
int
-ga_add_string(garray_T *gap, char_u *p)
+ga_copy_string(garray_T *gap, char_u *p)
{
char_u *cp = vim_strsave(p);
@@ -806,6 +806,19 @@
}
/*
+ * Add string "p" to "gap".
+ * When out of memory "p" is freed and FAIL is returned.
+ */
+ int
+ga_add_string(garray_T *gap, char_u *p)
+{
+ if (ga_grow(gap, 1) == FAIL)
+ return FAIL;
+ ((char_u **)(gap->ga_data))[gap->ga_len++] = p;
+ return OK;
+}
+
+/*
* Concatenate a string to a growarray which contains bytes.
* When "s" is NULL does not do anything.
* Note: Does NOT copy the NUL at the end!