aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/api/buffer.c6
-rw-r--r--src/nvim/eval/typval.c12
-rw-r--r--test/unit/eval/typval_spec.lua3
3 files changed, 10 insertions, 11 deletions
diff --git a/src/nvim/api/buffer.c b/src/nvim/api/buffer.c
index 037a6ee1da..26f9a6f592 100644
--- a/src/nvim/api/buffer.c
+++ b/src/nvim/api/buffer.c
@@ -296,7 +296,7 @@ void nvim_buf_set_lines(uint64_t channel_id,
tabpage_T *save_curtab = NULL;
size_t new_len = replacement.size;
size_t old_len = (size_t)(end - start);
- ssize_t extra = 0; // lines added to text, can be negative
+ ptrdiff_t extra = 0; // lines added to text, can be negative
char **lines = (new_len != 0) ? xcalloc(new_len, sizeof(char *)) : NULL;
for (size_t i = 0; i < new_len; i++) {
@@ -342,8 +342,8 @@ void nvim_buf_set_lines(uint64_t channel_id,
}
}
- if ((ssize_t)to_delete > 0) {
- extra -= (ssize_t)to_delete;
+ if (to_delete > 0) {
+ extra -= (ptrdiff_t)to_delete;
}
// For as long as possible, replace the existing old_len with the
diff --git a/src/nvim/eval/typval.c b/src/nvim/eval/typval.c
index da58cf5ca9..779bb18175 100644
--- a/src/nvim/eval/typval.c
+++ b/src/nvim/eval/typval.c
@@ -164,9 +164,8 @@ void tv_list_free_contents(list_T *const l)
}
l->lv_len = 0;
l->lv_idx_item = NULL;
- for (listwatch_T *lw = l->lv_watch; lw != NULL; lw = lw->lw_next) {
- lw->lw_item = NULL;
- }
+ l->lv_last = NULL;
+ assert(l->lv_watch == NULL);
}
/// Free a list itself, ignoring items it contains
@@ -230,13 +229,10 @@ void tv_list_remove_items(list_T *const l, listitem_T *const item,
listitem_T *const item2)
FUNC_ATTR_NONNULL_ALL
{
- // notify watchers
- for (listitem_T *ip = item; ip != NULL; ip = ip->li_next) {
+ // Notify watchers.
+ for (listitem_T *ip = item; ip != item2->li_next; ip = ip->li_next) {
l->lv_len--;
tv_list_watch_fix(l, ip);
- if (ip == item2) {
- break;
- }
}
if (item2->li_next == NULL) {
diff --git a/test/unit/eval/typval_spec.lua b/test/unit/eval/typval_spec.lua
index 3a4ef0cb92..258b5c4c1f 100644
--- a/test/unit/eval/typval_spec.lua
+++ b/test/unit/eval/typval_spec.lua
@@ -255,6 +255,9 @@ describe('typval.c', function()
eq({lis[3], lis[5], nil}, {lws[1].lw_item, lws[2].lw_item, lws[3].lw_item == nil and nil})
alloc_log:clear()
+ lib.tv_list_watch_remove(l, lws[2])
+ lib.tv_list_watch_remove(l, lws[3])
+ lib.tv_list_watch_remove(l, lws[1])
lib.tv_list_free(l)
alloc_log:check({
a.freed(lis[3]),