umka/tools/mkdoubledirs.c
Ivan Baravy fecf7be637 Add two tools: mkdoubledirs and gensamehash
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.
2023-01-02 01:50:02 +00:00

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;
}