From 220534453eecc2c07ad710d72268aafd20b83138 Mon Sep 17 00:00:00 2001 From: joe Date: Fri, 8 May 2015 23:07:47 -0400 Subject: initial commit --- readclose.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 readclose.c (limited to 'readclose.c') diff --git a/readclose.c b/readclose.c new file mode 100644 index 0000000..9d83007 --- /dev/null +++ b/readclose.c @@ -0,0 +1,23 @@ +/* Public domain. */ + +#include +#include "error.h" +#include "readclose.h" + +int readclose_append(int fd,stralloc *sa,unsigned int bufsize) +{ + int r; + for (;;) { + if (!stralloc_readyplus(sa,bufsize)) { close(fd); return -1; } + r = read(fd,sa->s + sa->len,bufsize); + if (r == -1) if (errno == error_intr) continue; + if (r <= 0) { close(fd); return r; } + sa->len += r; + } +} + +int readclose(int fd,stralloc *sa,unsigned int bufsize) +{ + if (!stralloc_copys(sa,"")) { close(fd); return -1; } + return readclose_append(fd,sa,bufsize); +} -- cgit v1.2.3