vis
a vi-like editor based on Plan 9's structural regular expressions
git clone https://9o.is/git/vis.git
commit c3dd0d297a4253a0f32e43247b9450f2afc5de2f parent 28f73af5509ddd800fe2f37006a8c5e3e55a10da Author: Marc André Tanner <mat@brain-dump.org> Date: Mon, 28 Mar 2016 11:01:23 +0200 view: prevent creation of duplicated cursors Fail if there is already a cursor located at the requested position. Diffstat:
| M | view.c | | | 10 | ++++++++-- |
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/view.c b/view.c @@ -1068,14 +1068,14 @@ Cursor *view_cursors_new(View *view, size_t pos) { Cursor *prev = NULL, *next = NULL; size_t cur = view_cursors_pos(view->cursor); - if (pos >= cur) { + if (pos > cur) { prev = view->cursor; for (next = prev->next; next; prev = next, next = next->next) { cur = view_cursors_pos(next); if (pos <= cur) break; } - } else { // pos < cur + } else if (pos < cur) { next = view->cursor; for (prev = next->prev; prev; next = prev, prev = prev->prev) { cur = view_cursors_pos(prev); @@ -1084,6 +1084,9 @@ Cursor *view_cursors_new(View *view, size_t pos) { } } + if (pos == cur) + goto err; + c->prev = prev; c->next = next; if (prev) @@ -1095,6 +1098,9 @@ Cursor *view_cursors_new(View *view, size_t pos) { view->cursor = c; view_cursors_to(c, pos); return c; +err: + free(c); + return NULL; } int view_cursors_count(View *view) {