From c0c9a9927f413e70f59158a10c460b1927985f44 Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Thu, 6 Oct 2011 00:39:05 +0200 Subject: libbio: add Breadn --- sys/src/libbio/breadn.c | 26 ++++++++++++++++++++++++++ sys/src/libbio/mkfile | 1 + 2 files changed, 27 insertions(+) create mode 100644 sys/src/libbio/breadn.c (limited to 'sys/src') diff --git a/sys/src/libbio/breadn.c b/sys/src/libbio/breadn.c new file mode 100644 index 000000000..fa335873f --- /dev/null +++ b/sys/src/libbio/breadn.c @@ -0,0 +1,26 @@ +#include +#include +#include + +long +Breadn(Biobufhdr *bp, void *data, long len) +{ + char *e, *p; + int n; + + p = data; + e = p + len; + if(e < p){ + Berror(bp, "invalid read length"); + return -1; + } + while(p < e){ + if((n = Bread(bp, p, e - p)) <= 0){ + if(n < 0 && p == data) + return -1; + break; + } + p += n; + } + return p - (char*)data; +} diff --git a/sys/src/libbio/mkfile b/sys/src/libbio/mkfile index 3b40fd25c..cae6e4850 100644 --- a/sys/src/libbio/mkfile +++ b/sys/src/libbio/mkfile @@ -17,6 +17,7 @@ OFILES=\ brdline.$O\ brdstr.$O\ bread.$O\ + breadn.$O\ bseek.$O\ bwrite.$O\ bvprint.$O\ -- cgit v1.2.3