diff options
author | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
---|---|---|
committer | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
commit | e5888a1ffdae813d7575f5fb02275c6bb07e5199 (patch) | |
tree | d8d51eac403f07814b9e936eed0c9a79195e2450 /sys/src/ape/lib/bsd/readv.c |
Import sources from 2011-03-30 iso image
Diffstat (limited to 'sys/src/ape/lib/bsd/readv.c')
-rwxr-xr-x | sys/src/ape/lib/bsd/readv.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/sys/src/ape/lib/bsd/readv.c b/sys/src/ape/lib/bsd/readv.c new file mode 100755 index 000000000..91a7157d0 --- /dev/null +++ b/sys/src/ape/lib/bsd/readv.c @@ -0,0 +1,30 @@ +#include <unistd.h> +#include <string.h> +#include <sys/uio.h> + +int +readv(int fd, struct iovec *v, int ent) +{ + int x, i, n, len; + char *t; + char buf[10*1024]; + + for(len = i = 0; i < ent; i++) + len += v[i].iov_len; + if(len > sizeof(buf)) + len = sizeof(buf); + + len = read(fd, buf, len); + if(len <= 0) + return len; + + for(n = i = 0; n < len && i < ent; i++){ + x = len - n; + if(x > v[i].iov_len) + x = v[i].iov_len; + memmove(v[i].iov_base, buf + n, x); + n += x; + } + + return len; +} |