diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2020-09-27 14:42:13 +0200 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2020-10-10 10:03:17 +0200 |
| commit | 38ac824360d28eb447558f916696c6032ef8cd0e (patch) | |
| tree | af8af6f250dc759d55495495edeb6e0fbd9d3d0d /text.c | |
| parent | 08aee6721db1b1eba6f9e2d58b4e4ffe37a9ecd1 (diff) | |
| download | vis-38ac824360d28eb447558f916696c6032ef8cd0e.tar.gz vis-38ac824360d28eb447558f916696c6032ef8cd0e.tar.xz | |
text: simplify reading of initial file content
Avoid unnecessary copy and system calls in block_read.
Diffstat (limited to 'text.c')
| -rw-r--r-- | text.c | 13 |
1 files changed, 7 insertions, 6 deletions
@@ -212,20 +212,21 @@ static Block *block_read(Text *txt, size_t size, int fd) { Block *blk = block_alloc(txt, size); if (!blk) return NULL; - while (size > 0) { - char data[4096]; - ssize_t len = read(fd, data, MIN(sizeof(data), size)); + char *data = blk->data; + size_t rem = size; + while (rem > 0) { + ssize_t len = read(fd, data, rem); if (len == -1) { - txt->blocks = blk->next; block_free(blk); return NULL; } else if (len == 0) { break; } else { - block_append(blk, data, len); - size -= len; + data += len; + rem -= len; } } + blk->len = size - rem; return blk; } |
