From 4bac5e9ce19afd4647ee4d313c9485229d05a334 Mon Sep 17 00:00:00 2001 From: Thiago de Arruda Date: Mon, 26 May 2014 13:39:05 -0300 Subject: API: Refactor: Duplicate/free string arguments coming from msgpack When receiving strings *from* msgpack, we don't need to duplicate/free since the data only lives in the msgpack parse buffer until the end of the call. But in order to reuse `msgpack_rpc_free_object` when sending event data(which is sent *to* msgpack), Strings must be freed, which means they must also be allocated separately. --- src/nvim/api/buffer.c | 2 +- src/nvim/api/private/defs.h | 1 + src/nvim/api/private/helpers.c | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) (limited to 'src/nvim/api') diff --git a/src/nvim/api/buffer.c b/src/nvim/api/buffer.c index bf30ccf856..ef2f9e9d0e 100644 --- a/src/nvim/api/buffer.c +++ b/src/nvim/api/buffer.c @@ -307,7 +307,7 @@ Integer buffer_get_number(Buffer buffer, Error *err) 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) { diff --git a/src/nvim/api/private/defs.h b/src/nvim/api/private/defs.h index a91907f4f8..4d9f5fb708 100644 --- a/src/nvim/api/private/defs.h +++ b/src/nvim/api/private/defs.h @@ -6,6 +6,7 @@ #include #define ARRAY_DICT_INIT {.size = 0, .items = NULL} +#define STRING_INIT {.data = NULL, .size = 0} #define REMOTE_TYPE(type) typedef uint64_t type #define TYPED_ARRAY_OF(type) \ diff --git a/src/nvim/api/private/helpers.c b/src/nvim/api/private/helpers.c index a43e7a8d2a..206129dd78 100644 --- a/src/nvim/api/private/helpers.c +++ b/src/nvim/api/private/helpers.c @@ -319,7 +319,7 @@ tabpage_T * find_tab(Tabpage tabpage, Error *err) String cstr_to_string(const char *str) { if (str == NULL) { - return (String) { .data = NULL, .size = 0 }; + return (String) STRING_INIT; } size_t len = strlen(str); -- cgit From d6291894d48c2ae558a603a2207c52833ce10f01 Mon Sep 17 00:00:00 2001 From: Thiago de Arruda Date: Mon, 26 May 2014 13:39:16 -0300 Subject: Build: Add more files to clint-files.txt and fix errors --- src/nvim/api/private/defs.h | 6 +++--- src/nvim/api/private/handle.h | 6 +++--- src/nvim/api/private/helpers.h | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) (limited to 'src/nvim/api') diff --git a/src/nvim/api/private/defs.h b/src/nvim/api/private/defs.h index 4d9f5fb708..fbf9018043 100644 --- a/src/nvim/api/private/defs.h +++ b/src/nvim/api/private/defs.h @@ -1,5 +1,5 @@ -#ifndef NVIM_API_DEFS_H -#define NVIM_API_DEFS_H +#ifndef NVIM_API_PRIVATE_DEFS_H +#define NVIM_API_PRIVATE_DEFS_H #include #include @@ -85,5 +85,5 @@ struct key_value_pair { }; -#endif // NVIM_API_DEFS_H +#endif // NVIM_API_PRIVATE_DEFS_H diff --git a/src/nvim/api/private/handle.h b/src/nvim/api/private/handle.h index 27df453233..1a196f6797 100644 --- a/src/nvim/api/private/handle.h +++ b/src/nvim/api/private/handle.h @@ -1,5 +1,5 @@ -#ifndef NVIM_API_HANDLE_H -#define NVIM_API_HANDLE_H +#ifndef NVIM_API_PRIVATE_HANDLE_H +#define NVIM_API_PRIVATE_HANDLE_H #include "nvim/vim.h" #include "nvim/buffer_defs.h" @@ -16,5 +16,5 @@ HANDLE_DECLS(tabpage_T, tabpage) void handle_init(void); -#endif // NVIM_API_HANDLE_H +#endif // NVIM_API_PRIVATE_HANDLE_H diff --git a/src/nvim/api/private/helpers.h b/src/nvim/api/private/helpers.h index 2d917c2b5e..04b128d3f1 100644 --- a/src/nvim/api/private/helpers.h +++ b/src/nvim/api/private/helpers.h @@ -1,5 +1,5 @@ -#ifndef NVIM_API_HELPERS_H -#define NVIM_API_HELPERS_H +#ifndef NVIM_API_PRIVATE_HELPERS_H +#define NVIM_API_PRIVATE_HELPERS_H #include @@ -94,5 +94,5 @@ tabpage_T * find_tab(Tabpage tabpage, Error *err); /// empty String is returned String cstr_to_string(const char *str); -#endif // NVIM_API_HELPERS_H +#endif // NVIM_API_PRIVATE_HELPERS_H -- cgit From 0cc6050300b0e6b53b750e3bd017c1eca9a072dc Mon Sep 17 00:00:00 2001 From: Thiago de Arruda Date: Mon, 26 May 2014 13:39:19 -0300 Subject: API: Bugfix: Remove memory leak from set_option_to --- src/nvim/api/private/helpers.c | 1 + 1 file changed, 1 insertion(+) (limited to 'src/nvim/api') diff --git a/src/nvim/api/private/helpers.c b/src/nvim/api/private/helpers.c index 206129dd78..861ac8cc1b 100644 --- a/src/nvim/api/private/helpers.c +++ b/src/nvim/api/private/helpers.c @@ -267,6 +267,7 @@ void set_option_to(void *to, int type, String name, Object value, Error *err) char *val = xstrndup(value.data.string.data, value.data.string.size); set_option_value_for(key, 0, val, opt_flags, type, to, err); + free(val); } cleanup: -- cgit From 807f940aa499fb1a33a4b1d066204ff58f25e075 Mon Sep 17 00:00:00 2001 From: Thiago de Arruda Date: Mon, 26 May 2014 13:39:21 -0300 Subject: API: Bugfix: Remove memory leak from buffer_set_slice --- src/nvim/api/buffer.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/nvim/api') diff --git a/src/nvim/api/buffer.c b/src/nvim/api/buffer.c index ef2f9e9d0e..c8a8240fee 100644 --- a/src/nvim/api/buffer.c +++ b/src/nvim/api/buffer.c @@ -217,7 +217,8 @@ 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; extra++; } -- cgit From 327347e3b47704f25e9a8d7d617d4f91fb128d43 Mon Sep 17 00:00:00 2001 From: Thiago de Arruda Date: Mon, 26 May 2014 13:39:23 -0300 Subject: API: Bugfix: Remove memory leak from buffer_set_name --- src/nvim/api/buffer.c | 1 + 1 file changed, 1 insertion(+) (limited to 'src/nvim/api') diff --git a/src/nvim/api/buffer.c b/src/nvim/api/buffer.c index c8a8240fee..33ddacce69 100644 --- a/src/nvim/api/buffer.c +++ b/src/nvim/api/buffer.c @@ -334,6 +334,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)) { -- cgit From cbf9564ee01535e3a2168219ef8f84f857519da3 Mon Sep 17 00:00:00 2001 From: Thiago de Arruda Date: Mon, 26 May 2014 13:39:25 -0300 Subject: API: Bugfix: Remove memory leak from buffer_get_line --- src/nvim/api/buffer.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/nvim/api') diff --git a/src/nvim/api/buffer.c b/src/nvim/api/buffer.c index 33ddacce69..4721045048 100644 --- a/src/nvim/api/buffer.c +++ b/src/nvim/api/buffer.c @@ -60,6 +60,8 @@ String buffer_get_line(Buffer buffer, Integer index, Error *err) rv = slice.items[0]; } + free(slice.items); + return rv; } -- cgit