From 38ac824360d28eb447558f916696c6032ef8cd0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Sun, 27 Sep 2020 14:42:13 +0200 Subject: text: simplify reading of initial file content Avoid unnecessary copy and system calls in block_read. --- text.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'text.c') diff --git a/text.c b/text.c index 2e7c7ef..e66cfe7 100644 --- 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; } -- cgit v1.2.3