aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--view.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/view.c b/view.c
index ebf2732..dad1dcd 100644
--- 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) {