8310ab84a1
byte offset of the directory entry for the inode number for all types of files except directories, although this breaks hard links for non-directories even if it doesn't cause overflow. Just ignore this broken inode number for stat() and readdir() and return a less broken one (the block offset of the file), so that applications normally can't see the brokenness. This leaves at least the following brokenness: - extra inodes, vnodes and caching for hard links. - various overflow bugs. cd9660 supports 64-bit block numbers, but we silently ignore the top 32 bits in isonum_733() and then drop another 10 bits for our broken inode numbers. We may also have sign extension bugs from storing 32-bit extents in ints and longs even if ints are 32-bits. These bugs affect DVDs. mkisofs apparently limits them by writing directory entries first. Inode numbers were broken mainly in 4.4BSD-Lite2. FreeBSD-1.1.5 seems to have a correct implementation modulo the overflow bugs. We need to look up directory entries from inodes for symlinks only. FreeBSD-1.1.5 use separate fields (iso_parent_extent, iso_parent) to point to the directory entry. 4.4BSD-Lite doesn't have these, and abuses i_ino to point to the directory entry. Correct pointers are impossible for hard links, but symlinks can't be hard links. |
||
---|---|---|
.. | ||
cd9660_bmap.c | ||
cd9660_lookup.c | ||
cd9660_mount.h | ||
cd9660_node.c | ||
cd9660_node.h | ||
cd9660_rrip.c | ||
cd9660_rrip.h | ||
cd9660_util.c | ||
cd9660_vfsops.c | ||
cd9660_vnops.c | ||
iso_rrip.h | ||
iso.h | ||
TODO | ||
TODO.hibler |