diff options
author | Artem Bityutskiy <Artem.Bityutskiy@nokia.com> | 2011-04-12 16:22:35 +0300 |
---|---|---|
committer | Artem Bityutskiy <Artem.Bityutskiy@nokia.com> | 2011-04-18 17:44:45 +0300 |
commit | ad23e23c4e5dd93e513f1339cc1cd93a05d089b4 (patch) | |
tree | 80866fa8d5206404d0922f200f935621b500aa48 | |
parent | 261a49daf5846ff6433e4199275115efcc1855fa (diff) |
fs-tests: integck: do not use tests_clear_dir
Do not use shared 'tests_clear_dir()' function which removes a directory
tree recursively, but instead use own implementation. This is because
I'm trying to make integck independend on the shared code because I
need this to do further improvements.
Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
-rw-r--r-- | tests/fs-tests/integrity/integck.c | 54 |
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) |