1*9a747e4fSDavid du Colombier #include <u.h>
2*9a747e4fSDavid du Colombier #include <libc.h>
3*9a747e4fSDavid du Colombier
4*9a747e4fSDavid du Colombier static
5*9a747e4fSDavid du Colombier long
iowritev(int fd,IOchunk * io,int nio,vlong offset)6*9a747e4fSDavid du Colombier iowritev(int fd, IOchunk *io, int nio, vlong offset)
7*9a747e4fSDavid du Colombier {
8*9a747e4fSDavid du Colombier int i;
9*9a747e4fSDavid du Colombier long tot;
10*9a747e4fSDavid du Colombier char *buf, *p;
11*9a747e4fSDavid du Colombier
12*9a747e4fSDavid du Colombier tot = 0;
13*9a747e4fSDavid du Colombier for(i=0; i<nio; i++)
14*9a747e4fSDavid du Colombier tot += io[i].len;
15*9a747e4fSDavid du Colombier buf = malloc(tot);
16*9a747e4fSDavid du Colombier if(buf == nil)
17*9a747e4fSDavid du Colombier return -1;
18*9a747e4fSDavid du Colombier
19*9a747e4fSDavid du Colombier p = buf;
20*9a747e4fSDavid du Colombier for(i=0; i<nio; i++){
21*9a747e4fSDavid du Colombier memmove(p, io->addr, io->len);
22*9a747e4fSDavid du Colombier p += io->len;
23*9a747e4fSDavid du Colombier io++;
24*9a747e4fSDavid du Colombier }
25*9a747e4fSDavid du Colombier
26*9a747e4fSDavid du Colombier tot = pwrite(fd, buf, tot, offset);
27*9a747e4fSDavid du Colombier
28*9a747e4fSDavid du Colombier free(buf);
29*9a747e4fSDavid du Colombier return tot;
30*9a747e4fSDavid du Colombier }
31*9a747e4fSDavid du Colombier
32*9a747e4fSDavid du Colombier long
writev(int fd,IOchunk * io,int nio)33*9a747e4fSDavid du Colombier writev(int fd, IOchunk *io, int nio)
34*9a747e4fSDavid du Colombier {
35*9a747e4fSDavid du Colombier return iowritev(fd, io, nio, -1LL);
36*9a747e4fSDavid du Colombier }
37*9a747e4fSDavid du Colombier
38*9a747e4fSDavid du Colombier long
pwritev(int fd,IOchunk * io,int nio,vlong off)39*9a747e4fSDavid du Colombier pwritev(int fd, IOchunk *io, int nio, vlong off)
40*9a747e4fSDavid du Colombier {
41*9a747e4fSDavid du Colombier return iowritev(fd, io, nio, off);
42*9a747e4fSDavid du Colombier }
43