diff options
author | ZyX <kp-pav@yandex.ru> | 2015-08-11 21:00:31 +0300 |
---|---|---|
committer | ZyX <kp-pav@yandex.ru> | 2015-10-08 22:00:39 +0300 |
commit | f9ae1caf7ee4ff2f6247b08dd85b1b8d52b43318 (patch) | |
tree | 328e423eb3613e95a30cd3145cacf4dd58b2553e /src | |
parent | a4b2698a1fcab1fcbf073147dad141ed7bc3b613 (diff) | |
download | rneovim-f9ae1caf7ee4ff2f6247b08dd85b1b8d52b43318.tar.gz rneovim-f9ae1caf7ee4ff2f6247b08dd85b1b8d52b43318.tar.bz2 rneovim-f9ae1caf7ee4ff2f6247b08dd85b1b8d52b43318.zip |
shada: Fix jump list merger code
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/shada.c | 43 |
1 files changed, 12 insertions, 31 deletions
diff --git a/src/nvim/shada.c b/src/nvim/shada.c index 3e1054f408..0c824d0dd3 100644 --- a/src/nvim/shada.c +++ b/src/nvim/shada.c @@ -1465,22 +1465,13 @@ static void shada_read(ShaDaReadDef *const sd_reader, const int flags) if (i != -1) { if (i < jl_len) { if (jl_len == JUMPLISTSIZE) { - free_xfmark(curwin->w_jumplist[0]); - memmove(&curwin->w_jumplist[0], &curwin->w_jumplist[1], - sizeof(curwin->w_jumplist[0]) * (size_t) i); - } else { - memmove(&curwin->w_jumplist[i + 1], &curwin->w_jumplist[i], - sizeof(curwin->w_jumplist[0]) - * (size_t) (jl_len - i)); - } - } else if (i == jl_len) { - if (jl_len == JUMPLISTSIZE) { - i = -1; - } else if (jl_len > 0) { - memmove(&curwin->w_jumplist[1], &curwin->w_jumplist[0], - sizeof(curwin->w_jumplist[0]) - * (size_t) jl_len); + free_xfmark(curwin->w_jumplist[curwin->w_jumplistlen - 1]); } + memmove(&curwin->w_jumplist[i + 1], &curwin->w_jumplist[i], + sizeof(curwin->w_jumplist[0]) + * (size_t) (jl_len - i)); + } else if (i == jl_len && jl_len == JUMPLISTSIZE) { + i = -1; } } if (i != -1) { @@ -2428,23 +2419,13 @@ static inline ShaDaWriteResult shada_read_when_writing( } if (i != -1) { if (i < jl_len) { - if (jl_len == JUMPLISTSIZE) { - if (wms->jumps[0].can_free_entry) { - shada_free_shada_entry(&wms->jumps[0].data); - } - memmove(&wms->jumps[0], &wms->jumps[1], - sizeof(wms->jumps[0]) * (size_t) i); - } else { - memmove(&wms->jumps[i + 1], &wms->jumps[i], - sizeof(wms->jumps[0]) * (size_t) (jl_len - i)); - } - } else if (i == jl_len) { - if (jl_len == JUMPLISTSIZE) { - i = -1; - } else if (jl_len > 0) { - memmove(&wms->jumps[1], &wms->jumps[0], - sizeof(wms->jumps[0]) * (size_t) jl_len); + if (jl_len == JUMPLISTSIZE && wms->jumps[0].can_free_entry) { + shada_free_shada_entry(&wms->jumps[wms->jumps_size - 1].data); } + memmove(&wms->jumps[i + 1], &wms->jumps[i], + sizeof(wms->jumps[0]) * (size_t) (jl_len - i)); + } else if (i == jl_len && jl_len == JUMPLISTSIZE) { + i = -1; } } if (i != -1) { |