diff options
author | bfredl <bjorn.linse@gmail.com> | 2024-02-19 12:07:16 +0100 |
---|---|---|
committer | bfredl <bjorn.linse@gmail.com> | 2024-02-19 13:48:39 +0100 |
commit | 404707c7606389ccb6c6062bfe9e2ff30a2552af (patch) | |
tree | 5ec63802345311d8ebdd50e51b528a12f06431d5 /src/nvim/api/private/helpers.c | |
parent | d14eefaee9519dae76bfaf4dd42e3bd7a05c7a1e (diff) | |
download | rneovim-404707c7606389ccb6c6062bfe9e2ff30a2552af.tar.gz rneovim-404707c7606389ccb6c6062bfe9e2ff30a2552af.tar.bz2 rneovim-404707c7606389ccb6c6062bfe9e2ff30a2552af.zip |
refactor(api): use arena for nvim_put and nvim_paste
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. |