Main Page
Related Pages
Modules
Data Structures
Files
Examples
File List
Globals
tools
trasher.c
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2007 Michael Niedermayer
3
*
4
* This file is part of Libav.
5
*
6
* Libav is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU Lesser General Public
8
* License as published by the Free Software Foundation; either
9
* version 2.1 of the License, or (at your option) any later version.
10
*
11
* Libav is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
* Lesser General Public License for more details.
15
*
16
* You should have received a copy of the GNU Lesser General Public
17
* License along with Libav; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
*/
20
21
#include <stdio.h>
22
#include <stdlib.h>
23
#include <inttypes.h>
24
25
static
uint32_t
state
;
26
static
uint32_t
ran
(
void
){
27
return
state
=
state
*1664525+1013904223;
28
}
29
30
int
main
(
int
argc,
char
** argv)
31
{
32
FILE *
f
;
33
int
count, maxburst, length;
34
35
if
(argc < 5){
36
printf
(
"USAGE: trasher <filename> <count> <maxburst> <seed>\n"
);
37
return
1;
38
}
39
40
f= fopen(argv[1],
"rb+"
);
41
if
(!f){
42
perror
(argv[1]);
43
return
2;
44
}
45
count= atoi(argv[2]);
46
maxburst= atoi(argv[3]);
47
state
= atoi(argv[4]);
48
49
fseek(f, 0, SEEK_END);
50
length= ftell(f);
51
fseek(f, 0, SEEK_SET);
52
53
while
(count--){
54
int
burst= 1 +
ran
() * (uint64_t) (abs(maxburst)-1) /
UINT32_MAX
;
55
int
pos=
ran
() * (uint64_t) length /
UINT32_MAX
;
56
fseek(f, pos, SEEK_SET);
57
58
if
(maxburst<0) burst= -maxburst;
59
60
if
(pos + burst > length)
61
continue
;
62
63
while
(burst--){
64
int
val=
ran
() * 256ULL /
UINT32_MAX
;
65
66
if
(maxburst<0) val=0;
67
68
fwrite(&val, 1, 1, f);
69
}
70
}
71
72
return
0;
73
}