2016-07-01 07:55:18 +00:00
|
|
|
/* Trivia program to corrupt an RDB file in order to check the RDB check
|
|
|
|
* program behavior and effectiveness.
|
|
|
|
*
|
2024-08-14 16:20:36 +00:00
|
|
|
* Copyright (C) 2016 Redis ltd.
|
2016-07-01 07:55:18 +00:00
|
|
|
* This software is released in the 3-clause BSD license. */
|
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <fcntl.h>
|
|
|
|
#include <sys/stat.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <unistd.h>
|
|
|
|
#include <time.h>
|
|
|
|
|
|
|
|
int main(int argc, char **argv) {
|
|
|
|
struct stat stat;
|
|
|
|
int fd, cycles;
|
|
|
|
|
|
|
|
if (argc != 3) {
|
|
|
|
fprintf(stderr,"Usage: <filename> <cycles>\n");
|
|
|
|
exit(1);
|
|
|
|
}
|
|
|
|
|
|
|
|
srand(time(NULL));
|
2019-02-26 02:33:53 +00:00
|
|
|
char *filename = argv[1];
|
2016-07-01 07:55:18 +00:00
|
|
|
cycles = atoi(argv[2]);
|
2019-02-26 02:33:53 +00:00
|
|
|
fd = open(filename,O_RDWR);
|
2016-07-01 07:55:18 +00:00
|
|
|
if (fd == -1) {
|
|
|
|
perror("open");
|
|
|
|
exit(1);
|
|
|
|
}
|
|
|
|
fstat(fd,&stat);
|
|
|
|
|
|
|
|
while(cycles--) {
|
|
|
|
unsigned char buf[32];
|
|
|
|
unsigned long offset = rand()%stat.st_size;
|
|
|
|
int writelen = 1+rand()%31;
|
|
|
|
int j;
|
|
|
|
|
|
|
|
for (j = 0; j < writelen; j++) buf[j] = (char)rand();
|
|
|
|
lseek(fd,offset,SEEK_SET);
|
|
|
|
printf("Writing %d bytes at offset %lu\n", writelen, offset);
|
|
|
|
write(fd,buf,writelen);
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|