* devices.h (device::get_device): New method.
* fhandler_dev.cc (fhandler_dev::readdir): Set st_ino to device number. * syscalls.cc (fhandler_base::stat_fixup): Ditto. Fix link count for CD-ROM devices. Fix typo in comment.
This commit is contained in:
parent
467e17b9af
commit
eb7729eb36
@ -1,3 +1,10 @@
|
||||
2012-04-02 Corinna Vinschen <corinna@vinschen.de>
|
||||
|
||||
* devices.h (device::get_device): New method.
|
||||
* fhandler_dev.cc (fhandler_dev::readdir): Set st_ino to device number.
|
||||
* syscalls.cc (fhandler_base::stat_fixup): Ditto. Fix link count for
|
||||
CD-ROM devices. Fix typo in comment.
|
||||
|
||||
2012-04-02 Corinna Vinschen <corinna@vinschen.de>
|
||||
|
||||
* fhandler.h (fhandler_base::stat_fixup): Rename from
|
||||
|
@ -308,6 +308,7 @@ struct device
|
||||
|
||||
_minor_t get_minor () const {return d.minor;}
|
||||
_major_t get_major () const {return d.major;}
|
||||
_dev_t get_device () const {return d.devn;}
|
||||
|
||||
inline operator int& () {return d.devn_int;}
|
||||
inline operator fh_devices () {return d.devn_fh_devices;}
|
||||
|
@ -208,11 +208,10 @@ fhandler_dev::readdir (DIR *dir, dirent *de)
|
||||
{
|
||||
/* Make sure conin, conout, and console have the same inode number
|
||||
as the current consX. */
|
||||
dev.parse (myself->ctty);
|
||||
de->d_ino = hash_path_name (0, dev.native);
|
||||
de->d_ino = myself->ctty;
|
||||
}
|
||||
else
|
||||
de->d_ino = hash_path_name (0, curdev->native);
|
||||
de->d_ino = curdev->get_device ();
|
||||
de->d_type = curdev->type ();
|
||||
ret = 0;
|
||||
break;
|
||||
|
@ -1591,8 +1591,10 @@ static bool dev_st_inited;
|
||||
void
|
||||
fhandler_base::stat_fixup (struct __stat64 *buf)
|
||||
{
|
||||
/* Set inode number to device number. This gives us a valid, unique
|
||||
inode number and we especially don't have to call hash_path_name. */
|
||||
if (!buf->st_ino)
|
||||
buf->st_ino = get_ino ();
|
||||
buf->st_ino = get_device ();
|
||||
/* For /dev-based devices, st_dev must be set to the device number of /dev,
|
||||
not it's own device major/minor numbers. What we do here to speed up
|
||||
the process is to fetch the device number of /dev only once, liberally
|
||||
@ -1616,9 +1618,12 @@ fhandler_base::stat_fixup (struct __stat64 *buf)
|
||||
{
|
||||
buf->st_rdev = get_device ();
|
||||
/* consX, console, conin, and conout point to the same device.
|
||||
make sure the link count is correct. */
|
||||
Make sure the link count is correct. */
|
||||
if (buf->st_rdev == (dev_t) myself->ctty && iscons_dev (myself->ctty))
|
||||
buf->st_nlink = 4;
|
||||
/* CD-ROM drives have two links, /dev/srX and /dev/scdX. */
|
||||
else if (gnu_dev_major (buf->st_rdev) == DEV_CDROM_MAJOR)
|
||||
buf->st_nlink = 2;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user