1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-24 20:17:41 +00:00

Kernel/DevFS: Use KString for DevFSDeviceInode::m_name

This commit is contained in:
Andreas Kling 2021-07-17 22:17:07 +02:00
parent 0d89cfcd9a
commit a3f58a5003
2 changed files with 11 additions and 9 deletions

View file

@ -30,8 +30,11 @@ DevFS::DevFS()
void DevFS::notify_new_device(Device& device) void DevFS::notify_new_device(Device& device)
{ {
auto name = KString::try_create(device.device_name());
VERIFY(name);
Locker locker(m_lock); Locker locker(m_lock);
auto new_device_inode = adopt_ref(*new DevFSDeviceInode(*this, device)); auto new_device_inode = adopt_ref(*new DevFSDeviceInode(*this, device, name.release_nonnull()));
m_nodes.append(new_device_inode); m_nodes.append(new_device_inode);
m_root_inode->m_devices.append(new_device_inode); m_root_inode->m_devices.append(new_device_inode);
} }
@ -335,14 +338,17 @@ KResultOr<size_t> DevFSRootDirectoryInode::directory_entry_count() const
return m_devices.size() + DevFSDirectoryInode::directory_entry_count().value(); return m_devices.size() + DevFSDirectoryInode::directory_entry_count().value();
} }
DevFSDeviceInode::DevFSDeviceInode(DevFS& fs, const Device& device) DevFSDeviceInode::DevFSDeviceInode(DevFS& fs, Device const& device, NonnullOwnPtr<KString> name)
: DevFSInode(fs) : DevFSInode(fs)
, m_attached_device(device) , m_attached_device(device)
, m_name(move(name))
{ {
} }
DevFSDeviceInode::~DevFSDeviceInode() DevFSDeviceInode::~DevFSDeviceInode()
{ {
} }
KResult DevFSDeviceInode::chown(uid_t uid, gid_t gid) KResult DevFSDeviceInode::chown(uid_t uid, gid_t gid)
{ {
Locker locker(m_inode_lock); Locker locker(m_inode_lock);
@ -353,10 +359,7 @@ KResult DevFSDeviceInode::chown(uid_t uid, gid_t gid)
StringView DevFSDeviceInode::name() const StringView DevFSDeviceInode::name() const
{ {
Locker locker(m_inode_lock); return m_name->view();
if (m_cached_name.is_null() || m_cached_name.is_empty())
const_cast<DevFSDeviceInode&>(*this).m_cached_name = m_attached_device->device_name();
return m_cached_name;
} }
KResultOr<size_t> DevFSDeviceInode::read_bytes(off_t offset, size_t count, UserOrKernelBuffer& buffer, FileDescription* description) const KResultOr<size_t> DevFSDeviceInode::read_bytes(off_t offset, size_t count, UserOrKernelBuffer& buffer, FileDescription* description) const

View file

@ -73,8 +73,7 @@ public:
virtual ~DevFSDeviceInode() override; virtual ~DevFSDeviceInode() override;
private: private:
String determine_name() const; DevFSDeviceInode(DevFS&, Device const&, NonnullOwnPtr<KString> name);
DevFSDeviceInode(DevFS&, const Device&);
// ^Inode // ^Inode
virtual KResultOr<size_t> read_bytes(off_t, size_t, UserOrKernelBuffer& buffer, FileDescription*) const override; virtual KResultOr<size_t> read_bytes(off_t, size_t, UserOrKernelBuffer& buffer, FileDescription*) const override;
virtual InodeMetadata metadata() const override; virtual InodeMetadata metadata() const override;
@ -82,7 +81,7 @@ private:
virtual KResult chown(uid_t, gid_t) override; virtual KResult chown(uid_t, gid_t) override;
NonnullRefPtr<Device> m_attached_device; NonnullRefPtr<Device> m_attached_device;
String m_cached_name; NonnullOwnPtr<KString> m_name;
uid_t m_uid { 0 }; uid_t m_uid { 0 };
gid_t m_gid { 0 }; gid_t m_gid { 0 };