1 #include <stdio.h>
2 #include <string.h>
3 #include <syscall.h>
4 #include <unistd.h>
5 
6 #include <sys/syscall.h>
7 
8 #define BLKSIZE (16384)
9 #define BLKS (65)
10 
11 #define TMPFILE ("/LICENSE")
12 
13 char inbuf[BLKSIZE];
14 char outbuf[BLKSIZE];
15 
16 char
fillchar(int i)17 fillchar(int i)
18 {
19 	return ('a' + (i % ('z' - 'a')));
20 }
21 
22 void
write(int fd,int i)23 write(int fd, int i)
24 {
25 	size_t off = i * BLKSIZE;
26 	int ret;
27 
28 	memset(inbuf, fillchar(i), sizeof(inbuf));
29 
30 	ret = OSWrite(fd, inbuf, off, sizeof(inbuf));
31 	if (ret < 0) {
32 		printf("OSWrite: error at offset %d\n", off);
33 		OSExit(0);
34 	}
35 
36 	if (ret == 0) {
37 		printf("OSWrite: no data written at offset %d\n", off);
38 		OSExit(0);
39 	}
40 }
41 
42 void
writetest()43 writetest()
44 {
45 	int fd;
46 	int i;
47 
48 	fd = OSOpen(TMPFILE, 0);
49 	if (fd < 0) {
50 		printf("OSOpen: error for file %s\n", TMPFILE);
51 		OSExit(0);
52 	}
53 
54 	for (i = 0; i < BLKS; i++)
55 		write(fd, i);
56 }
57 
58 void
read(int fd,int i)59 read(int fd, int i)
60 {
61 	size_t off = i * BLKSIZE;
62 	int ret;
63 
64 	ret = OSRead(fd, outbuf, off, sizeof(outbuf));
65 	if (ret < 0) {
66 		printf("OSRead: error at offset %d\n", off);
67 		OSExit(0);
68 	}
69 
70 	if (ret == 0) {
71 		printf("OSWrite: no data read at offset %d\n", off);
72 		OSExit(0);
73 	}
74 
75 	memset(inbuf, fillchar(i), sizeof(inbuf));
76 
77 	if (memcmp(inbuf, outbuf, sizeof(inbuf)) != 0) {
78 		printf("read the wrong data back at offset %d\n", off);
79 		printf("Expected: %c %c %c %c\n", inbuf[0], inbuf[1], inbuf[2], inbuf[3]);
80 		printf("Got: %c %c %c %c\n", outbuf[0], outbuf[1], outbuf[2], outbuf[3]);
81 		OSExit(0);
82 	}
83 }
84 
85 void
readtest()86 readtest()
87 {
88 	int fd;
89 	int i;
90 
91 	fd = OSOpen(TMPFILE, 0);
92 	if (fd < 0) {
93 		printf("OSOpen: error for file %s\n", TMPFILE);
94 		OSExit(0);
95 	}
96 
97 	for (i = 0; i < BLKS; i++)
98 		read(fd, i);
99 }
100 
101 
102 int
main(int argc,char ** argv)103 main(int argc, char **argv)
104 {
105 	writetest();
106 	readtest();
107 
108 	printf("Success!\n");
109 
110 	return (0);
111 }
112