diff options
Diffstat (limited to 'src/nvim/api/buffer.c')
-rw-r--r-- | src/nvim/api/buffer.c | 43 |
1 files changed, 27 insertions, 16 deletions
diff --git a/src/nvim/api/buffer.c b/src/nvim/api/buffer.c index e73823e5c3..4721045048 100644 --- a/src/nvim/api/buffer.c +++ b/src/nvim/api/buffer.c @@ -4,8 +4,8 @@ #include <stdlib.h> #include "nvim/api/buffer.h" -#include "nvim/api/helpers.h" -#include "nvim/api/defs.h" +#include "nvim/api/private/helpers.h" +#include "nvim/api/private/defs.h" #include "nvim/vim.h" #include "nvim/buffer.h" #include "nvim/memline.h" @@ -56,10 +56,12 @@ String buffer_get_line(Buffer buffer, Integer index, Error *err) String rv = {.size = 0}; StringArray slice = buffer_get_slice(buffer, index, index, true, true, err); - if (slice.size) { + if (!err->set && slice.size) { rv = slice.items[0]; } + free(slice.items); + return rv; } @@ -71,7 +73,7 @@ void buffer_set_line(Buffer buffer, Integer index, String line, Error *err) void buffer_del_line(Buffer buffer, Integer index, Error *err) { - StringArray array = {.size = 0}; + StringArray array = ARRAY_DICT_INIT; buffer_set_slice(buffer, index, index, true, true, array, err); } @@ -82,7 +84,7 @@ StringArray buffer_get_slice(Buffer buffer, Boolean include_end, Error *err) { - StringArray rv = {.size = 0}; + StringArray rv = ARRAY_DICT_INIT; buf_T *buf = find_buffer(buffer, err); if (!buf) { @@ -115,9 +117,7 @@ StringArray buffer_get_slice(Buffer buffer, end: if (err->set) { for (size_t i = 0; i < rv.size; i++) { - if (rv.items[i].data != NULL) { - free(rv.items[i].data); - } + free(rv.items[i].data); } free(rv.items); @@ -219,9 +219,9 @@ void buffer_set_slice(Buffer buffer, goto end; } - // Same as with replacing + // Same as with replacing, but we also need to free lines + free(lines[i]); lines[i] = NULL; - i++; extra++; } @@ -240,10 +240,8 @@ void buffer_set_slice(Buffer buffer, } end: - for (uint32_t i = 0; i < new_len; i++) { - if (lines[i] != NULL) { - free(lines[i]); - } + for (size_t i = 0; i < new_len; i++) { + free(lines[i]); } free(lines); @@ -298,9 +296,21 @@ void buffer_set_option(Buffer buffer, String name, Object value, Error *err) set_option_to(buf, SREQ_BUF, name, value, err); } +Integer buffer_get_number(Buffer buffer, Error *err) +{ + Integer rv = 0; + buf_T *buf = find_buffer(buffer, err); + + if (!buf) { + return rv; + } + + return buf->b_fnum; +} + String buffer_get_name(Buffer buffer, Error *err) { - String rv = {.size = 0, .data = ""}; + String rv = STRING_INIT; buf_T *buf = find_buffer(buffer, err); if (!buf || buf->b_ffname == NULL) { @@ -326,6 +336,7 @@ void buffer_set_name(Buffer buffer, String name, Error *err) // Using aucmd_*: autocommands will be executed by rename_buffer aucmd_prepbuf(&aco, buf); ren_ret = rename_buffer((char_u *)val); + free(val); aucmd_restbuf(&aco); if (try_end(err)) { @@ -357,7 +368,7 @@ Position buffer_get_mark(Buffer buffer, String name, Error *err) return rv; } - if (name.size != 0) { + if (name.size != 1) { set_api_error("mark name must be a single character", err); return rv; } |