1 /* Corrupt a file in controllable ways, to test vdmfec. */
2 
3 #include "defs.h"
4 #include "util.h"
5 
6 char Usage[] = "usage: %s -o<offset> -n<nbytes> file\n";
7 #define USAGE() msg(Usage, Progname)
8 
9 long Offset;
10 int Nbytes;
11 
12 void doit(char *);
13 
main(int argc,char ** argv)14 int main(int argc, char **argv)
15 {
16 	int c;
17 
18 	Progname = *argv;
19 
20 	/* Parse option arguments. */
21 
22 	while ((c = getopt(argc, argv, "o:n:")) != EOF) {
23 		switch (c) {
24 
25 		case 'o':
26 			Offset = atoik(optarg);
27 			break;
28 
29 		case 'n':
30 			Nbytes = atoik(optarg);
31 			break;
32 
33 		default:
34 			USAGE();
35 			exit(1);
36 		}
37 	}
38 	argc -= optind;
39 	argv += optind;
40 
41 	if (argc != 1) {
42 		USAGE();
43 		exit(1);
44 	}
45 
46 	doit(argv[0]);
47 
48 	return 0;
49 }
50 
doit(char * name)51 void doit(char *name)
52 {
53 	u_char *block;
54 	FILE *file, *random;
55 
56 	block = new_array(u_char, Nbytes);
57 	file = fileopen(name, "r+");
58 	fseek(file, Offset, SEEK_SET);
59 	random = fileopen("/dev/urandom", "r");
60 	fread(block, 1, Nbytes, random);
61 	fwrite(block, 1, Nbytes, file);
62 	fclose(file);
63 	fclose(random);
64 }
65