diff options
author | kaashoek <kaashoek> | 2006-08-09 19:25:20 +0000 |
---|---|---|
committer | kaashoek <kaashoek> | 2006-08-09 19:25:20 +0000 |
commit | 939f9edeac042b2678bd2943a32822fb2eed75b4 (patch) | |
tree | 0e7be15b11b6686f406b2bb67aca4781d6792ff7 /fs.c | |
parent | 2601de00325bebd850fb74409e77e68d52b7021a (diff) | |
download | xv6-labs-939f9edeac042b2678bd2943a32822fb2eed75b4.tar.gz xv6-labs-939f9edeac042b2678bd2943a32822fb2eed75b4.tar.bz2 xv6-labs-939f9edeac042b2678bd2943a32822fb2eed75b4.zip |
iread for T_DEV
O_RDWR, etc.
create file
Diffstat (limited to 'fs.c')
-rw-r--r-- | fs.c | 8 |
1 files changed, 8 insertions, 0 deletions
@@ -239,6 +239,12 @@ readi(struct inode *ip, void *xdst, uint off, uint n) uint target = n, n1; struct buf *bp; + if (ip->type == T_DEV) { + if (ip->major < 0 || ip->major >= NDEV || !devsw[ip->major].d_read) + return -1; + return devsw[ip->major].d_read (ip->minor, xdst, n); + } + while(n > 0 && off < ip->size){ bp = bread(ip->dev, bmap(ip, off / BSIZE)); n1 = min(n, ip->size - off); @@ -257,6 +263,8 @@ int writei(struct inode *ip, void *addr, uint n) { if (ip->type == T_DEV) { + if (ip->major < 0 || ip->major >= NDEV || !devsw[ip->major].d_write) + return -1; return devsw[ip->major].d_write (ip->minor, addr, n); } else { panic ("writei: unknown type\n"); |