Merge #7878 from justinmk/keymap-leak

This commit is contained in:
Justin M. Keyes
2018-01-20 16:33:43 +01:00
committed by GitHub
6 changed files with 36 additions and 5 deletions

View File

@@ -1775,6 +1775,7 @@ void free_buf_options(buf_T *buf, int free_p_ff)
clear_string_option(&buf->b_p_flp);
clear_string_option(&buf->b_p_isk);
clear_string_option(&buf->b_p_keymap);
keymap_ga_clear(&buf->b_kmap_ga);
ga_clear(&buf->b_kmap_ga);
clear_string_option(&buf->b_p_com);
clear_string_option(&buf->b_p_cms);

View File

@@ -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;

View File

@@ -1619,6 +1619,9 @@ void parse_cino(buf_T *buf)
* while(). */
buf->b_ind_if_for_while = 0;
// indentation for # comments
buf->b_ind_hash_comment = 0;
for (p = buf->b_p_cino; *p; ) {
l = p++;
if (*p == '-')

View File

@@ -40,11 +40,12 @@ SCRIPTS ?= $(SCRIPTS_DEFAULT)
# Tests using runtest.vim.
# Keep test_alot*.res as the last one, sort the others.
NEW_TESTS ?= \
test_arabic.vim \
test_arabic.res \
test_autocmd.res \
test_bufwintabinfo.res \
test_changedtick.res \
test_charsearch.res \
test_cindent.res \
test_cmdline.res \
test_command_count.res \
test_cscope.res \

View File

@@ -0,0 +1,16 @@
" Test for cinoptions and cindent
"
" TODO: rewrite test3.in into this new style test
func Test_cino_hash()
" Test that curbuf->b_ind_hash_comment is correctly reset
new
setlocal cindent cinoptions=#1
setlocal cinoptions=
call setline(1, ["#include <iostream>"])
call cursor(1, 1)
norm! o#include
"call feedkeys("o#include\<esc>", 't')
call assert_equal(["#include <iostream>", "#include"], getline(1,2))
bwipe!
endfunc

View File

@@ -1,4 +1,5 @@
-- Test for 'cindent'.
-- For new tests, consider putting them in test_cindent.vim.
--
-- There are 50+ test command blocks (the stuff between STARTTEST and ENDTEST)
-- in the original test. These have been converted to "it" test cases here.