0d701285d4356bd794877927437f6cc1371a6b50
[yaffs2.git] / linux-tests / writebigsparse.c
1 #define _LARGEFILE64_SOURCE
2 #include<stdio.h>
3 #include <sys/types.h>
4 #include <sys/stat.h>
5 #include <fcntl.h>
6 #include <unistd.h>
7 #include <stdlib.h>
8
9 int handle;
10
11 #define N_WRITES 8000
12 #define STRIDE   1000
13
14 #define BUFFER_N 2000
15 unsigned  buffer[BUFFER_N];
16
17
18 void set_buffer(int n)
19 {
20         int i;
21         for(i = 0; i < BUFFER_N; i++)
22                 buffer[i] = i + n;
23 }
24
25 void write_big_sparse_file(int h)
26 {
27         int i;
28         off64_t offset = 0;
29         off64_t pos;
30         int n = sizeof(buffer);
31         int wrote;
32         
33         for(i = 0; i < 4000; i++) {
34                 set_buffer(i);
35                 pos = lseek64(h, offset, SEEK_SET);
36                 if(pos != offset) {
37                         printf("mismatched seek pos %lld offset %lld\n",
38                                 pos, offset);
39                         exit(1);
40                 }
41                 wrote = write(h, buffer, n);
42                 
43                 if(wrote != n) {
44                         printf("mismatched write wrote %d n %d\n", wrote, n);
45                         exit(1);
46                 }
47                 
48                 offset += (STRIDE * sizeof(buffer));
49         }
50 }
51
52
53
54
55 void verify_big_sparse_file(int h)
56 {
57 }
58
59 int main(int argc, char *argv[])
60 {
61
62         if(argc < 2) {
63                 printf("Gimme a file name!\n");
64                 exit(1);
65         }
66         
67         handle = open(argv[1], O_CREAT | O_RDWR | O_TRUNC, S_IREAD | S_IWRITE);
68         
69         if(handle < 0) {
70                 perror("opening file");
71                 exit(1);
72         }
73         
74         write_big_sparse_file(handle);
75         system("sudo echo 3 > /proc/sys/vm/drop_caches");
76         verify_big_sparse_file(handle);
77         
78         printf("Job done\n");
79         return 0;
80 }