diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2014-07-22 16:13:05 +0200 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2014-07-22 16:13:05 +0200 |
| commit | fb4bb7c17d5f5542382170341fbdc24289414d1b (patch) | |
| tree | 5b552d403400fc0aacd03e3d2c531e15369054a9 | |
| parent | f0c769757486154e661d4457bb9c62c6fe2cf523 (diff) | |
| download | vis-fb4bb7c17d5f5542382170341fbdc24289414d1b.tar.gz vis-fb4bb7c17d5f5542382170341fbdc24289414d1b.tar.xz | |
Refactor editor_save
| -rw-r--r-- | editor.c | 17 |
1 files changed, 7 insertions, 10 deletions
@@ -376,7 +376,6 @@ static void piece_init(Piece *p, Piece *prev, Piece *next, char *content, size_t * if pos is zero, then the begin sentinel piece is returned. */ static Location piece_get(Editor *ed, size_t pos) { Location loc = {}; - // TODO: handle position at end of file: pos+1 size_t cur = 0; for (Piece *p = &ed->begin; p->next; p = p->next) { if (cur <= pos && pos <= cur + p->len) { @@ -480,7 +479,6 @@ bool editor_insert(Editor *ed, size_t pos, char *text) { Piece *after = piece_alloc(ed); if (!before || !new || !after) return false; - // TODO: check index calculation piece_init(before, p->prev, new, p->content, off); piece_init(new, before, after, text, len); piece_init(after, new, p->next, p->content + off, p->len - off); @@ -520,13 +518,6 @@ bool editor_redo(Editor *ed) { return true; } -bool copy_content(void *data, size_t pos, const char *content, size_t len) { - char **p = (char **)data; - memcpy(*p, content, len); - *p += len; - return true; -} - /* save current content to given filename. the data is first saved to * a file called `.filename.tmp` and then atomically moved to its final * (possibly alredy existing) destination using rename(2). @@ -548,7 +539,12 @@ int editor_save(Editor *ed, const char *filename) { goto err; void *cur = buf; - editor_iterate(ed, &cur, 0, copy_content); + for (Iterator it = editor_iterator_get(ed, 0); + editor_iterator_valid(&it); + editor_iterator_next(&it)) { + memcpy(cur, it.text, it.len); + cur += it.len; + } if (munmap(buf, ed->size) == -1) goto err; @@ -559,6 +555,7 @@ int editor_save(Editor *ed, const char *filename) { return -1; ed->saved_action = ed->undo; editor_snapshot(ed); + return 0; err: close(fd); return -1; |
