aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorZyX <kp-pav@yandex.ru>2015-08-11 21:00:31 +0300
committerZyX <kp-pav@yandex.ru>2015-10-08 22:00:39 +0300
commitf9ae1caf7ee4ff2f6247b08dd85b1b8d52b43318 (patch)
tree328e423eb3613e95a30cd3145cacf4dd58b2553e /src
parenta4b2698a1fcab1fcbf073147dad141ed7bc3b613 (diff)
downloadrneovim-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.c43
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) {