1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-28 16:25:06 +00:00

Kernel: Add callback on ".." directory entry for a TmpFS root directory

This commit is contained in:
Liav A 2022-12-04 10:27:19 +02:00 committed by Andrew Kaster
parent 5ee1758f46
commit 6a555af1f1
3 changed files with 23 additions and 9 deletions

View file

@ -18,6 +18,18 @@ TmpFSInode::TmpFSInode(TmpFS& fs, InodeMetadata const& metadata, LockWeakPtr<Tmp
m_metadata.inode = identifier();
}
TmpFSInode::TmpFSInode(TmpFS& fs)
: Inode(fs, 1)
, m_root_directory_inode(true)
{
auto now = kgettimeofday();
m_metadata.inode = identifier();
m_metadata.atime = now;
m_metadata.ctime = now;
m_metadata.mtime = now;
m_metadata.mode = S_IFDIR | S_ISVTX | 0777;
}
TmpFSInode::~TmpFSInode() = default;
ErrorOr<NonnullLockRefPtr<TmpFSInode>> TmpFSInode::try_create(TmpFS& fs, InodeMetadata const& metadata, LockWeakPtr<TmpFSInode> parent)
@ -27,13 +39,7 @@ ErrorOr<NonnullLockRefPtr<TmpFSInode>> TmpFSInode::try_create(TmpFS& fs, InodeMe
ErrorOr<NonnullLockRefPtr<TmpFSInode>> TmpFSInode::try_create_root(TmpFS& fs)
{
InodeMetadata metadata;
auto now = kgettimeofday();
metadata.atime = now;
metadata.ctime = now;
metadata.mtime = now;
metadata.mode = S_IFDIR | S_ISVTX | 0777;
return try_create(fs, metadata, {});
return adopt_nonnull_lock_ref_or_enomem(new (nothrow) TmpFSInode(fs));
}
InodeMetadata TmpFSInode::metadata() const
@ -51,8 +57,11 @@ ErrorOr<void> TmpFSInode::traverse_as_directory(Function<ErrorOr<void>(FileSyste
return ENOTDIR;
TRY(callback({ "."sv, identifier(), 0 }));
if (auto parent = m_parent.strong_ref())
if (m_root_directory_inode) {
TRY(callback({ ".."sv, identifier(), 0 }));
} else if (auto parent = m_parent.strong_ref()) {
TRY(callback({ ".."sv, parent->identifier(), 0 }));
}
for (auto& child : m_children) {
TRY(callback({ child.name->view(), child.inode->identifier(), 0 }));