Kernel: Inode/Device detection is done with overridden bool functions
This commit is contained in:
parent
da7f09cf82
commit
a4cb5d8360
|
@ -8,20 +8,13 @@ namespace Kernel
|
||||||
class Device : public Inode
|
class Device : public Inode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
enum class DeviceType
|
|
||||||
{
|
|
||||||
BlockDevice,
|
|
||||||
CharacterDevice,
|
|
||||||
DeviceController,
|
|
||||||
Partition,
|
|
||||||
};
|
|
||||||
|
|
||||||
Device();
|
Device();
|
||||||
virtual ~Device() {}
|
virtual ~Device() {}
|
||||||
virtual DeviceType device_type() const = 0;
|
|
||||||
virtual void update() {}
|
virtual void update() {}
|
||||||
|
|
||||||
virtual InodeType inode_type() const override { return InodeType::Device; }
|
virtual bool is_device() const override { return true; }
|
||||||
|
|
||||||
|
virtual bool is_partition() const { return false; }
|
||||||
|
|
||||||
virtual ino_t ino() const override { return m_ino_t; }
|
virtual ino_t ino() const override { return m_ino_t; }
|
||||||
virtual nlink_t nlink() const override { return 1; }
|
virtual nlink_t nlink() const override { return 1; }
|
||||||
|
@ -50,13 +43,11 @@ namespace Kernel
|
||||||
class BlockDevice : public Device
|
class BlockDevice : public Device
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual DeviceType device_type() const override { return DeviceType::BlockDevice; }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class CharacterDevice : public Device
|
class CharacterDevice : public Device
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual DeviceType device_type() const override { return DeviceType::CharacterDevice; }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
|
@ -31,8 +31,6 @@ namespace Kernel
|
||||||
|
|
||||||
virtual BAN::RefPtr<Inode> root_inode() override { return this; }
|
virtual BAN::RefPtr<Inode> root_inode() override { return this; }
|
||||||
|
|
||||||
virtual InodeType inode_type() const override { return InodeType::Device; }
|
|
||||||
|
|
||||||
virtual BAN::StringView name() const override { return "device-manager"; }
|
virtual BAN::StringView name() const override { return "device-manager"; }
|
||||||
|
|
||||||
virtual BAN::ErrorOr<BAN::RefPtr<Inode>> read_directory_inode(BAN::StringView) override;
|
virtual BAN::ErrorOr<BAN::RefPtr<Inode>> read_directory_inode(BAN::StringView) override;
|
||||||
|
|
|
@ -137,8 +137,6 @@ namespace Kernel
|
||||||
virtual dev_t dev() const override { return 0; }
|
virtual dev_t dev() const override { return 0; }
|
||||||
virtual dev_t rdev() const override { return 0; }
|
virtual dev_t rdev() const override { return 0; }
|
||||||
|
|
||||||
virtual InodeType inode_type() const override { return InodeType::Ext2; }
|
|
||||||
|
|
||||||
virtual BAN::StringView name() const override { return m_name; }
|
virtual BAN::StringView name() const override { return m_name; }
|
||||||
|
|
||||||
virtual BAN::ErrorOr<BAN::String> link_target() override;
|
virtual BAN::ErrorOr<BAN::String> link_target() override;
|
||||||
|
|
|
@ -49,12 +49,6 @@ namespace Kernel
|
||||||
mode_t mode;
|
mode_t mode;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class InodeType
|
|
||||||
{
|
|
||||||
Device,
|
|
||||||
Ext2,
|
|
||||||
};
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual ~Inode() {}
|
virtual ~Inode() {}
|
||||||
|
|
||||||
|
@ -74,7 +68,7 @@ namespace Kernel
|
||||||
virtual dev_t dev() const = 0;
|
virtual dev_t dev() const = 0;
|
||||||
virtual dev_t rdev() const = 0;
|
virtual dev_t rdev() const = 0;
|
||||||
|
|
||||||
virtual InodeType inode_type() const = 0;
|
virtual bool is_device() const { return false; }
|
||||||
|
|
||||||
virtual BAN::StringView name() const = 0;
|
virtual BAN::StringView name() const = 0;
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,7 @@ namespace Kernel
|
||||||
char m_label[36 * 4 + 1];
|
char m_label[36 * 4 + 1];
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual DeviceType device_type() const override { return DeviceType::Partition; }
|
virtual bool is_partition() const override { return true; }
|
||||||
|
|
||||||
virtual Mode mode() const override { return { Mode::IFBLK | Mode::IRUSR | Mode::IRGRP }; }
|
virtual Mode mode() const override { return { Mode::IFBLK | Mode::IRUSR | Mode::IRGRP }; }
|
||||||
virtual uid_t uid() const override { return 0; }
|
virtual uid_t uid() const override { return 0; }
|
||||||
|
|
|
@ -41,11 +41,11 @@ namespace Kernel
|
||||||
BAN::ErrorOr<void> VirtualFileSystem::mount(BAN::StringView partition, BAN::StringView target)
|
BAN::ErrorOr<void> VirtualFileSystem::mount(BAN::StringView partition, BAN::StringView target)
|
||||||
{
|
{
|
||||||
auto partition_file = TRY(file_from_absolute_path(partition, true));
|
auto partition_file = TRY(file_from_absolute_path(partition, true));
|
||||||
if (partition_file.inode->inode_type() != Inode::InodeType::Device)
|
if (!partition_file.inode->is_device())
|
||||||
return BAN::Error::from_errno(ENOTBLK);
|
return BAN::Error::from_errno(ENOTBLK);
|
||||||
|
|
||||||
Device* device = (Device*)partition_file.inode.ptr();
|
Device* device = (Device*)partition_file.inode.ptr();
|
||||||
if (device->device_type() != Device::DeviceType::BlockDevice)
|
if (!device->is_partition())
|
||||||
return BAN::Error::from_errno(ENOTBLK);
|
return BAN::Error::from_errno(ENOTBLK);
|
||||||
|
|
||||||
auto* file_system = TRY(Ext2FS::create(*(Partition*)device));
|
auto* file_system = TRY(Ext2FS::create(*(Partition*)device));
|
||||||
|
|
Loading…
Reference in New Issue