aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2014-07-22 16:13:05 +0200
committerMarc André Tanner <mat@brain-dump.org>2014-07-22 16:13:05 +0200
commitfb4bb7c17d5f5542382170341fbdc24289414d1b (patch)
tree5b552d403400fc0aacd03e3d2c531e15369054a9
parentf0c769757486154e661d4457bb9c62c6fe2cf523 (diff)
downloadvis-fb4bb7c17d5f5542382170341fbdc24289414d1b.tar.gz
vis-fb4bb7c17d5f5542382170341fbdc24289414d1b.tar.xz
Refactor editor_save
-rw-r--r--editor.c17
1 files changed, 7 insertions, 10 deletions
diff --git a/editor.c b/editor.c
index 38ee9d7..f6307e3 100644
--- a/editor.c
+++ b/editor.c
@@ -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;