aboutsummaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorBruce Evans <bde@FreeBSD.org>2002-05-22 08:50:18 +0000
committerBruce Evans <bde@FreeBSD.org>2002-05-22 08:50:18 +0000
commitfba2e6106f9c2d9a95af2d5261d2303447741835 (patch)
tree1569f57b3573dcd9b2b85553c6ad7d6f9f57b8ef /sys
parent2dd0744cbe8555b4b091cfa7efdee5a0b893e7f8 (diff)
Notes
Diffstat (limited to 'sys')
-rw-r--r--sys/fs/cd9660/cd9660_vnops.c20
-rw-r--r--sys/isofs/cd9660/cd9660_vnops.c20
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;