Change enums to u32 for stored fields
[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
10 #define N_WRITES 16
11 #define STRIDE   250000
12
13 #define BUFFER_N 1100
14 unsigned  xxbuffer[BUFFER_N];
15
16
17 void set_buffer(int n)
18 {
19         int i;
20         for(i = 0; i < BUFFER_N; i++)
21                 xxbuffer[i] = i + n;
22 }
23
24 void write_big_sparse_file(int h)
25 {
26         int i;
27         loff_t offset = 0;
28         loff_t pos;
29         int n = sizeof(xxbuffer);
30         int wrote;
31
32         for(i = 0; i < N_WRITES; i++) {
33                 printf("writing at %lld\n", offset);
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                         perror("lseek64");
40                         exit(1);
41                 }
42                 wrote = write(h, xxbuffer, n);
43
44                 if(wrote != n) {
45                         printf("mismatched write wrote %d n %d\n", wrote, n);
46                         exit(1);
47                 }
48
49                 offset += (STRIDE * sizeof(xxbuffer));
50         }
51
52         ftruncate(h, offset);
53
54 }
55
56
57 int main(int argc, char *argv[])
58 {
59         int handle;
60
61         if(argc < 2) {
62                 printf("Gimme a file name!\n");
63                 exit(1);
64         }
65
66         handle = open(argv[1], O_CREAT | O_RDWR | O_TRUNC, S_IREAD | S_IWRITE);
67
68         if(handle < 0) {
69                 perror("opening file");
70                 exit(1);
71         }
72
73         write_big_sparse_file(handle);
74
75         printf("Job done\n");
76         return 0;
77 }