aboutsummaryrefslogtreecommitdiffstats
path: root/src/util.c
diff options
context:
space:
mode:
authorMattias Andrée <maandree@kth.se>2017-05-10 21:29:46 +0200
committerMattias Andrée <maandree@kth.se>2017-05-10 21:29:46 +0200
commit19ad368f68164b99a2cfedb11747d7ca2d040ee0 (patch)
tree5afb9c2f3c3c91d8bef7264a84180d60aedc9a7e /src/util.c
parentCleaner code (diff)
downloadblind-19ad368f68164b99a2cfedb11747d7ca2d040ee0.tar.gz
blind-19ad368f68164b99a2cfedb11747d7ca2d040ee0.tar.bz2
blind-19ad368f68164b99a2cfedb11747d7ca2d040ee0.tar.xz
Cleaner code
Signed-off-by: Mattias Andrée <maandree@kth.se>
Diffstat (limited to '')
-rw-r--r--src/util.c30
1 files changed, 29 insertions, 1 deletions
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) {