diff options
author | zeertzjq <zeertzjq@outlook.com> | 2024-07-31 06:21:55 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-07-31 06:21:55 +0800 |
commit | 63cd2adf3d27436dbaf6a8eda72608d3009ccd3c (patch) | |
tree | b5c3d8d7a6066d662703cc0e9df0dfc1063fe4e9 | |
parent | 617810d72d78ce7e1f5e6b6e71ccb6bb5960904d (diff) | |
download | rneovim-63cd2adf3d27436dbaf6a8eda72608d3009ccd3c.tar.gz rneovim-63cd2adf3d27436dbaf6a8eda72608d3009ccd3c.tar.bz2 rneovim-63cd2adf3d27436dbaf6a8eda72608d3009ccd3c.zip |
vim-patch:9.1.0644: Unnecessary STRLEN() when applying mapping (#29921)
Problem: Unnecessary STRLEN() when applying mapping.
(after v9.1.0642)
Solution: Use m_keylen and vim_strnsave().
(zeertzjq)
closes: vim/vim#15394
https://github.com/vim/vim/commit/74011dc1fa7bca6c901937173a42e0edce68e080
-rw-r--r-- | src/nvim/getchar.c | 11 | ||||
-rw-r--r-- | test/old/testdir/test_mapping.vim | 4 |
2 files changed, 9 insertions, 6 deletions
diff --git a/src/nvim/getchar.c b/src/nvim/getchar.c index 5c8b3ebe46..7b388e6061 100644 --- a/src/nvim/getchar.c +++ b/src/nvim/getchar.c @@ -2335,6 +2335,7 @@ static int handle_mapping(int *keylenp, const bool *timedout, int *mapdepth) const bool save_m_silent = mp->m_silent; char *save_m_keys = NULL; // only saved when needed char *save_alt_m_keys = NULL; // only saved when needed + const int save_alt_m_keylen = mp->m_alt != NULL ? mp->m_alt->m_keylen : 0; // Handle ":map <expr>": evaluate the {rhs} as an // expression. Also save and restore the command line @@ -2347,8 +2348,10 @@ static int handle_mapping(int *keylenp, const bool *timedout, int *mapdepth) vgetc_busy = 0; may_garbage_collect = false; - save_m_keys = xstrdup(mp->m_keys); - save_alt_m_keys = mp->m_alt != NULL ? xstrdup(mp->m_alt->m_keys) : NULL; + save_m_keys = xmemdupz(mp->m_keys, (size_t)mp->m_keylen); + save_alt_m_keys = mp->m_alt != NULL + ? xmemdupz(mp->m_alt->m_keys, (size_t)save_alt_m_keylen) + : NULL; map_str = eval_map_expr(mp, NUL); if ((map_str == NULL || *map_str == NUL)) { @@ -2401,11 +2404,11 @@ static int handle_mapping(int *keylenp, const bool *timedout, int *mapdepth) ? strncmp(map_str, save_m_keys, (size_t)keylen) == 0 || (save_alt_m_keys != NULL && strncmp(map_str, save_alt_m_keys, - strlen(save_alt_m_keys)) == 0) + (size_t)save_alt_m_keylen) == 0) : strncmp(map_str, mp->m_keys, (size_t)keylen) == 0 || (mp->m_alt != NULL && strncmp(map_str, mp->m_alt->m_keys, - strlen(mp->m_alt->m_keys)) == 0)) { + (size_t)mp->m_alt->m_keylen) == 0)) { noremap = REMAP_SKIP; } else { noremap = REMAP_YES; diff --git a/test/old/testdir/test_mapping.vim b/test/old/testdir/test_mapping.vim index 4abe73ab3d..e4e446c55c 100644 --- a/test/old/testdir/test_mapping.vim +++ b/test/old/testdir/test_mapping.vim @@ -1694,11 +1694,11 @@ func Test_map_rhs_starts_with_lhs() endif let @a = 'foo' - call feedkeys("S\<C-R>a", 'tx') + call assert_nobeep('call feedkeys("S\<C-R>a", "tx")') call assert_equal('foo', getline('.')) let @a = 'bar' - call feedkeys("S\<*C-R>a", 'tx') + call assert_nobeep('call feedkeys("S\<*C-R>a", "tx")') call assert_equal('bar', getline('.')) endfor endfor |