diff options
author | bfredl <bjorn.linse@gmail.com> | 2024-02-19 21:21:05 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-19 21:21:05 +0100 |
commit | 8952a89db588db10a9dba16356f9bbd35ca5fabb (patch) | |
tree | ac34d55b77303deadef6a7ed3f4202259324a249 /src/nvim/api/private/helpers.c | |
parent | 8fdc84d0aaec63d57203bdef4b88047479ad4fc1 (diff) | |
parent | 404707c7606389ccb6c6062bfe9e2ff30a2552af (diff) | |
download | rneovim-8952a89db588db10a9dba16356f9bbd35ca5fabb.tar.gz rneovim-8952a89db588db10a9dba16356f9bbd35ca5fabb.tar.bz2 rneovim-8952a89db588db10a9dba16356f9bbd35ca5fabb.zip |
Merge pull request #27534 from bfredl/userarena
refactor(api): next PR to make use of the arena
Diffstat (limited to 'src/nvim/api/private/helpers.c')
-rw-r--r-- | src/nvim/api/private/helpers.c | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/src/nvim/api/private/helpers.c b/src/nvim/api/private/helpers.c index 63c5689109..14f4046a56 100644 --- a/src/nvim/api/private/helpers.c +++ b/src/nvim/api/private/helpers.c @@ -456,9 +456,10 @@ String ga_take_string(garray_T *ga) /// @param input Binary string /// @param crlf Also break lines at CR and CRLF. /// @return [allocated] String array -Array string_to_array(const String input, bool crlf) +Array string_to_array(const String input, bool crlf, Arena *arena) { - Array ret = ARRAY_DICT_INIT; + ArrayBuilder ret = ARRAY_DICT_INIT; + kvi_init(ret); for (size_t i = 0; i < input.size; i++) { const char *start = input.data + i; const char *end = start; @@ -473,20 +474,17 @@ Array string_to_array(const String input, bool crlf) if (crlf && *end == CAR && i + 1 < input.size && *(end + 1) == NL) { i += 1; // Advance past CRLF. } - String s = { - .size = line_len, - .data = xmemdupz(start, line_len), - }; + String s = CBUF_TO_ARENA_STR(arena, start, line_len); memchrsub(s.data, NUL, NL, line_len); - ADD(ret, STRING_OBJ(s)); + kvi_push(ret, STRING_OBJ(s)); // If line ends at end-of-buffer, add empty final item. // This is "readfile()-style", see also ":help channel-lines". if (i + 1 == input.size && (*end == NL || (crlf && *end == CAR))) { - ADD(ret, STRING_OBJ(STRING_INIT)); + kvi_push(ret, STRING_OBJ(STRING_INIT)); } } - return ret; + return arena_take_arraybuilder(arena, &ret); } /// Normalizes 0-based indexes to buffer line numbers. |