Mercurial > vim
diff src/alloc.c @ 27022:eebbcc83fb75 v8.2.4040
patch 8.2.4040: keeping track of allocated lines is too complicated
Commit: https://github.com/vim/vim/commit/9f1a39a5d1cd7989ada2d1cb32f97d84360e050f
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Jan 8 15:39:39 2022 +0000
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.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 08 Jan 2022 16:45:02 +0100 |
parents | 268f6a3511df |
children | 018c911eb9cf |
line wrap: on
line diff
--- a/src/alloc.c +++ b/src/alloc.c @@ -702,7 +702,7 @@ ga_init(garray_T *gap) } 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 @@ ga_concat_strings(garray_T *gap, char *s * 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 @@ ga_add_string(garray_T *gap, char_u *p) } /* + * 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!