make dirlookup and dirlink more similar
This commit is contained in:
parent
cd3d739e6f
commit
327cc21fba
2 changed files with 66 additions and 18 deletions
31
fs.c
31
fs.c
|
@ -469,30 +469,25 @@ struct inode*
|
|||
dirlookup(struct inode *dp, char *name, uint *poff)
|
||||
{
|
||||
uint off, inum;
|
||||
struct buf *bp;
|
||||
struct dirent *de;
|
||||
struct dirent de;
|
||||
|
||||
if(dp->type != T_DIR)
|
||||
panic("dirlookup not DIR");
|
||||
|
||||
for(off = 0; off < dp->size; off += BSIZE){
|
||||
bp = bread(dp->dev, bmap(dp, off / BSIZE));
|
||||
for(de = (struct dirent*)bp->data;
|
||||
de < (struct dirent*)(bp->data + BSIZE);
|
||||
de++){
|
||||
if(de->inum == 0)
|
||||
continue;
|
||||
if(namecmp(name, de->name) == 0){
|
||||
// entry matches path element
|
||||
if(poff)
|
||||
*poff = off + (uchar*)de - bp->data;
|
||||
inum = de->inum;
|
||||
brelse(bp);
|
||||
return iget(dp->dev, inum);
|
||||
}
|
||||
for(off = 0; off < dp->size; off += sizeof(de)){
|
||||
if(readi(dp, (char*)&de, off, sizeof(de)) != sizeof(de))
|
||||
panic("dirlink read");
|
||||
if(de.inum == 0)
|
||||
continue;
|
||||
if(namecmp(name, de.name) == 0){
|
||||
// entry matches path element
|
||||
if(poff)
|
||||
*poff = off;
|
||||
inum = de.inum;
|
||||
return iget(dp->dev, inum);
|
||||
}
|
||||
brelse(bp);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue