00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <stdio.h>
00022 #include <stdlib.h>
00023 #include <inttypes.h>
00024
00025 static uint32_t state;
00026 static uint32_t ran(void){
00027 return state= state*1664525+1013904223;
00028 }
00029
00030 int main(int argc, char** argv)
00031 {
00032 FILE *f;
00033 int count, maxburst, length;
00034
00035 if (argc < 5){
00036 printf("USAGE: trasher <filename> <count> <maxburst> <seed>\n");
00037 return 1;
00038 }
00039
00040 f= fopen(argv[1], "rb+");
00041 if (!f){
00042 perror(argv[1]);
00043 return 2;
00044 }
00045 count= atoi(argv[2]);
00046 maxburst= atoi(argv[3]);
00047 state= atoi(argv[4]);
00048
00049 fseek(f, 0, SEEK_END);
00050 length= ftell(f);
00051 fseek(f, 0, SEEK_SET);
00052
00053 while(count--){
00054 int burst= 1 + ran() * (uint64_t) (abs(maxburst)-1) / UINT32_MAX;
00055 int pos= ran() * (uint64_t) length / UINT32_MAX;
00056 fseek(f, pos, SEEK_SET);
00057
00058 if(maxburst<0) burst= -maxburst;
00059
00060 if(pos + burst > length)
00061 continue;
00062
00063 while(burst--){
00064 int val= ran() * 256ULL / UINT32_MAX;
00065
00066 if(maxburst<0) val=0;
00067
00068 fwrite(&val, 1, 1, f);
00069 }
00070 }
00071
00072 return 0;
00073 }