diff options
| author | Bruce Evans <bde@FreeBSD.org> | 2002-05-22 08:50:18 +0000 |
|---|---|---|
| committer | Bruce Evans <bde@FreeBSD.org> | 2002-05-22 08:50:18 +0000 |
| commit | fba2e6106f9c2d9a95af2d5261d2303447741835 (patch) | |
| tree | 1569f57b3573dcd9b2b85553c6ad7d6f9f57b8ef | |
| parent | 2dd0744cbe8555b4b091cfa7efdee5a0b893e7f8 (diff) | |
Notes
| -rw-r--r-- | sys/fs/cd9660/cd9660_vnops.c | 20 | ||||
| -rw-r--r-- | sys/isofs/cd9660/cd9660_vnops.c | 20 |
2 files changed, 28 insertions, 12 deletions
diff --git a/sys/fs/cd9660/cd9660_vnops.c b/sys/fs/cd9660/cd9660_vnops.c index 7dcf1a94a1d4..91ecaa3e80a3 100644 --- a/sys/fs/cd9660/cd9660_vnops.c +++ b/sys/fs/cd9660/cd9660_vnops.c @@ -170,7 +170,14 @@ cd9660_getattr(ap) register struct iso_node *ip = VTOI(vp); vap->va_fsid = dev2udev(ip->i_dev); - vap->va_fileid = ip->i_number; + + /* + * Don't use ip->i_ino for this since it is wrong for hard links. + * ip->i_ino should be the same as ip->iso_start (or not exist), + * but this currently doesn't work since we abuse it to look up + * parent directories from inodes. + */ + vap->va_fileid = ip->iso_start; vap->va_mode = ip->inode.iso_mode; vap->va_nlink = ip->inode.iso_links; @@ -524,11 +531,12 @@ cd9660_readdir(ap) break; } - if (isonum_711(ep->flags)&2) - idp->current.d_fileno = isodirino(ep, imp); - else - idp->current.d_fileno = dbtob(bp->b_blkno) + - entryoffsetinblock; + /* + * The "inode number" is iso_start, not i_ino, as in + * cd9660_getattr(). + */ + idp->current.d_fileno = isonum_711(ep->ext_attr_length) + + isonum_733(ep->extent); idp->curroff += reclen; diff --git a/sys/isofs/cd9660/cd9660_vnops.c b/sys/isofs/cd9660/cd9660_vnops.c index 7dcf1a94a1d4..91ecaa3e80a3 100644 --- a/sys/isofs/cd9660/cd9660_vnops.c +++ b/sys/isofs/cd9660/cd9660_vnops.c @@ -170,7 +170,14 @@ cd9660_getattr(ap) register struct iso_node *ip = VTOI(vp); vap->va_fsid = dev2udev(ip->i_dev); - vap->va_fileid = ip->i_number; + + /* + * Don't use ip->i_ino for this since it is wrong for hard links. + * ip->i_ino should be the same as ip->iso_start (or not exist), + * but this currently doesn't work since we abuse it to look up + * parent directories from inodes. + */ + vap->va_fileid = ip->iso_start; vap->va_mode = ip->inode.iso_mode; vap->va_nlink = ip->inode.iso_links; @@ -524,11 +531,12 @@ cd9660_readdir(ap) break; } - if (isonum_711(ep->flags)&2) - idp->current.d_fileno = isodirino(ep, imp); - else - idp->current.d_fileno = dbtob(bp->b_blkno) + - entryoffsetinblock; + /* + * The "inode number" is iso_start, not i_ino, as in + * cd9660_getattr(). + */ + idp->current.d_fileno = isonum_711(ep->ext_attr_length) + + isonum_733(ep->extent); idp->curroff += reclen; |
