1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-28 12:15:09 +00:00

DevFS: Use strongly typed InodeIndex

Also add an assertion for the DevFS inode index allocator overflowing.
This commit is contained in:
Andreas Kling 2021-02-12 15:42:51 +01:00
parent 4717009e3e
commit 0a45cfee01
2 changed files with 7 additions and 8 deletions

View file

@ -57,10 +57,12 @@ void DevFS::notify_new_device(Device& device)
m_root_inode->m_devices.append(new_device_inode); m_root_inode->m_devices.append(new_device_inode);
} }
size_t DevFS::get_new_inode_index() size_t DevFS::allocate_inode_index()
{ {
LOCKER(m_lock); LOCKER(m_lock);
return 1 + (++m_inode_index); m_next_inode_index = m_next_inode_index.value() + 1;
ASSERT(m_next_inode_index > 0);
return 1 + m_next_inode_index.value();
} }
void DevFS::notify_device_removal(Device&) void DevFS::notify_device_removal(Device&)
@ -95,7 +97,7 @@ RefPtr<Inode> DevFS::get_inode(InodeIdentifier inode_id) const
} }
DevFSInode::DevFSInode(DevFS& fs) DevFSInode::DevFSInode(DevFS& fs)
: Inode(fs, fs.get_new_inode_index()) : Inode(fs, fs.allocate_inode_index())
{ {
} }
ssize_t DevFSInode::read_bytes(off_t, ssize_t, UserOrKernelBuffer&, FileDescription*) const ssize_t DevFSInode::read_bytes(off_t, ssize_t, UserOrKernelBuffer&, FileDescription*) const

View file

@ -60,12 +60,12 @@ public:
private: private:
DevFS(); DevFS();
RefPtr<Inode> get_inode(InodeIdentifier) const; RefPtr<Inode> get_inode(InodeIdentifier) const;
size_t get_new_inode_index(); size_t allocate_inode_index();
NonnullRefPtr<DevFSRootDirectoryInode> m_root_inode; NonnullRefPtr<DevFSRootDirectoryInode> m_root_inode;
NonnullRefPtrVector<DevFSInode> m_nodes; NonnullRefPtrVector<DevFSInode> m_nodes;
size_t m_inode_index { 0 }; InodeIndex m_next_inode_index { 0 };
}; };
class DevFSInode : public Inode { class DevFSInode : public Inode {
@ -89,9 +89,6 @@ protected:
virtual KResult chmod(mode_t) override; virtual KResult chmod(mode_t) override;
virtual KResult chown(uid_t, gid_t) override; virtual KResult chown(uid_t, gid_t) override;
virtual KResult truncate(u64) override; virtual KResult truncate(u64) override;
private:
size_t m_index;
}; };
class DevFSDeviceInode : public DevFSInode { class DevFSDeviceInode : public DevFSInode {