diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/api/buffer.c | 8 | ||||
-rw-r--r-- | src/nvim/api/helpers.c | 12 | ||||
-rw-r--r-- | src/nvim/api/helpers.h | 7 |
3 files changed, 22 insertions, 5 deletions
diff --git a/src/nvim/api/buffer.c b/src/nvim/api/buffer.c index 49b34e8dff..e73823e5c3 100644 --- a/src/nvim/api/buffer.c +++ b/src/nvim/api/buffer.c @@ -108,8 +108,8 @@ StringArray buffer_get_slice(Buffer buffer, goto end; } - rv.items[i].data = xstrdup((char *)ml_get_buf(buf, (linenr_T)lnum, false)); - rv.items[i].size = strlen(rv.items[i].data); + const char *bufstr = (char *) ml_get_buf(buf, (linenr_T) lnum, false); + rv.items[i] = cstr_to_string(bufstr); } end: @@ -307,9 +307,7 @@ String buffer_get_name(Buffer buffer, Error *err) return rv; } - rv.data = xstrdup((char *)buf->b_ffname); - rv.size = strlen(rv.data); - return rv; + return cstr_to_string((char *)buf->b_ffname); } void buffer_set_name(Buffer buffer, String name, Error *err) diff --git a/src/nvim/api/helpers.c b/src/nvim/api/helpers.c index 88ec12f3b5..3256abeeee 100644 --- a/src/nvim/api/helpers.c +++ b/src/nvim/api/helpers.c @@ -339,6 +339,18 @@ tabpage_T * find_tab(Tabpage tabpage, Error *err) return rv; } +String cstr_to_string(const char *str) { + if (str == NULL) { + return (String) { .data = NULL, .size = 0 }; + } + + size_t len = strlen(str); + return (String) { + .data = xmemdup(str, len), + .size = len + }; +} + static bool object_to_vim(Object obj, typval_T *tv, Error *err) { tv->v_type = VAR_UNKNOWN; diff --git a/src/nvim/api/helpers.h b/src/nvim/api/helpers.h index c9c7e9cdc8..f93487d62f 100644 --- a/src/nvim/api/helpers.h +++ b/src/nvim/api/helpers.h @@ -86,5 +86,12 @@ win_T * find_window(Window window, Error *err); /// @return the tabpage pointer tabpage_T * find_tab(Tabpage tabpage, Error *err); +/// Copies a C string into a String (binary safe string, characters + length) +/// +/// @param str the C string to copy +/// @return the resulting String, if the input string was NULL, then an +/// empty String is returned +String cstr_to_string(const char *str); + #endif // NVIM_API_HELPERS_H |