vis

a vi-like editor based on Plan 9's structural regular expressions

git clone https://9o.is/git/vis.git

commit 793aa04076ec70f25fe95a54a39201e2707d5b2d
parent 9b6080caa93225bea2ffdfdc296c7fc885c03d83
Author: Marc André Tanner <mat@brain-dump.org>
Date:   Sun, 27 Sep 2020 14:42:13 +0200

text: simplify reading of initial file content

Avoid unnecessary copy and system calls in block_read.

Diffstat:
Mtext.c | 13+++++++------
1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/text.c b/text.c @@ -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; }