aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/digraph.c
diff options
context:
space:
mode:
authorJustin M. Keyes <justinkz@gmail.com>2018-01-20 16:33:43 +0100
committerGitHub <noreply@github.com>2018-01-20 16:33:43 +0100
commitee84da358c27b9c0a6bbd49424bc9d04bb98d662 (patch)
treef1dc827adfa6d7e3cc6f766657708238ac4b3b0b /src/nvim/digraph.c
parent6a826fce91206e1237e0a5822a67cfd772f524dd (diff)
parent5a96a9eba238b51e2e90f87a0a9338da363e9e28 (diff)
downloadrneovim-ee84da358c27b9c0a6bbd49424bc9d04bb98d662.tar.gz
rneovim-ee84da358c27b9c0a6bbd49424bc9d04bb98d662.tar.bz2
rneovim-ee84da358c27b9c0a6bbd49424bc9d04bb98d662.zip
Merge #7878 from justinmk/keymap-leak
Diffstat (limited to 'src/nvim/digraph.c')
-rw-r--r--src/nvim/digraph.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/src/nvim/digraph.c b/src/nvim/digraph.c
index dbcc8db109..bc4c12e0b7 100644
--- a/src/nvim/digraph.c
+++ b/src/nvim/digraph.c
@@ -1841,6 +1841,16 @@ void ex_loadkeymap(exarg_T *eap)
status_redraw_curbuf();
}
+/// Frees the buf_T.b_kmap_ga field of a buffer.
+void keymap_ga_clear(garray_T *kmap_ga)
+{
+ kmap_T *kp = (kmap_T *)kmap_ga->ga_data;
+ for (int i = 0; i < kmap_ga->ga_len; i++) {
+ xfree(kp[i].from);
+ xfree(kp[i].to);
+ }
+}
+
/// Stop using 'keymap'.
static void keymap_unload(void)
{
@@ -1858,12 +1868,11 @@ static void keymap_unload(void)
// clear the ":lmap"s
kp = (kmap_T *)curbuf->b_kmap_ga.ga_data;
- for (int i = 0; i < curbuf->b_kmap_ga.ga_len; ++i) {
+ for (int i = 0; i < curbuf->b_kmap_ga.ga_len; i++) {
vim_snprintf((char *)buf, sizeof(buf), "<buffer> %s", kp[i].from);
- (void)do_map(1, buf, LANGMAP, FALSE);
- xfree(kp[i].from);
- xfree(kp[i].to);
+ (void)do_map(1, buf, LANGMAP, false);
}
+ keymap_ga_clear(&curbuf->b_kmap_ga);
p_cpo = save_cpo;