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 <u.h>
2
#include <libc.h>
3
 
4
static
5
long
6
ioreadv(int fd, IOchunk *io, int nio, vlong offset)
7
{
8
	int i;
9
	long m, n, tot;
10
	char *buf, *p;
11
 
12
	tot = 0;
13
	for(i=0; i<nio; i++)
14
		tot += io[i].len;
15
	buf = malloc(tot);
16
	if(buf == nil)
17
		return -1;
18
 
19
	tot = pread(fd, buf, tot, offset);
20
 
21
	p = buf;
22
	n = tot;
23
	for(i=0; i<nio; i++){
24
		if(n <= 0)
25
			break;
26
		m = io->len;
27
		if(m > n)
28
			m = n;
29
		memmove(io->addr, p, m);
30
		n -= m;
31
		p += m;
32
		io++;
33
	}
34
 
35
	free(buf);
36
	return tot;
37
}
38
 
39
long
40
readv(int fd, IOchunk *io, int nio)
41
{
42
	return ioreadv(fd, io, nio, -1LL);
43
}
44
 
45
long
46
preadv(int fd, IOchunk *io, int nio, vlong off)
47
{
48
	return ioreadv(fd, io, nio, off);
49
}