From 05e975511bcf7f33955208319655dbfc687a7b0c Mon Sep 17 00:00:00 2001 From: rtm Date: Sat, 12 Aug 2006 22:44:26 +0000 Subject: zero out all of dirent.name when creating don't increase length of directory --- fs.c | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) (limited to 'fs.c') diff --git a/fs.c b/fs.c index b042bb2..e01b4fb 100644 --- a/fs.c +++ b/fs.c @@ -56,7 +56,7 @@ balloc(uint dev) cprintf ("balloc: allocate block %d\n", b); bp->data[bi/8] |= 0x1 << (bi % 8); - bwrite (dev, bp, BBLOCK(b, ninodes)); // mark it allocated on disk + bwrite (bp, BBLOCK(b, ninodes)); // mark it allocated on disk brelse(bp); return b; } @@ -80,7 +80,7 @@ bfree(int dev, uint b) bi = b % BPB; m = ~(0x1 << (bi %8)); bp->data[bi/8] &= m; - bwrite (dev, bp, BBLOCK(b, ninodes)); // mark it free on disk + bwrite (bp, BBLOCK(b, ninodes)); // mark it free on disk brelse(bp); } @@ -147,7 +147,7 @@ iupdate (struct inode *ip) dip->nlink = ip->nlink; dip->size = ip->size; memmove(dip->addrs, ip->addrs, sizeof(ip->addrs)); - bwrite (ip->dev, bp, IBLOCK(ip->inum)); // mark it allocated on the disk + bwrite (bp, IBLOCK(ip->inum)); // mark it allocated on the disk brelse(bp); } @@ -181,7 +181,7 @@ ialloc(uint dev, short type) cprintf ("ialloc: %d\n", inum); dip->type = type; - bwrite (dev, bp, IBLOCK(inum)); // mark it allocated on the disk + bwrite (bp, IBLOCK(inum)); // mark it allocated on the disk brelse(bp); ip = iget (dev, inum); return ip; @@ -353,7 +353,7 @@ writei(struct inode *ip, char *addr, uint off, uint n) m = min(BSIZE - off % BSIZE, n-r); bp = bread(ip->dev, bmap(ip, off / BSIZE)); memmove (bp->data + off % BSIZE, addr, m); - bwrite (ip->dev, bp, bmap(ip, off/BSIZE)); + bwrite (bp, bmap(ip, off/BSIZE)); brelse (bp); r += m; off += m; @@ -484,13 +484,16 @@ mknod(char *cp, short type, short major, short minor) found: ep->inum = ip->inum; - for(i = 0; i < DIRSIZ && cp[i]; i++) ep->name[i] = cp[i]; - bwrite (dp->dev, bp, bmap(dp, off/BSIZE)); // write directory block + for(i = 0; i < DIRSIZ && cp[i]; i++) + ep->name[i] = cp[i]; + for( ; i < DIRSIZ; i++) + ep->name[i] = '\0'; + bwrite (bp, bmap(dp, off/BSIZE)); // write directory block brelse(bp); - dp->size += sizeof(struct dirent); // update directory inode - iupdate (dp); - iput(dp); - return ip; + + iput(dp); + + return ip; } int @@ -531,7 +534,7 @@ unlink(char *cp) found: ep->inum = 0; - bwrite (dp->dev, bp, bmap(dp, off/BSIZE)); // write directory block + bwrite (bp, bmap(dp, off/BSIZE)); // write directory block brelse(bp); iupdate (dp); iput(dp); -- cgit v1.2.3