xref: /plan9/sys/src/libc/9sys/writev.c (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
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