From 19ad368f68164b99a2cfedb11747d7ca2d040ee0 Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Wed, 10 May 2017 21:29:46 +0200 Subject: Cleaner code MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- src/util.c | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) (limited to 'src/util.c') diff --git a/src/util.c b/src/util.c index f6150f2..c1943d7 100644 --- a/src/util.c +++ b/src/util.c @@ -166,6 +166,34 @@ writezeroes(int fd, void *buf, size_t bufsize, size_t n) return 0; } +int +getfile(int fd, void *buffer, size_t *restrict ptr, size_t *restrict size) +{ + char *restrict *restrict buf = buffer; + void *new; + size_t r; + + for (;;) { + if (*ptr == *size) { + if (!(new = realloc(*buf, *size << 1))) { + errno = ENOMEM; + return -1; + } + *buf = new; + *size <<= 1; + } + r = read(fd, *buf + *ptr, *size - *ptr); + if (r <= 0) { + if (r) + return -1; + break; + } + *ptr += (size_t)r; + } + + return 0; +} + static inline pid_t enfork(int status) @@ -193,7 +221,7 @@ enfork_jobs(int status, size_t *start, size_t *end, size_t jobs, pid_t **pids) return 1; } *end = n / jobs + s; - *pids = enmalloc(status, jobs * sizeof(**pids)); + *pids = enmalloc2(status, jobs, sizeof(**pids)); for (j = 1; j < jobs; j++) { pid = enfork(status); if (!pid) { -- cgit v1.2.3-70-g09d2