Ivan Baravy
fecf7be637
mkdoubledirs creates pairs of directories a/a, b/b, c/c etc. This is to test file lookup code: there must be a directory named blah only if the current directory is named blah too. gensamehash generates file names with the same XFS hash to test the code that resolves collisions. In principle, can be updated for other hashes: ext*, exfat, etc.
59 lines
1.5 KiB
C
59 lines
1.5 KiB
C
/*
|
|
SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
UMKa - User-Mode KolibriOS developer tools
|
|
mkdoubledirs - make directories with same names inside: dirname/dirname,
|
|
useful for search testing
|
|
|
|
Copyright (C) 2022 Ivan Baravy <dunkaist@gmail.com>
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <sys/stat.h>
|
|
#include <sys/types.h>
|
|
#include <fcntl.h>
|
|
#include <errno.h>
|
|
#include <string.h>
|
|
#include <unistd.h>
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
const char *prefix;
|
|
const char *path;
|
|
unsigned count;
|
|
if (argc != 4) {
|
|
fprintf(stderr, "mkdoubledirs <directory> <prefix> <count>\n");
|
|
exit(1);
|
|
}
|
|
path = argv[1];
|
|
prefix = argv[2];
|
|
sscanf(argv[3], "%u", &count);
|
|
|
|
if (chdir(path)) {
|
|
fprintf(stderr, "Can't change dir to %s: %s\n", path, strerror(errno));
|
|
exit(1);
|
|
}
|
|
char dirname[256];
|
|
|
|
for(unsigned cur = 0; cur < count; cur++) {
|
|
sprintf(dirname, "%s%10.10u", prefix, cur);
|
|
if(mkdirat(AT_FDCWD, dirname, 0755)) {
|
|
fprintf(stderr, "Can't mkdir %s: %s\n", dirname, strerror(errno));
|
|
exit(1);
|
|
}
|
|
int dirfd = open(dirname, O_DIRECTORY);
|
|
if (dirfd == -1) {
|
|
fprintf(stderr, "Can't open %s: %s\n", dirname, strerror(errno));
|
|
exit(1);
|
|
}
|
|
if(mkdirat(dirfd, dirname, 0755)) {
|
|
fprintf(stderr, "Can't mkdir %s: %s\n", dirname, strerror(errno));
|
|
exit(1);
|
|
}
|
|
close(dirfd);
|
|
}
|
|
|
|
return 0;
|
|
}
|