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