]> Devi Nivas Git - cs3210-lab1.git/commitdiff
fix . .. unlink bug
authorrsc <rsc>
Wed, 8 Aug 2007 09:08:29 +0000 (09:08 +0000)
committerrsc <rsc>
Wed, 8 Aug 2007 09:08:29 +0000 (09:08 +0000)
BUGS
fs.c

diff --git a/BUGS b/BUGS
index 2f6d8bcf4e415ec4927e765b525d67febca4fb46..509b41499699014d23236d82a6000a2fc32dafc3 100644 (file)
--- a/BUGS
+++ b/BUGS
@@ -33,7 +33,5 @@ ide.c: synchronous disk write -> polling disk write.  search for
 fs.c: split all name operations off in name.c?  (starting with namei but move 
       wdir keep in fs.c)
 
-      unlink . and .. should be disallowed
-
 ls.c: apply tim's patch
 
diff --git a/fs.c b/fs.c
index 3f0a71df99433cb53f954239bc071646aa3c0c03..8f7b8721dd686a7285216d89e2ebedb27d41ff6f 100644 (file)
--- 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;
     }