* 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>
|
2012-04-02 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
* fhandler.h (fhandler_base::stat_fixup): Rename from
|
* fhandler.h (fhandler_base::stat_fixup): Rename from
|
||||||
|
|
|
@ -308,6 +308,7 @@ struct device
|
||||||
|
|
||||||
_minor_t get_minor () const {return d.minor;}
|
_minor_t get_minor () const {return d.minor;}
|
||||||
_major_t get_major () const {return d.major;}
|
_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 int& () {return d.devn_int;}
|
||||||
inline operator fh_devices () {return d.devn_fh_devices;}
|
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
|
/* Make sure conin, conout, and console have the same inode number
|
||||||
as the current consX. */
|
as the current consX. */
|
||||||
dev.parse (myself->ctty);
|
de->d_ino = myself->ctty;
|
||||||
de->d_ino = hash_path_name (0, dev.native);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
de->d_ino = hash_path_name (0, curdev->native);
|
de->d_ino = curdev->get_device ();
|
||||||
de->d_type = curdev->type ();
|
de->d_type = curdev->type ();
|
||||||
ret = 0;
|
ret = 0;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -1591,8 +1591,10 @@ static bool dev_st_inited;
|
||||||
void
|
void
|
||||||
fhandler_base::stat_fixup (struct __stat64 *buf)
|
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)
|
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,
|
/* 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
|
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
|
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 ();
|
buf->st_rdev = get_device ();
|
||||||
/* consX, console, conin, and conout point to the same 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))
|
if (buf->st_rdev == (dev_t) myself->ctty && iscons_dev (myself->ctty))
|
||||||
buf->st_nlink = 4;
|
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