2
test readdir/unlink pattern that OS/2 uses
3
tridge@samba.org July 2005
10
#include <sys/types.h>
17
#define READDIR_SIZE 100
20
#define TESTDIR "test.dir"
22
#define FAILED(d) (fprintf(stderr, "Failed for %s - %s\n", d, strerror(errno)), exit(1), 1)
25
#define MIN(a,b) ((a)<(b)?(a):(b))
28
static void cleanup(void)
30
/* I'm a lazy bastard */
31
system("rm -rf " TESTDIR);
32
mkdir(TESTDIR, 0700) == 0 || FAILED("mkdir");
35
static void create_files()
38
for (i=0;i<NUM_FILES;i++) {
40
sprintf(fname, TESTDIR "/test%u.txt", i);
41
close(open(fname, O_CREAT|O_RDWR, 0600)) == 0 || FAILED("close");
45
static int os2_delete(DIR *d)
47
off_t offsets[READDIR_SIZE];
50
char names[READDIR_SIZE][30];
52
/* scan, remembering offsets */
53
for (i=0, de=readdir(d);
54
de && i < READDIR_SIZE;
56
offsets[i] = telldir(d);
57
strcpy(names[i], de->d_name);
64
/* delete the first few */
65
for (j=0; j<MIN(i, DELETE_SIZE); j++) {
67
sprintf(fname, TESTDIR "/%s", names[j]);
68
unlink(fname) == 0 || FAILED("unlink");
71
/* seek to just after the deletion */
72
seekdir(d, offsets[j-1]);
74
/* return number deleted */
80
int total_deleted = 0;
89
/* skip past . and .. */
91
strcmp(de->d_name, ".") == 0 || FAILED("match .");
93
strcmp(de->d_name, "..") == 0 || FAILED("match ..");
96
int n = os2_delete(d);
102
printf("Deleted %d files of %d\n", total_deleted, NUM_FILES);
104
rmdir(TESTDIR) == 0 || FAILED("rmdir");
109
test readdir/unlink pattern that OS/2 uses
110
tridge@samba.org July 2005
115
#include <sys/stat.h>
117
#include <sys/types.h>
123
#define NUM_FILES 700
124
#define READDIR_SIZE 100
125
#define DELETE_SIZE 4
127
#define TESTDIR "test.dir"
129
#define FAILED(d) (fprintf(stderr, "Failed for %s - %s\n", d, strerror(errno)), exit(1), 1)
132
#define MIN(a,b) ((a)<(b)?(a):(b))
135
static void cleanup(void)
137
/* I'm a lazy bastard */
138
system("rm -rf " TESTDIR);
139
mkdir(TESTDIR, 0700) == 0 || FAILED("mkdir");
142
static void create_files()
145
for (i=0;i<NUM_FILES;i++) {
147
sprintf(fname, TESTDIR "/test%u.txt", i);
148
close(open(fname, O_CREAT|O_RDWR, 0600)) == 0 || FAILED("close");
152
static int os2_delete(DIR *d)
154
off_t offsets[READDIR_SIZE];
157
char names[READDIR_SIZE][30];
159
/* scan, remembering offsets */
160
for (i=0, de=readdir(d);
161
de && i < READDIR_SIZE;
162
de=readdir(d), i++) {
163
offsets[i] = telldir(d);
164
strcpy(names[i], de->d_name);
171
/* delete the first few */
172
for (j=0; j<MIN(i, DELETE_SIZE); j++) {
174
sprintf(fname, TESTDIR "/%s", names[j]);
175
unlink(fname) == 0 || FAILED("unlink");
178
/* seek to just after the deletion */
179
seekdir(d, offsets[j-1]);
181
/* return number deleted */
187
int total_deleted = 0;
194
d = opendir(TESTDIR);
196
/* skip past . and .. */
198
strcmp(de->d_name, ".") == 0 || FAILED("match .");
200
strcmp(de->d_name, "..") == 0 || FAILED("match ..");
203
int n = os2_delete(d);
209
printf("Deleted %d files of %d\n", total_deleted, NUM_FILES);
211
rmdir(TESTDIR) == 0 || FAILED("rmdir");