mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-22 15:40:19 +00:00
Kernel: Remove the DevTmpFS class
Although this code worked quite well, it is considered to be a code duplication with the TmpFS code which is more tested and works quite well for a variety of cases. The only valid reason to keep this filesystem was that it enforces that no regular files will be created at all in the filesystem. Later on, we will re-introduce this feature in a sane manner. Therefore, this can be safely removed after SystemServer no longer uses this filesystem type anymore.
This commit is contained in:
parent
4c15915e40
commit
97f8927da6
Notes:
sideshowbarker
2024-07-17 08:37:36 +09:00
Author: https://github.com/supercomputer7 Commit: https://github.com/SerenityOS/serenity/commit/97f8927da6 Pull-request: https://github.com/SerenityOS/serenity/pull/15741 Reviewed-by: https://github.com/gmta ✅ Reviewed-by: https://github.com/kleinesfilmroellchen ✅
5 changed files with 0 additions and 510 deletions
|
@ -109,7 +109,6 @@ set(KERNEL_SOURCES
|
|||
FileSystem/BlockBasedFileSystem.cpp
|
||||
FileSystem/Custody.cpp
|
||||
FileSystem/DevPtsFS.cpp
|
||||
FileSystem/DevTmpFS.cpp
|
||||
FileSystem/Ext2FileSystem.cpp
|
||||
FileSystem/FATFileSystem.cpp
|
||||
FileSystem/FIFO.cpp
|
||||
|
|
|
@ -1,335 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2020, Liav A. <liavalb@hotmail.co.il>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#include <AK/StringView.h>
|
||||
#include <Kernel/Devices/DeviceManagement.h>
|
||||
#include <Kernel/FileSystem/DevTmpFS.h>
|
||||
#include <Kernel/FileSystem/VirtualFileSystem.h>
|
||||
|
||||
namespace Kernel {
|
||||
|
||||
ErrorOr<NonnullLockRefPtr<FileSystem>> DevTmpFS::try_create()
|
||||
{
|
||||
return TRY(adopt_nonnull_lock_ref_or_enomem(new (nothrow) DevTmpFS));
|
||||
}
|
||||
|
||||
DevTmpFS::DevTmpFS() = default;
|
||||
|
||||
size_t DevTmpFS::allocate_inode_index()
|
||||
{
|
||||
MutexLocker locker(m_lock);
|
||||
m_next_inode_index = m_next_inode_index.value() + 1;
|
||||
VERIFY(m_next_inode_index > 0);
|
||||
return 1 + m_next_inode_index.value();
|
||||
}
|
||||
|
||||
DevTmpFS::~DevTmpFS() = default;
|
||||
|
||||
ErrorOr<void> DevTmpFS::initialize()
|
||||
{
|
||||
m_root_inode = TRY(adopt_nonnull_lock_ref_or_enomem(new (nothrow) DevTmpFSRootDirectoryInode(*this)));
|
||||
return {};
|
||||
}
|
||||
|
||||
Inode& DevTmpFS::root_inode()
|
||||
{
|
||||
return *m_root_inode;
|
||||
}
|
||||
|
||||
DevTmpFSInode::DevTmpFSInode(DevTmpFS& fs)
|
||||
: Inode(fs, fs.allocate_inode_index())
|
||||
{
|
||||
}
|
||||
|
||||
DevTmpFSInode::DevTmpFSInode(DevTmpFS& fs, MajorNumber major_number, MinorNumber minor_number)
|
||||
: Inode(fs, fs.allocate_inode_index())
|
||||
, m_major_number(major_number)
|
||||
, m_minor_number(minor_number)
|
||||
{
|
||||
}
|
||||
|
||||
ErrorOr<size_t> DevTmpFSInode::read_bytes_locked(off_t, size_t, UserOrKernelBuffer&, OpenFileDescription*) const
|
||||
{
|
||||
VERIFY_NOT_REACHED();
|
||||
}
|
||||
|
||||
ErrorOr<void> DevTmpFSInode::traverse_as_directory(Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)>) const
|
||||
{
|
||||
VERIFY_NOT_REACHED();
|
||||
}
|
||||
|
||||
ErrorOr<NonnullLockRefPtr<Inode>> DevTmpFSInode::lookup(StringView)
|
||||
{
|
||||
VERIFY_NOT_REACHED();
|
||||
}
|
||||
|
||||
ErrorOr<void> DevTmpFSInode::flush_metadata()
|
||||
{
|
||||
return {};
|
||||
}
|
||||
|
||||
ErrorOr<size_t> DevTmpFSInode::write_bytes_locked(off_t, size_t, UserOrKernelBuffer const&, OpenFileDescription*)
|
||||
{
|
||||
VERIFY_NOT_REACHED();
|
||||
}
|
||||
|
||||
ErrorOr<NonnullLockRefPtr<Inode>> DevTmpFSInode::create_child(StringView, mode_t, dev_t, UserID, GroupID)
|
||||
{
|
||||
VERIFY_NOT_REACHED();
|
||||
}
|
||||
|
||||
ErrorOr<void> DevTmpFSInode::add_child(Inode&, StringView, mode_t)
|
||||
{
|
||||
VERIFY_NOT_REACHED();
|
||||
}
|
||||
|
||||
InodeMetadata DevTmpFSInode::metadata() const
|
||||
{
|
||||
MutexLocker locker(m_inode_lock);
|
||||
VERIFY((m_mode & 0777) == m_mode);
|
||||
InodeMetadata metadata;
|
||||
metadata.uid = m_uid;
|
||||
metadata.gid = m_gid;
|
||||
metadata.size = 0;
|
||||
metadata.mtime = TimeManagement::boot_time();
|
||||
switch (node_type()) {
|
||||
case Type::RootDirectory:
|
||||
metadata.inode = { fsid(), 1 };
|
||||
metadata.mode = 0040555;
|
||||
metadata.uid = 0;
|
||||
metadata.gid = 0;
|
||||
metadata.size = 0;
|
||||
metadata.mtime = TimeManagement::boot_time();
|
||||
break;
|
||||
case Type::Directory:
|
||||
metadata.inode = { fsid(), index() };
|
||||
metadata.mode = S_IFDIR | m_mode;
|
||||
break;
|
||||
case Type::BlockDevice:
|
||||
metadata.inode = { fsid(), index() };
|
||||
metadata.mode = S_IFBLK | m_mode;
|
||||
metadata.major_device = m_major_number;
|
||||
metadata.minor_device = m_minor_number;
|
||||
break;
|
||||
case Type::CharacterDevice:
|
||||
metadata.inode = { fsid(), index() };
|
||||
metadata.mode = S_IFCHR | m_mode;
|
||||
metadata.major_device = m_major_number;
|
||||
metadata.minor_device = m_minor_number;
|
||||
break;
|
||||
case Type::Link:
|
||||
metadata.inode = { fsid(), index() };
|
||||
metadata.mode = S_IFLNK | m_mode;
|
||||
break;
|
||||
default:
|
||||
VERIFY_NOT_REACHED();
|
||||
}
|
||||
return metadata;
|
||||
}
|
||||
|
||||
ErrorOr<void> DevTmpFSInode::remove_child(StringView)
|
||||
{
|
||||
VERIFY_NOT_REACHED();
|
||||
}
|
||||
|
||||
ErrorOr<void> DevTmpFSInode::chmod(mode_t mode)
|
||||
{
|
||||
MutexLocker locker(m_inode_lock);
|
||||
mode &= 0777;
|
||||
if (m_mode == mode)
|
||||
return {};
|
||||
m_mode = mode;
|
||||
return {};
|
||||
}
|
||||
|
||||
ErrorOr<void> DevTmpFSInode::chown(UserID uid, GroupID gid)
|
||||
{
|
||||
MutexLocker locker(m_inode_lock);
|
||||
m_uid = uid;
|
||||
m_gid = gid;
|
||||
return {};
|
||||
}
|
||||
|
||||
ErrorOr<void> DevTmpFSInode::truncate(u64)
|
||||
{
|
||||
return EPERM;
|
||||
}
|
||||
|
||||
StringView DevTmpFSLinkInode::name() const
|
||||
{
|
||||
return m_name->view();
|
||||
}
|
||||
|
||||
DevTmpFSLinkInode::~DevTmpFSLinkInode() = default;
|
||||
|
||||
DevTmpFSLinkInode::DevTmpFSLinkInode(DevTmpFS& fs, NonnullOwnPtr<KString> name)
|
||||
: DevTmpFSInode(fs)
|
||||
, m_name(move(name))
|
||||
{
|
||||
}
|
||||
|
||||
ErrorOr<size_t> DevTmpFSLinkInode::read_bytes_locked(off_t offset, size_t, UserOrKernelBuffer& buffer, OpenFileDescription*) const
|
||||
{
|
||||
VERIFY(m_inode_lock.is_locked());
|
||||
VERIFY(offset == 0);
|
||||
VERIFY(m_link);
|
||||
TRY(buffer.write(m_link->characters() + offset, m_link->length()));
|
||||
return m_link->length();
|
||||
}
|
||||
|
||||
ErrorOr<size_t> DevTmpFSLinkInode::write_bytes_locked(off_t offset, size_t count, UserOrKernelBuffer const& buffer, OpenFileDescription*)
|
||||
{
|
||||
VERIFY(m_inode_lock.is_locked());
|
||||
auto new_string = TRY(buffer.try_copy_into_kstring(count));
|
||||
VERIFY(offset == 0);
|
||||
VERIFY(buffer.is_kernel_buffer());
|
||||
m_link = move(new_string);
|
||||
return count;
|
||||
}
|
||||
|
||||
DevTmpFSDirectoryInode::DevTmpFSDirectoryInode(DevTmpFS& fs)
|
||||
: DevTmpFSInode(fs)
|
||||
{
|
||||
}
|
||||
DevTmpFSDirectoryInode::DevTmpFSDirectoryInode(DevTmpFS& fs, NonnullOwnPtr<KString> name)
|
||||
: DevTmpFSInode(fs)
|
||||
, m_name(move(name))
|
||||
{
|
||||
}
|
||||
DevTmpFSDirectoryInode::~DevTmpFSDirectoryInode() = default;
|
||||
|
||||
ErrorOr<void> DevTmpFSDirectoryInode::traverse_as_directory(Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)> callback) const
|
||||
{
|
||||
MutexLocker locker(m_inode_lock);
|
||||
TRY(callback({ "."sv, identifier(), 0 }));
|
||||
TRY(callback({ ".."sv, identifier(), 0 }));
|
||||
for (auto& node : m_nodes) {
|
||||
InodeIdentifier identifier = { fsid(), node.index() };
|
||||
TRY(callback({ node.name(), identifier, 0 }));
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
ErrorOr<NonnullLockRefPtr<Inode>> DevTmpFSDirectoryInode::lookup(StringView name)
|
||||
{
|
||||
MutexLocker locker(m_inode_lock);
|
||||
for (auto& node : m_nodes) {
|
||||
if (node.name() == name) {
|
||||
return node;
|
||||
}
|
||||
}
|
||||
return Error::from_errno(ENOENT);
|
||||
}
|
||||
|
||||
ErrorOr<void> DevTmpFSDirectoryInode::remove_child(StringView name)
|
||||
{
|
||||
MutexLocker locker(m_inode_lock);
|
||||
for (auto& node : m_nodes) {
|
||||
if (node.name() == name) {
|
||||
m_nodes.remove(node);
|
||||
return {};
|
||||
}
|
||||
}
|
||||
return Error::from_errno(ENOENT);
|
||||
}
|
||||
|
||||
ErrorOr<NonnullLockRefPtr<Inode>> DevTmpFSDirectoryInode::create_child(StringView name, mode_t mode, dev_t device_mode, UserID, GroupID)
|
||||
{
|
||||
MutexLocker locker(m_inode_lock);
|
||||
for (auto& node : m_nodes) {
|
||||
if (node.name() == name)
|
||||
return Error::from_errno(EEXIST);
|
||||
}
|
||||
|
||||
InodeMetadata metadata;
|
||||
metadata.mode = mode;
|
||||
if (metadata.is_directory()) {
|
||||
auto name_kstring = TRY(KString::try_create(name));
|
||||
auto new_directory_inode = TRY(adopt_nonnull_lock_ref_or_enomem(new (nothrow) DevTmpFSDirectoryInode(fs(), move(name_kstring))));
|
||||
TRY(new_directory_inode->chmod(mode));
|
||||
m_nodes.append(*new_directory_inode);
|
||||
return new_directory_inode;
|
||||
}
|
||||
if (metadata.is_device()) {
|
||||
auto name_kstring = TRY(KString::try_create(name));
|
||||
auto major = major_from_encoded_device(device_mode);
|
||||
auto minor = minor_from_encoded_device(device_mode);
|
||||
auto new_device_inode = TRY(adopt_nonnull_lock_ref_or_enomem(new (nothrow) DevTmpFSDeviceInode(fs(), major, minor, is_block_device(mode), move(name_kstring))));
|
||||
TRY(new_device_inode->chmod(mode));
|
||||
m_nodes.append(*new_device_inode);
|
||||
return new_device_inode;
|
||||
}
|
||||
if (metadata.is_symlink()) {
|
||||
auto name_kstring = TRY(KString::try_create(name));
|
||||
auto new_link_inode = TRY(adopt_nonnull_lock_ref_or_enomem(new (nothrow) DevTmpFSLinkInode(fs(), move(name_kstring))));
|
||||
TRY(new_link_inode->chmod(mode));
|
||||
m_nodes.append(*new_link_inode);
|
||||
return new_link_inode;
|
||||
}
|
||||
return EROFS;
|
||||
}
|
||||
|
||||
DevTmpFSRootDirectoryInode::DevTmpFSRootDirectoryInode(DevTmpFS& fs)
|
||||
: DevTmpFSDirectoryInode(fs)
|
||||
{
|
||||
m_mode = 0555;
|
||||
}
|
||||
DevTmpFSRootDirectoryInode::~DevTmpFSRootDirectoryInode() = default;
|
||||
ErrorOr<void> DevTmpFSRootDirectoryInode::chmod(mode_t)
|
||||
{
|
||||
return EPERM;
|
||||
}
|
||||
|
||||
ErrorOr<void> DevTmpFSRootDirectoryInode::chown(UserID, GroupID)
|
||||
{
|
||||
return EPERM;
|
||||
}
|
||||
|
||||
DevTmpFSDeviceInode::DevTmpFSDeviceInode(DevTmpFS& fs, MajorNumber major_number, MinorNumber minor_number, bool block_device, NonnullOwnPtr<KString> name)
|
||||
: DevTmpFSInode(fs, major_number, minor_number)
|
||||
, m_name(move(name))
|
||||
, m_block_device(block_device)
|
||||
{
|
||||
}
|
||||
|
||||
DevTmpFSDeviceInode::~DevTmpFSDeviceInode() = default;
|
||||
|
||||
StringView DevTmpFSDeviceInode::name() const
|
||||
{
|
||||
return m_name->view();
|
||||
}
|
||||
|
||||
ErrorOr<size_t> DevTmpFSDeviceInode::read_bytes_locked(off_t offset, size_t count, UserOrKernelBuffer& buffer, OpenFileDescription* description) const
|
||||
{
|
||||
VERIFY(m_inode_lock.is_locked());
|
||||
VERIFY(!!description);
|
||||
LockRefPtr<Device> device = DeviceManagement::the().get_device(m_major_number, m_minor_number);
|
||||
if (!device)
|
||||
return Error::from_errno(ENODEV);
|
||||
if (!device->can_read(*description, offset))
|
||||
return Error::from_errno(ENOTIMPL);
|
||||
auto result = const_cast<Device&>(*device).read(*description, offset, buffer, count);
|
||||
if (result.is_error())
|
||||
return result;
|
||||
return result.value();
|
||||
}
|
||||
|
||||
ErrorOr<size_t> DevTmpFSDeviceInode::write_bytes_locked(off_t offset, size_t count, UserOrKernelBuffer const& buffer, OpenFileDescription* description)
|
||||
{
|
||||
VERIFY(m_inode_lock.is_locked());
|
||||
VERIFY(!!description);
|
||||
LockRefPtr<Device> device = DeviceManagement::the().get_device(m_major_number, m_minor_number);
|
||||
if (!device)
|
||||
return Error::from_errno(ENODEV);
|
||||
if (!device->can_write(*description, offset))
|
||||
return Error::from_errno(ENOTIMPL);
|
||||
auto result = const_cast<Device&>(*device).write(*description, offset, buffer, count);
|
||||
if (result.is_error())
|
||||
return result;
|
||||
return result.value();
|
||||
}
|
||||
|
||||
}
|
|
@ -1,167 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2020, Liav A. <liavalb@hotmail.co.il>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <AK/Types.h>
|
||||
#include <Kernel/FileSystem/FileSystem.h>
|
||||
#include <Kernel/FileSystem/Inode.h>
|
||||
#include <Kernel/FileSystem/InodeMetadata.h>
|
||||
#include <Kernel/TTY/SlavePTY.h>
|
||||
|
||||
namespace Kernel {
|
||||
|
||||
class DevTmpFS final : public FileSystem {
|
||||
friend class DevTmpFSInode;
|
||||
friend class DevTmpFSRootDirectoryInode;
|
||||
|
||||
public:
|
||||
virtual ~DevTmpFS() override;
|
||||
static ErrorOr<NonnullLockRefPtr<FileSystem>> try_create();
|
||||
|
||||
virtual ErrorOr<void> initialize() override;
|
||||
virtual StringView class_name() const override { return "DevTmpFS"sv; }
|
||||
virtual Inode& root_inode() override;
|
||||
|
||||
private:
|
||||
DevTmpFS();
|
||||
size_t allocate_inode_index();
|
||||
|
||||
LockRefPtr<DevTmpFSRootDirectoryInode> m_root_inode;
|
||||
InodeIndex m_next_inode_index { 0 };
|
||||
};
|
||||
|
||||
class DevTmpFSInode : public Inode {
|
||||
friend class DevTmpFS;
|
||||
friend class DevTmpFSRootDirectoryInode;
|
||||
friend class DevTmpFSDirectoryInode;
|
||||
|
||||
public:
|
||||
virtual StringView name() const = 0;
|
||||
|
||||
DevTmpFS& fs() { return static_cast<DevTmpFS&>(Inode::fs()); }
|
||||
DevTmpFS const& fs() const { return static_cast<DevTmpFS const&>(Inode::fs()); }
|
||||
|
||||
protected:
|
||||
explicit DevTmpFSInode(DevTmpFS&);
|
||||
DevTmpFSInode(DevTmpFS&, MajorNumber, MinorNumber);
|
||||
virtual ErrorOr<size_t> read_bytes_locked(off_t, size_t, UserOrKernelBuffer& buffer, OpenFileDescription*) const override;
|
||||
virtual ErrorOr<void> traverse_as_directory(Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)>) const override;
|
||||
virtual ErrorOr<NonnullLockRefPtr<Inode>> lookup(StringView name) override;
|
||||
virtual ErrorOr<void> flush_metadata() override;
|
||||
virtual InodeMetadata metadata() const override final;
|
||||
virtual ErrorOr<size_t> write_bytes_locked(off_t, size_t, UserOrKernelBuffer const& buffer, OpenFileDescription*) override;
|
||||
virtual ErrorOr<NonnullLockRefPtr<Inode>> create_child(StringView name, mode_t, dev_t, UserID, GroupID) override;
|
||||
virtual ErrorOr<void> add_child(Inode&, StringView name, mode_t) override;
|
||||
virtual ErrorOr<void> remove_child(StringView name) override;
|
||||
virtual ErrorOr<void> chmod(mode_t) override;
|
||||
virtual ErrorOr<void> chown(UserID, GroupID) override;
|
||||
virtual ErrorOr<void> truncate(u64) override;
|
||||
|
||||
mode_t m_mode { 0600 };
|
||||
UserID m_uid { 0 };
|
||||
GroupID m_gid { 0 };
|
||||
const MajorNumber m_major_number { 0 };
|
||||
const MinorNumber m_minor_number { 0 };
|
||||
|
||||
enum class Type {
|
||||
BlockDevice,
|
||||
CharacterDevice,
|
||||
Directory,
|
||||
RootDirectory,
|
||||
Link
|
||||
};
|
||||
virtual Type node_type() const = 0;
|
||||
|
||||
private:
|
||||
IntrusiveListNode<DevTmpFSInode, LockRefPtr<DevTmpFSInode>> m_list_node;
|
||||
};
|
||||
|
||||
class DevTmpFSDeviceInode final : public DevTmpFSInode {
|
||||
friend class DevTmpFS;
|
||||
friend class DevTmpFSRootDirectoryInode;
|
||||
friend class DevTmpFSDirectoryInode;
|
||||
|
||||
public:
|
||||
virtual StringView name() const override;
|
||||
virtual ~DevTmpFSDeviceInode() override;
|
||||
|
||||
private:
|
||||
DevTmpFSDeviceInode(DevTmpFS&, MajorNumber, MinorNumber, bool, NonnullOwnPtr<KString> name);
|
||||
// ^DevTmpFSInode
|
||||
virtual Type node_type() const override { return m_block_device ? Type::BlockDevice : Type::CharacterDevice; }
|
||||
|
||||
// ^Inode
|
||||
virtual ErrorOr<size_t> read_bytes_locked(off_t, size_t, UserOrKernelBuffer& buffer, OpenFileDescription*) const override;
|
||||
virtual ErrorOr<size_t> write_bytes_locked(off_t, size_t, UserOrKernelBuffer const& buffer, OpenFileDescription*) override;
|
||||
|
||||
NonnullOwnPtr<KString> m_name;
|
||||
bool const m_block_device;
|
||||
};
|
||||
|
||||
class DevTmpFSLinkInode final : public DevTmpFSInode {
|
||||
friend class DevTmpFS;
|
||||
friend class DevTmpFSDirectoryInode;
|
||||
|
||||
public:
|
||||
virtual StringView name() const override;
|
||||
virtual ~DevTmpFSLinkInode() override;
|
||||
|
||||
protected:
|
||||
DevTmpFSLinkInode(DevTmpFS&, NonnullOwnPtr<KString>);
|
||||
// ^DevTmpFSInode
|
||||
virtual Type node_type() const override { return Type::Link; }
|
||||
|
||||
// ^Inode
|
||||
virtual ErrorOr<size_t> read_bytes_locked(off_t, size_t, UserOrKernelBuffer& buffer, OpenFileDescription*) const override;
|
||||
virtual ErrorOr<size_t> write_bytes_locked(off_t, size_t, UserOrKernelBuffer const& buffer, OpenFileDescription*) override;
|
||||
|
||||
NonnullOwnPtr<KString> m_name;
|
||||
OwnPtr<KString> m_link;
|
||||
};
|
||||
|
||||
class DevTmpFSDirectoryInode : public DevTmpFSInode {
|
||||
friend class DevTmpFS;
|
||||
friend class DevTmpFSRootDirectoryInode;
|
||||
|
||||
public:
|
||||
virtual ~DevTmpFSDirectoryInode() override;
|
||||
virtual StringView name() const override { return m_name->view(); }
|
||||
|
||||
protected:
|
||||
// ^DevTmpFSInode
|
||||
virtual Type node_type() const override { return Type::Directory; }
|
||||
|
||||
virtual ErrorOr<NonnullLockRefPtr<Inode>> create_child(StringView name, mode_t, dev_t, UserID, GroupID) override;
|
||||
virtual ErrorOr<void> remove_child(StringView name) override;
|
||||
virtual ErrorOr<void> traverse_as_directory(Function<ErrorOr<void>(FileSystem::DirectoryEntryView const&)>) const override;
|
||||
virtual ErrorOr<NonnullLockRefPtr<Inode>> lookup(StringView name) override;
|
||||
DevTmpFSDirectoryInode(DevTmpFS&, NonnullOwnPtr<KString> name);
|
||||
// ^Inode
|
||||
OwnPtr<KString> m_name;
|
||||
IntrusiveList<&DevTmpFSInode::m_list_node> m_nodes;
|
||||
|
||||
private:
|
||||
explicit DevTmpFSDirectoryInode(DevTmpFS&);
|
||||
};
|
||||
|
||||
class DevTmpFSRootDirectoryInode final : public DevTmpFSDirectoryInode {
|
||||
friend class DevTmpFS;
|
||||
|
||||
public:
|
||||
virtual ~DevTmpFSRootDirectoryInode() override;
|
||||
virtual StringView name() const override { return "."sv; }
|
||||
|
||||
private:
|
||||
// ^DevTmpFSInode
|
||||
virtual Type node_type() const override { return Type::Directory; }
|
||||
|
||||
explicit DevTmpFSRootDirectoryInode(DevTmpFS&);
|
||||
virtual ErrorOr<void> chmod(mode_t) override;
|
||||
virtual ErrorOr<void> chown(UserID, GroupID) override;
|
||||
};
|
||||
|
||||
}
|
|
@ -16,11 +16,6 @@ class CharacterDevice;
|
|||
class Coredump;
|
||||
class Credentials;
|
||||
class Custody;
|
||||
class DevTmpFSDeviceInode;
|
||||
class DevTmpFSDirectoryInode;
|
||||
class DevTmpFSInode;
|
||||
class DevTmpFSPtsDirectoryInode;
|
||||
class DevTmpFSRootDirectoryInode;
|
||||
class Device;
|
||||
class DiskCache;
|
||||
class DoubleBuffer;
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
|
||||
#include <Kernel/FileSystem/Custody.h>
|
||||
#include <Kernel/FileSystem/DevPtsFS.h>
|
||||
#include <Kernel/FileSystem/DevTmpFS.h>
|
||||
#include <Kernel/FileSystem/Ext2FileSystem.h>
|
||||
#include <Kernel/FileSystem/FATFileSystem.h>
|
||||
#include <Kernel/FileSystem/ISO9660FileSystem.h>
|
||||
|
@ -32,7 +31,6 @@ struct FileSystemInitializer {
|
|||
static constexpr FileSystemInitializer s_initializers[] = {
|
||||
{ "proc"sv, "ProcFS"sv, false, false, false, {}, ProcFS::try_create },
|
||||
{ "devpts"sv, "DevPtsFS"sv, false, false, false, {}, DevPtsFS::try_create },
|
||||
{ "dev"sv, "DevTmpFS"sv, false, false, false, {}, DevTmpFS::try_create },
|
||||
{ "sys"sv, "SysFS"sv, false, false, false, {}, SysFS::try_create },
|
||||
{ "tmp"sv, "TmpFS"sv, false, false, false, {}, TmpFS::try_create },
|
||||
{ "ext2"sv, "Ext2FS"sv, true, true, true, Ext2FS::try_create, {} },
|
||||
|
|
Loading…
Reference in a new issue