mirror of
https://github.com/RGBCube/serenity
synced 2025-05-28 08:35:09 +00:00
Make stat() work on device files again.
FileDescriptor will now keep a pointer to the original inode even after opening it resolves to a character device. Fixed up /bin/ls to display major and minor device numbers instead of size for device files.
This commit is contained in:
parent
c3cc318028
commit
c4fce9b3f9
8 changed files with 25 additions and 10 deletions
|
@ -59,10 +59,11 @@ RetainPtr<FileDescriptor> FileDescriptor::clone()
|
|||
? FileDescriptor::create_pipe_reader(*m_fifo)
|
||||
: FileDescriptor::create_pipe_writer(*m_fifo);
|
||||
} else {
|
||||
if (m_inode)
|
||||
descriptor = FileDescriptor::create(m_inode.copyRef());
|
||||
else {
|
||||
if (m_device) {
|
||||
descriptor = FileDescriptor::create(m_device.copyRef());
|
||||
descriptor->m_inode = m_inode.copyRef();
|
||||
} else {
|
||||
descriptor = FileDescriptor::create(m_inode.copyRef());
|
||||
}
|
||||
}
|
||||
if (!descriptor)
|
||||
|
@ -90,7 +91,7 @@ int FileDescriptor::fstat(stat* buffer)
|
|||
if (!metadata.isValid())
|
||||
return -EIO;
|
||||
|
||||
buffer->st_dev = 0; // FIXME
|
||||
buffer->st_dev = encodedDevice(metadata.majorDevice, metadata.minorDevice);
|
||||
buffer->st_ino = metadata.inode.index();
|
||||
buffer->st_mode = metadata.mode;
|
||||
buffer->st_nlink = metadata.linkCount;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue