aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/fs-tests/integrity/integck.c54
1 files changed, 45 insertions, 9 deletions
diff --git a/tests/fs-tests/integrity/integck.c b/tests/fs-tests/integrity/integck.c
index ed02b56..4806acd 100644
--- a/tests/fs-tests/integrity/integck.c
+++ b/tests/fs-tests/integrity/integck.c
@@ -1942,6 +1942,42 @@ static void create_test_data(void)
do_an_operation();
}
+/*
+ * Recursively remove a directory, just like "rm -rf" shell command.
+ */
+void rm_minus_rf_dir(const char *dir_name)
+{
+ DIR *dir;
+ struct dirent *entry;
+ char buf[PATH_MAX];
+
+ dir = opendir(dir_name);
+ CHECK(dir != NULL);
+ CHECK(getcwd(buf, PATH_MAX) != NULL);
+ CHECK(chdir(dir_name) == 0);
+
+ for (;;) {
+ errno = 0;
+ entry = readdir(dir);
+ if (!entry) {
+ CHECK(errno == 0);
+ break;
+ }
+
+ if (strcmp(entry->d_name, ".") &&
+ strcmp(entry->d_name, "..")) {
+ if (entry->d_type == DT_DIR)
+ rm_minus_rf_dir(entry->d_name);
+ else
+ CHECK(unlink(entry->d_name) == 0);
+ }
+ }
+
+ CHECK(chdir(buf) == 0);
+ CHECK(closedir(dir) == 0);
+ CHECK(rmdir(dir_name) == 0);
+}
+
static void update_test_data(void)
{
uint64_t i, n;
@@ -1977,19 +2013,17 @@ static int integck(void)
{
int64_t rpt;
- /* Make our top directory */
- if (chdir(fsinfo.test_dir) != -1) {
+ /* Create our top directory */
+ if (chdir(fsinfo.test_dir) == 0) {
/* Remove it if it is already there */
- tests_clear_dir(".");
- CHECK(chdir("..") != -1);
- CHECK(rmdir(fsinfo.test_dir) != -1);
+ CHECK(chdir("..") == 0);
+ rm_minus_rf_dir(fsinfo.test_dir);
}
- top_dir = dir_new(NULL, fsinfo.test_dir);
+ top_dir = dir_new(NULL, fsinfo.test_dir);
if (!top_dir)
return -1;
- srand(getpid());
create_test_data();
if (!tests_fs_is_rootfs()) {
@@ -2018,8 +2052,7 @@ static int integck(void)
/* Tidy up by removing everything */
close_open_files();
- tests_clear_dir(fsinfo.test_dir);
- CHECK(rmdir(fsinfo.test_dir) != -1);
+ rm_minus_rf_dir(fsinfo.test_dir);
return 0;
}
@@ -2186,6 +2219,9 @@ int main(int argc, char *argv[])
tests_file_system_mount_dir = (void *)fsinfo.mount_point;
tests_file_system_type = (void *)fsinfo.fstype;
+ /* Seed the random generator with out PID */
+ srand(getpid());
+
/* Do the actual test */
ret = integck();
if (ret)