From 64b2e23ff1f2c2b8eacf6da5ac9a58054c8245cf Mon Sep 17 00:00:00 2001 From: landley Date: Mon, 30 Oct 2006 10:01:19 -0500 Subject: Add reread(), readall(), and xread() on the bus ride in to work... --- lib/functions.c | 32 +++++++++++++++++++++++++++++--- lib/lib.h | 3 +++ 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/lib/functions.c b/lib/functions.c index e01053ba..44f21b55 100644 --- a/lib/functions.c +++ b/lib/functions.c @@ -150,9 +150,35 @@ FILE *xfopen(char *path, char *mode) return f; } -// int xread(int fd, char *buf, int len) // Die if can't fill buffer -// int readall(int fd, char *buf, int len) // Keep reading until full or EOF -// int toy_read(int fd, char *buf, int len) // retry if interrupted +// Read from file handle, retrying if interrupted. +ssize_t reread(int fd, void *buf, size_t count) +{ + ssize_t len; + for (;;) { + len = read(fd, buf, count); + if (len >= 0 || errno != EINTR) return len; + } +} + +// Keep reading until full or EOF +ssize_t readall(int fd, void *buf, size_t count) +{ + size_t len = 0; + while (len