xref: /openbsd-src/regress/sys/kern/preadv/preadv.c (revision d13be5d47e4149db2549a9828e244d59dbc43f15)
1 /*	$OpenBSD: preadv.c,v 1.2 2003/07/31 21:48:09 deraadt Exp $	*/
2 /*
3  *	Written by Artur Grabowski <art@openbsd.org> 2002 Public Domain.
4  */
5 #include <sys/types.h>
6 #include <sys/uio.h>
7 #include <stdio.h>
8 #include <stdlib.h>
9 #include <unistd.h>
10 #include <err.h>
11 #include <fcntl.h>
12 
13 int
14 main(int argc, char *argv[])
15 {
16 	char temp[] = "/tmp/dup2XXXXXXXXX";
17 	const char magic[10] = "0123456789";
18 	char c, c1, c2;
19 	int fd;
20 	struct iovec iv[2];
21 
22 	if ((fd = mkstemp(temp)) < 0)
23 		err(1, "mkstemp");
24 	remove(temp);
25 
26 	if (write(fd, magic, sizeof(magic)) != sizeof(magic))
27 		err(1, "write");
28 
29 	if (lseek(fd, 0, SEEK_SET) != 0)
30 		err(1, "lseek");
31 
32 	if (read(fd, &c, 1) != 1)
33 		err(1, "read1");
34 
35 	if (c != magic[0])
36 		errx(1, "read1 %c != %c", c, magic[0]);
37 
38 	iv[0].iov_base = &c1;
39 	iv[0].iov_len = 1;
40 	iv[1].iov_base = &c2;
41 	iv[1].iov_len = 1;
42 
43 	if (preadv(fd, iv, 2, 7) != 2)
44 		err(1, "pread");
45 
46 	if (c1 != magic[7])
47 		errx(1, "pread %c != %c", c1, magic[7]);
48 
49 	if (c2 != magic[8])
50 		errx(1, "pread %c != %c", c2, magic[7]);
51 
52 	if (read(fd, &c, 1) != 1)
53 		err(1, "read2");
54 
55 	if (c != magic[1])
56 		errx(1, "read2 %c != %c", c, magic[1]);
57 
58 	return 0;
59 }
60