Kernel: Add hardlink support to tmpfs

This commit is contained in:
Bananymous 2025-08-27 00:46:24 +03:00
parent 16a5a234c1
commit 51cd951b4c
2 changed files with 15 additions and 0 deletions

View File

@ -156,6 +156,7 @@ namespace Kernel
virtual BAN::ErrorOr<size_t> list_next_inodes_impl(off_t, struct dirent*, size_t) override final;
virtual BAN::ErrorOr<void> create_file_impl(BAN::StringView, mode_t, uid_t, gid_t) override final;
virtual BAN::ErrorOr<void> create_directory_impl(BAN::StringView, mode_t, uid_t, gid_t) override final;
virtual BAN::ErrorOr<void> link_inode_impl(BAN::StringView, BAN::RefPtr<Inode>) override final;
virtual BAN::ErrorOr<void> unlink_impl(BAN::StringView) override;
virtual bool can_read_impl() const override { return false; }

View File

@ -655,6 +655,20 @@ namespace Kernel
return {};
}
BAN::ErrorOr<void> TmpDirectoryInode::link_inode_impl(BAN::StringView name, BAN::RefPtr<Inode> inode)
{
ASSERT(this->mode().ifdir());
ASSERT(!inode->mode().ifdir());
ASSERT(&m_fs == inode->filesystem());
if (!find_inode_impl(name).is_error())
return BAN::Error::from_errno(EEXIST);
auto* tmp_inode = static_cast<TmpInode*>(inode.ptr());
TRY(link_inode(*tmp_inode, name));
return {};
}
BAN::ErrorOr<void> TmpDirectoryInode::unlink_impl(BAN::StringView name)
{
ino_t entry_ino = 0;