Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
#include <unistd.h>
2
#include <string.h>
3
#include <sys/uio.h>
4
 
5
int
6
readv(int fd, struct iovec *v, int ent)
7
{
8
	int x, i, n, len;
9
	char buf[10*1024];
10
 
11
	for(len = i = 0; i < ent; i++)
12
		len += v[i].iov_len;
13
	if(len > sizeof(buf))
14
		len = sizeof(buf);
15
 
16
	len = read(fd, buf, len);
17
	if(len <= 0)
18
		return len;
19
 
20
	for(n = i = 0; n < len && i < ent; i++){
21
		x = len - n;
22
		if(x > v[i].iov_len)
23
			x = v[i].iov_len;
24
		memmove(v[i].iov_base, buf + n, x);
25
		n += x;
26
	}
27
 
28
	return len;
29
}