diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2016-03-28 11:01:23 +0200 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2016-03-28 12:25:06 +0200 |
| commit | 86b1887aac82b86e1f2ad0f255bd872796dd4803 (patch) | |
| tree | 5e5b4f285c0dcfd8e2cb0537ecebcbd299738acf /view.c | |
| parent | d970c893a253785f4fa8d99f306d6d891702fc6d (diff) | |
| download | vis-86b1887aac82b86e1f2ad0f255bd872796dd4803.tar.gz vis-86b1887aac82b86e1f2ad0f255bd872796dd4803.tar.xz | |
view: prevent creation of duplicated cursors
Fail if there is already a cursor located at the requested position.
Diffstat (limited to 'view.c')
| -rw-r--r-- | view.c | 10 |
1 files changed, 8 insertions, 2 deletions
@@ -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) { |
