summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArtem Bityutskiy <Artem.Bityutskiy@nokia.com>2011-04-12 16:22:35 +0300
committerArtem Bityutskiy <Artem.Bityutskiy@nokia.com>2011-04-18 17:44:45 +0300
commitad23e23c4e5dd93e513f1339cc1cd93a05d089b4 (patch)
tree80866fa8d5206404d0922f200f935621b500aa48
parent261a49daf5846ff6433e4199275115efcc1855fa (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.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)