| /* | 
 |  * Bulkstat test case from Roger Willcocks <willcor@gmail.com> | 
 |  */ | 
 | #include <sys/types.h> | 
 | #include <unistd.h> | 
 | #include <stdlib.h> | 
 | #include <stdio.h> | 
 | #include <fcntl.h> | 
 |  | 
 | char buffer[32768]; | 
 | int overwrote; | 
 |  | 
 | void die(char *func) | 
 | { | 
 | 	perror(func); | 
 | 	exit(1); | 
 | } | 
 |  | 
 | void nuke() | 
 | { | 
 | 	int i; | 
 | 	for (i = 2048; i < 32768-1; i++) | 
 | 		if (buffer[i] == 'I' && buffer[i+1] == 'N') { | 
 | 			buffer[i] = buffer[i+1] = 'X'; | 
 | 			overwrote = 1; | 
 | 		} | 
 | } | 
 |  | 
 | int main(int argc, char* argv[]) | 
 | { | 
 | 	int f; | 
 | 	loff_t offset; | 
 |  | 
 | 	if (argc != 3) { | 
 | 		printf("%s <device> <offset>\n", argv[0]); | 
 | 		exit(1); | 
 | 	} | 
 |  | 
 | 	f = open(argv[1], O_RDWR); | 
 | 	offset = atoll(argv[2]); | 
 |  | 
 | 	if (f < 0) die("open"); | 
 | 	if (lseek(f, offset, SEEK_SET) < 0) die("lseek"); | 
 | 	if (read(f, buffer, 32768) != 32768) die("read"); | 
 | 	printf("Starting overwrite\n"); | 
 | 	nuke(); | 
 | 	if (lseek(f, offset, SEEK_SET) < 0) die("lseek"); | 
 | 	if (write(f, buffer, 32768) != 32768) die("write"); | 
 | 	if (!overwrote) | 
 | 		printf("Did not overwrite any inodes\n"); | 
 | 	printf("Overwrite complete\n"); | 
 | 	close(f); | 
 | 	return 0; | 
 | } |