summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrsc <rsc>2007-08-22 02:21:22 +0000
committerrsc <rsc>2007-08-22 02:21:22 +0000
commitc88bf235fe2e5df91d0f486c3a5fc5a5a2e273da (patch)
tree4548e820ce956a0e125b8c757bd44067f62008e8
parentbd39955ecc4848d79fc361cfba51cd74b37b94de (diff)
downloadxv6-labs-c88bf235fe2e5df91d0f486c3a5fc5a5a2e273da.tar.gz
xv6-labs-c88bf235fe2e5df91d0f486c3a5fc5a5a2e273da.tar.bz2
xv6-labs-c88bf235fe2e5df91d0f486c3a5fc5a5a2e273da.zip
check unlink of non-empty directory
-rw-r--r--usertests.c32
1 files changed, 27 insertions, 5 deletions
diff --git a/usertests.c b/usertests.c
index 399d6b2..740b81d 100644
--- a/usertests.c
+++ b/usertests.c
@@ -782,6 +782,11 @@ subdir(void)
}
write(fd, "ff", 2);
close(fd);
+
+ if(unlink("dd") >= 0){
+ printf(1, "unlink dd (non-empty dir) succeeded!\n");
+ exit();
+ }
if(mkdir("/dd/dd") != 0){
printf(1, "subdir mkdir dd/dd failed\n");
@@ -817,6 +822,10 @@ subdir(void)
printf(1, "unlink dd/dd/ff failed\n");
exit();
}
+ if(open("dd/dd/ff", O_RDONLY) >= 0){
+ printf(1, "open (unlinked) dd/dd/ff succeeded\n");
+ exit();
+ }
if(chdir("dd") != 0){
printf(1, "chdir dd failed\n");
@@ -826,6 +835,10 @@ subdir(void)
printf(1, "chdir dd/../../dd failed\n");
exit();
}
+ if(chdir("dd/../../../dd") != 0){
+ printf(1, "chdir dd/../../dd failed\n");
+ exit();
+ }
if(chdir("./..") != 0){
printf(1, "chdir ./.. failed\n");
exit();
@@ -842,8 +855,8 @@ subdir(void)
}
close(fd);
- if(open("dd/dd/ff", 0) >= 0){
- printf(1, "open dd/dd/ff succeeded!\n");
+ if(open("dd/dd/ff", O_RDONLY) >= 0){
+ printf(1, "open (unlinked) dd/dd/ff succeeded!\n");
exit();
}
@@ -916,9 +929,18 @@ subdir(void)
printf(1, "unlink dd/ff failed\n");
exit();
}
-
- // unlink dd/dd
- // unlink dd
+ if(unlink("dd") == 0){
+ printf(1, "unlink non-empty dd succeeded!\n");
+ exit();
+ }
+ if(unlink("dd/dd") < 0){
+ printf(1, "unlink dd/dd failed\n");
+ exit();
+ }
+ if(unlink("dd") < 0){
+ printf(1, "unlink dd failed\n");
+ exit();
+ }
printf(1, "subdir ok\n");
}