summaryrefslogtreecommitdiff
path: root/fs.c
diff options
context:
space:
mode:
authorrsc <rsc>2007-08-08 09:08:29 +0000
committerrsc <rsc>2007-08-08 09:08:29 +0000
commit5f0c20ec14dc1c97519e0843d715fd91b430e77c (patch)
tree36bb459eee034c54d7501407fb8e73fbe74d8074 /fs.c
parent5bbba977d1257659485a924d01f1975e5d5f2c91 (diff)
downloadxv6-labs-5f0c20ec14dc1c97519e0843d715fd91b430e77c.tar.gz
xv6-labs-5f0c20ec14dc1c97519e0843d715fd91b430e77c.tar.bz2
xv6-labs-5f0c20ec14dc1c97519e0843d715fd91b430e77c.zip
fix . .. unlink bug
Diffstat (limited to 'fs.c')
-rw-r--r--fs.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/fs.c b/fs.c
index 3f0a71d..8f7b872 100644
--- a/fs.c
+++ b/fs.c
@@ -579,6 +579,12 @@ namei(char *path, int mode, uint *ret_off,
found:
if(mode == NAMEI_DELETE && *cp == '\0'){
+ // can't unlink . and ..
+ if((i == 1 && memcmp(cp-1, ".", 1) == 0) ||
+ (i == 2 && memcmp(cp-2, "..", 2) == 0)){
+ iput(dp);
+ return 0;
+ }
*ret_off = off;
return dp;
}