diff options
| author | rsc <rsc> | 2007-08-08 09:08:29 +0000 | 
|---|---|---|
| committer | rsc <rsc> | 2007-08-08 09:08:29 +0000 | 
| commit | 5f0c20ec14dc1c97519e0843d715fd91b430e77c (patch) | |
| tree | 36bb459eee034c54d7501407fb8e73fbe74d8074 | |
| parent | 5bbba977d1257659485a924d01f1975e5d5f2c91 (diff) | |
| download | xv6-labs-5f0c20ec14dc1c97519e0843d715fd91b430e77c.tar.gz xv6-labs-5f0c20ec14dc1c97519e0843d715fd91b430e77c.tar.bz2 xv6-labs-5f0c20ec14dc1c97519e0843d715fd91b430e77c.zip | |
fix . .. unlink bug
| -rw-r--r-- | BUGS | 2 | ||||
| -rw-r--r-- | fs.c | 6 | 
2 files changed, 6 insertions, 2 deletions
| @@ -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 @@ -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;      } | 
