1f08c3bdfSopenharmony_ci/* random-del-create.c (GPL)*/
2f08c3bdfSopenharmony_ci/* Hironobu SUZUKI <hironobu@h2np.net> */
3f08c3bdfSopenharmony_ci
4f08c3bdfSopenharmony_ci#include <stdio.h>
5f08c3bdfSopenharmony_ci#include <sys/stat.h>
6f08c3bdfSopenharmony_ci#include <sys/types.h>
7f08c3bdfSopenharmony_ci#include <fcntl.h>
8f08c3bdfSopenharmony_ci#include <unistd.h>
9f08c3bdfSopenharmony_ci#include <time.h>
10f08c3bdfSopenharmony_ci#include <stdlib.h>
11f08c3bdfSopenharmony_ci#define FAIL 0
12f08c3bdfSopenharmony_ci#define SUCCESS 1
13f08c3bdfSopenharmony_ci
14f08c3bdfSopenharmony_ciint openlog[2] = { 0, 0 };
15f08c3bdfSopenharmony_ci
16f08c3bdfSopenharmony_ci#define MAXNUM 0x100000
17f08c3bdfSopenharmony_ci
18f08c3bdfSopenharmony_ci#define  MAXERROR 1024
19f08c3bdfSopenharmony_ci
20f08c3bdfSopenharmony_ciextern int box_muler(int, int);
21f08c3bdfSopenharmony_ciextern void create_or_delete(char *);
22f08c3bdfSopenharmony_ci
23f08c3bdfSopenharmony_ciint delete_file(char *filename);
24f08c3bdfSopenharmony_ciint create_file(char *filename);
25f08c3bdfSopenharmony_ci
26f08c3bdfSopenharmony_ciint cfilecount = 0;
27f08c3bdfSopenharmony_ciint dfilecount = 0;
28f08c3bdfSopenharmony_ciint errorcount = 0;
29f08c3bdfSopenharmony_ci
30f08c3bdfSopenharmony_ciint main(int ac, char **av)
31f08c3bdfSopenharmony_ci{
32f08c3bdfSopenharmony_ci	int r;
33f08c3bdfSopenharmony_ci	char fname[1024];
34f08c3bdfSopenharmony_ci	time_t t;
35f08c3bdfSopenharmony_ci	int i;
36f08c3bdfSopenharmony_ci	int m;
37f08c3bdfSopenharmony_ci
38f08c3bdfSopenharmony_ci	if (ac != 2) {
39f08c3bdfSopenharmony_ci		printf("%s hex-style-filename \n", av[0]);
40f08c3bdfSopenharmony_ci		printf("ex) %s 00022300\n", av[0]);
41f08c3bdfSopenharmony_ci		exit(1);
42f08c3bdfSopenharmony_ci	}
43f08c3bdfSopenharmony_ci	sscanf(av[1], "%x", &m);
44f08c3bdfSopenharmony_ci	if (m < 1 || m > MAXNUM) {
45f08c3bdfSopenharmony_ci		printf("out of size %d\n", m);
46f08c3bdfSopenharmony_ci		exit(1);
47f08c3bdfSopenharmony_ci	}
48f08c3bdfSopenharmony_ci
49f08c3bdfSopenharmony_ci	time(&t);
50f08c3bdfSopenharmony_ci	srandom((unsigned int)getpid() ^
51f08c3bdfSopenharmony_ci		(((unsigned int)t << 16) | (unsigned int)t >> 16));
52f08c3bdfSopenharmony_ci
53f08c3bdfSopenharmony_ci	/* 00/00/00/00 */
54f08c3bdfSopenharmony_ci	for (i = 0; i < m; i++) {
55f08c3bdfSopenharmony_ci		r = random() % m;
56f08c3bdfSopenharmony_ci		sprintf(fname, "00/%2.2x/%2.2x/00%2.2x%2.2x%2.2x",
57f08c3bdfSopenharmony_ci			((r >> 16) & 0xFF),
58f08c3bdfSopenharmony_ci			((r >> 8) & 0xFF),
59f08c3bdfSopenharmony_ci			((r >> 16) & 0xFF), ((r >> 8) & 0xFF), (r & 0xFF));
60f08c3bdfSopenharmony_ci		create_or_delete(fname);
61f08c3bdfSopenharmony_ci	}
62f08c3bdfSopenharmony_ci	fprintf(stderr, "Total create files: %d\n", cfilecount);
63f08c3bdfSopenharmony_ci	fprintf(stderr, "Total delete files: %d\n", dfilecount);
64f08c3bdfSopenharmony_ci	fprintf(stderr, "Total error       : %d\n", errorcount);
65f08c3bdfSopenharmony_ci	exit(0);
66f08c3bdfSopenharmony_ci}
67f08c3bdfSopenharmony_ci
68f08c3bdfSopenharmony_ci#define MAXFSIZE (192*1024)
69f08c3bdfSopenharmony_ci#define AVEFSIZE (MAXFSIZE/2)
70f08c3bdfSopenharmony_ci#define POOLDISKSPACE (AVEFSIZE*128)
71f08c3bdfSopenharmony_ci
72f08c3bdfSopenharmony_cistatic int disk_space_pool = 0;
73f08c3bdfSopenharmony_civoid create_or_delete(char *fname)
74f08c3bdfSopenharmony_ci{
75f08c3bdfSopenharmony_ci	int r;
76f08c3bdfSopenharmony_ci
77f08c3bdfSopenharmony_ci	r = (random() & 1);
78f08c3bdfSopenharmony_ci	if (r && disk_space_pool > POOLDISKSPACE) {
79f08c3bdfSopenharmony_ci		/* create */
80f08c3bdfSopenharmony_ci		create_file(fname);
81f08c3bdfSopenharmony_ci	} else {
82f08c3bdfSopenharmony_ci		delete_file(fname);
83f08c3bdfSopenharmony_ci	}
84f08c3bdfSopenharmony_ci	if ((errorcount > dfilecount || errorcount > cfilecount)
85f08c3bdfSopenharmony_ci	    && (errorcount > MAXERROR)) {
86f08c3bdfSopenharmony_ci		fprintf(stderr, "too much error -- stop\n");
87f08c3bdfSopenharmony_ci		fprintf(stderr, "Total create files: %d\n", cfilecount);
88f08c3bdfSopenharmony_ci		fprintf(stderr, "Total delete files: %d\n", dfilecount);
89f08c3bdfSopenharmony_ci		fprintf(stderr, "Total error       : %d\n", errorcount);
90f08c3bdfSopenharmony_ci		exit(1);
91f08c3bdfSopenharmony_ci	}
92f08c3bdfSopenharmony_ci}
93f08c3bdfSopenharmony_ci
94f08c3bdfSopenharmony_ciint create_file(char *filename)
95f08c3bdfSopenharmony_ci{
96f08c3bdfSopenharmony_ci	int fd;
97f08c3bdfSopenharmony_ci	int randomsize;
98f08c3bdfSopenharmony_ci	char wbuf[MAXFSIZE];
99f08c3bdfSopenharmony_ci	if ((fd = creat(filename, S_IRWXU)) < 0) {
100f08c3bdfSopenharmony_ci		errorcount++;
101f08c3bdfSopenharmony_ci		return (-1);
102f08c3bdfSopenharmony_ci	}
103f08c3bdfSopenharmony_ci	if ((randomsize = box_muler(0, MAXFSIZE)) < 0) {
104f08c3bdfSopenharmony_ci		randomsize = MAXFSIZE;
105f08c3bdfSopenharmony_ci	}
106f08c3bdfSopenharmony_ci	if (write(fd, wbuf, randomsize) < 0) {
107f08c3bdfSopenharmony_ci		errorcount++;
108f08c3bdfSopenharmony_ci		close(fd);
109f08c3bdfSopenharmony_ci		return (-1);
110f08c3bdfSopenharmony_ci	}
111f08c3bdfSopenharmony_ci	cfilecount++;
112f08c3bdfSopenharmony_ci	disk_space_pool -= randomsize;
113f08c3bdfSopenharmony_ci	close(fd);
114f08c3bdfSopenharmony_ci
115f08c3bdfSopenharmony_ci	return 0;
116f08c3bdfSopenharmony_ci}
117f08c3bdfSopenharmony_ci
118f08c3bdfSopenharmony_ci#include <sys/stat.h>
119f08c3bdfSopenharmony_ci#include <unistd.h>
120f08c3bdfSopenharmony_ci
121f08c3bdfSopenharmony_ciint delete_file(char *filename)
122f08c3bdfSopenharmony_ci{
123f08c3bdfSopenharmony_ci	struct stat buf;
124f08c3bdfSopenharmony_ci	int st;
125f08c3bdfSopenharmony_ci	st = stat(filename, &buf);
126f08c3bdfSopenharmony_ci	if (st < 0) {
127f08c3bdfSopenharmony_ci		errorcount++;
128f08c3bdfSopenharmony_ci		return (-1);
129f08c3bdfSopenharmony_ci	}
130f08c3bdfSopenharmony_ci	disk_space_pool += buf.st_size;
131f08c3bdfSopenharmony_ci	if (unlink(filename) < 0) {
132f08c3bdfSopenharmony_ci		errorcount++;
133f08c3bdfSopenharmony_ci		return (-1);
134f08c3bdfSopenharmony_ci	}
135f08c3bdfSopenharmony_ci	dfilecount++;
136f08c3bdfSopenharmony_ci
137f08c3bdfSopenharmony_ci	return 0;
138f08c3bdfSopenharmony_ci}
139