From d6d45f870e5ecd7f927c8ec5752df4c97ce573e7 Mon Sep 17 00:00:00 2001 From: Christian Prochaska Date: Tue, 31 Jul 2012 19:44:59 +0200 Subject: [PATCH] ram_fs: fix recursive 'lookup_and_lock()' calls With this patch the 'Directory::lookup_and_lock()' function passes its 'return_parent' argument to recursive calls of itself. Fixes #306. --- libports/src/test/libc_ffat/main.cc | 4 ++++ os/src/server/ram_fs/directory.h | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/libports/src/test/libc_ffat/main.cc b/libports/src/test/libc_ffat/main.cc index fa9175920..9f7d43360 100644 --- a/libports/src/test/libc_ffat/main.cc +++ b/libports/src/test/libc_ffat/main.cc @@ -43,6 +43,7 @@ int main(int argc, char *argv[]) ssize_t count; char const *dir_name = "/testdir"; + char const *dir_name2 = "testdir2"; char const *file_name = "test.tst"; char const *file_name2 = "test2.tst"; char const *file_name3 = "test3.tst"; @@ -64,6 +65,9 @@ int main(int argc, char *argv[]) /* change to new directory */ CALL_AND_CHECK(ret, chdir(dir_name), ret == 0, "dir_name=%s", dir_name); + /* create subdirectory with relative path */ + CALL_AND_CHECK(ret, mkdir(dir_name2, 0777), ((ret == 0) || (errno == EEXIST)), "dir_name=%s", dir_name2); + /* write pattern to a file */ CALL_AND_CHECK(fd, open(file_name, O_CREAT | O_WRONLY), fd >= 0, "file_name=%s", file_name); CALL_AND_CHECK(count, write(fd, pattern, pattern_size), (size_t)count == pattern_size, ""); diff --git a/os/src/server/ram_fs/directory.h b/os/src/server/ram_fs/directory.h index 7617bcfa5..592edcbfd 100644 --- a/os/src/server/ram_fs/directory.h +++ b/os/src/server/ram_fs/directory.h @@ -114,7 +114,7 @@ namespace File_system { if (!sub_dir) throw Lookup_failed(); - return sub_dir->lookup_and_lock(path + i + 1); + return sub_dir->lookup_and_lock(path + i + 1, return_parent); } Directory *lookup_and_lock_dir(char const *path)