mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 11:28:12 +00:00
Ext2FS: Fix fetching of the major/minor device numbers for st_rdev.
This is how it seems to work: - If ext2_inode.i_blocks[0] is non-zero, it contains the major/minor. - Otherwise, it's in ext2_inode.i_blocks[1].
This commit is contained in:
parent
6b5fbad250
commit
ecb1b93d53
1 changed files with 3 additions and 6 deletions
|
@ -422,13 +422,10 @@ InodeMetadata Ext2FSInode::metadata() const
|
||||||
metadata.block_size = fs().block_size();
|
metadata.block_size = fs().block_size();
|
||||||
metadata.block_count = m_raw_inode.i_blocks;
|
metadata.block_count = m_raw_inode.i_blocks;
|
||||||
|
|
||||||
if (::is_character_device(m_raw_inode.i_mode)) {
|
if (::is_character_device(m_raw_inode.i_mode) || ::is_block_device(m_raw_inode.i_mode)) {
|
||||||
unsigned dev = m_raw_inode.i_block[0];
|
unsigned dev = m_raw_inode.i_block[0];
|
||||||
metadata.major_device = (dev & 0xfff00) >> 8;
|
if (!dev)
|
||||||
metadata.minor_device = (dev & 0xff) | ((dev >> 12) & 0xfff00);
|
dev = m_raw_inode.i_block[1];
|
||||||
}
|
|
||||||
if (::is_block_device(m_raw_inode.i_mode)) {
|
|
||||||
unsigned dev = m_raw_inode.i_block[1];
|
|
||||||
metadata.major_device = (dev & 0xfff00) >> 8;
|
metadata.major_device = (dev & 0xfff00) >> 8;
|
||||||
metadata.minor_device = (dev & 0xff) | ((dev >> 12) & 0xfff00);
|
metadata.minor_device = (dev & 0xff) | ((dev >> 12) & 0xfff00);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue