xref: /openbsd-src/regress/sys/kern/pwrite/pwrite.c (revision db3296cf5c1dd9058ceecc3a29fe4aaa0bd26000)
1 /*	$OpenBSD: pwrite.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 <stdio.h>
6 #include <stdlib.h>
7 #include <unistd.h>
8 #include <err.h>
9 #include <fcntl.h>
10 
11 int
12 main(int argc, char *argv[])
13 {
14 	char temp[] = "/tmp/pwriteXXXXXXXXX";
15 	const char magic[10] = "0123456789";
16 	const char zeroes[10] = "0000000000";
17 	char buf[10];
18 	char c;
19 	int fd;
20 
21 	if ((fd = mkstemp(temp)) < 0)
22 		err(1, "mkstemp");
23 	remove(temp);
24 
25 	if (write(fd, zeroes, sizeof(zeroes)) != sizeof(zeroes))
26 		err(1, "write");
27 
28 	if (lseek(fd, 5, SEEK_SET) != 5)
29 		err(1, "lseek");
30 
31 	if (pwrite(fd, &magic[1], 4, 4) != 4)
32 		err(1, "pwrite");
33 
34 	if (read(fd, &c, 1) != 1)
35 		err(1, "read");
36 
37 	if (c != '2')
38 		errx(1, "read %c != %c", c, '2');
39 
40 	c = '5';
41 	if (write(fd, &c, 1) != 1)
42 		err(1, "write");
43 
44 	if (pread(fd, buf, 10, 0) != 10)
45 		err(1, "pread");
46 
47 	if (memcmp(buf, "0000125400", 10) != 0)
48 		errx(1, "data mismatch: %s != %s", buf, "0000125400");
49 
50 	return 0;
51 }
52