aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2013-10-11 09:52:56 -0700
committerAlon Zakai <alonzakai@gmail.com>2013-10-11 09:52:56 -0700
commitb5d2acf04f04307c9d82f533ed6e0fdb1ec516c7 (patch)
treed94288ea888e1846953f8417f32372a472cc2f16
parent2cc20b41629bc533902ab25771388665c9276e58 (diff)
parentc338dd0a37f127aff4aaf69a6ba884a717bb0357 (diff)
Merge pull request #1704 from michaeljbishop/rename-bug
Fixes bug when renaming a directory into a subdirectory.
-rw-r--r--src/library_memfs.js1
-rw-r--r--tests/stdio/test_rename.c10
2 files changed, 11 insertions, 0 deletions
diff --git a/src/library_memfs.js b/src/library_memfs.js
index 4e56d996..94fd767e 100644
--- a/src/library_memfs.js
+++ b/src/library_memfs.js
@@ -140,6 +140,7 @@ mergeInto(LibraryManager.library, {
delete old_node.parent.contents[old_node.name];
old_node.name = new_name;
new_dir.contents[new_name] = old_node;
+ old_node.parent = new_dir;
},
unlink: function(parent, name) {
delete parent.contents[name];
diff --git a/tests/stdio/test_rename.c b/tests/stdio/test_rename.c
index f15c8140..1a5017c1 100644
--- a/tests/stdio/test_rename.c
+++ b/tests/stdio/test_rename.c
@@ -25,6 +25,8 @@ void setup() {
mkdir("dir/subdir", 0777);
mkdir("dir-readonly", 0555);
mkdir("dir-nonempty", 0777);
+ mkdir("dir/subdir3", 0777);
+ mkdir("dir/subdir3/subdir3_1", 0777);
create_file("dir-nonempty/file", "abcdef", 0777);
}
@@ -38,6 +40,9 @@ void cleanup() {
rmdir("dir/subdir");
rmdir("dir/subdir1");
rmdir("dir/subdir2");
+ rmdir("dir/subdir3/subdir3_1/subdir1 renamed");
+ rmdir("dir/subdir3/subdir3_1");
+ rmdir("dir/subdir3");
rmdir("dir");
rmdir("dir-readonly");
unlink("dir-nonempty/file");
@@ -96,6 +101,11 @@ void test() {
err = access("dir/subdir2", F_OK);
assert(!err);
+ err = rename("dir/subdir2", "dir/subdir3/subdir3_1/subdir1 renamed");
+ assert(!err);
+ err = access("dir/subdir3/subdir3_1/subdir1 renamed", F_OK);
+ assert(!err);
+
puts("success");
}