Kernel: Replace is_* with kind field
Replaced the is_* virtual functions with a kind field instead
This commit is contained in:
@@ -12,7 +12,6 @@ namespace Kernel
|
|||||||
virtual ~Device() = default;
|
virtual ~Device() = default;
|
||||||
virtual void update() {}
|
virtual void update() {}
|
||||||
|
|
||||||
virtual bool is_device() const override { return true; }
|
|
||||||
virtual bool is_partition() const { return false; }
|
virtual bool is_partition() const { return false; }
|
||||||
virtual bool is_storage_device() const { return false; }
|
virtual bool is_storage_device() const { return false; }
|
||||||
|
|
||||||
|
|||||||
@@ -35,11 +35,10 @@ namespace Kernel
|
|||||||
m_blocks = 0;
|
m_blocks = 0;
|
||||||
m_dev = 0;
|
m_dev = 0;
|
||||||
m_rdev = 0;
|
m_rdev = 0;
|
||||||
|
m_kind = InodeKind::EPOLL;
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
bool is_epoll() const override { return true; }
|
|
||||||
|
|
||||||
const FileSystem* filesystem() const override { return nullptr; }
|
const FileSystem* filesystem() const override { return nullptr; }
|
||||||
|
|
||||||
bool can_read_impl() const override { return false; }
|
bool can_read_impl() const override { return false; }
|
||||||
|
|||||||
@@ -61,7 +61,12 @@ namespace Kernel
|
|||||||
bool ifsock() const { return (mode & Mask::TYPE_MASK) == Mask::IFSOCK; }
|
bool ifsock() const { return (mode & Mask::TYPE_MASK) == Mask::IFSOCK; }
|
||||||
mode_t mode;
|
mode_t mode;
|
||||||
};
|
};
|
||||||
|
enum InodeKind : uint8_t {
|
||||||
|
DEVICE = 0x1,
|
||||||
|
EPOLL = 0x2,
|
||||||
|
PIPE = 0x4,
|
||||||
|
TTY = 0x8,
|
||||||
|
};
|
||||||
public:
|
public:
|
||||||
virtual ~Inode() {}
|
virtual ~Inode() {}
|
||||||
|
|
||||||
@@ -83,10 +88,10 @@ namespace Kernel
|
|||||||
dev_t dev() const { return m_dev; }
|
dev_t dev() const { return m_dev; }
|
||||||
dev_t rdev() const { return m_rdev; }
|
dev_t rdev() const { return m_rdev; }
|
||||||
|
|
||||||
virtual bool is_device() const { return false; }
|
bool is_device() const { return m_kind & InodeKind::DEVICE; }
|
||||||
virtual bool is_epoll() const { return false; }
|
bool is_epoll() const { return m_kind & InodeKind::EPOLL; }
|
||||||
virtual bool is_pipe() const { return false; }
|
bool is_pipe() const { return m_kind & InodeKind::PIPE; }
|
||||||
virtual bool is_tty() const { return false; }
|
bool is_tty() const { return m_kind & InodeKind::TTY; }
|
||||||
|
|
||||||
virtual const FileSystem* filesystem() const = 0;
|
virtual const FileSystem* filesystem() const = 0;
|
||||||
|
|
||||||
@@ -183,6 +188,10 @@ namespace Kernel
|
|||||||
virtual BAN::ErrorOr<long> ioctl_impl(int, void*) { return BAN::Error::from_errno(ENOTSUP); }
|
virtual BAN::ErrorOr<long> ioctl_impl(int, void*) { return BAN::Error::from_errno(ENOTSUP); }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
// TODO: this is supposed to be const I guess?
|
||||||
|
// But the thing is I would have to refactor a big chunk of the codebase
|
||||||
|
// to add it as a parameter to Inode() soooooo yeah no, not doing that rn.
|
||||||
|
uint8_t m_kind = 0;
|
||||||
BAN::Atomic<ino_t> m_ino;
|
BAN::Atomic<ino_t> m_ino;
|
||||||
BAN::Atomic<mode_t> m_mode;
|
BAN::Atomic<mode_t> m_mode;
|
||||||
BAN::Atomic<nlink_t> m_nlink;
|
BAN::Atomic<nlink_t> m_nlink;
|
||||||
|
|||||||
@@ -13,8 +13,6 @@ namespace Kernel
|
|||||||
public:
|
public:
|
||||||
static BAN::ErrorOr<BAN::RefPtr<Inode>> create(const Credentials&);
|
static BAN::ErrorOr<BAN::RefPtr<Inode>> create(const Credentials&);
|
||||||
|
|
||||||
virtual bool is_pipe() const override { return true; }
|
|
||||||
|
|
||||||
void on_close(int status_flags) override;
|
void on_close(int status_flags) override;
|
||||||
void on_clone(int status_flags) override;
|
void on_clone(int status_flags) override;
|
||||||
|
|
||||||
|
|||||||
@@ -49,8 +49,6 @@ namespace Kernel
|
|||||||
void on_key_event(LibInput::KeyEvent);
|
void on_key_event(LibInput::KeyEvent);
|
||||||
void handle_input_byte(uint8_t);
|
void handle_input_byte(uint8_t);
|
||||||
|
|
||||||
virtual bool is_tty() const override { return true; }
|
|
||||||
|
|
||||||
virtual void clear() = 0;
|
virtual void clear() = 0;
|
||||||
|
|
||||||
virtual BAN::ErrorOr<void> chmod_impl(mode_t) override;
|
virtual BAN::ErrorOr<void> chmod_impl(mode_t) override;
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ namespace Kernel
|
|||||||
MUST(DevFileSystem::get().allocate_inode(create_inode_info(mode, uid, gid))),
|
MUST(DevFileSystem::get().allocate_inode(create_inode_info(mode, uid, gid))),
|
||||||
create_inode_info(mode, uid, gid)
|
create_inode_info(mode, uid, gid)
|
||||||
)
|
)
|
||||||
{ }
|
{
|
||||||
|
m_kind |= InodeKind::DEVICE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ namespace Kernel
|
|||||||
m_blocks = 0;
|
m_blocks = 0;
|
||||||
m_dev = 0; // FIXME
|
m_dev = 0; // FIXME
|
||||||
m_rdev = 0; // FIXME
|
m_rdev = 0; // FIXME
|
||||||
|
m_kind = InodeKind::PIPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Pipe::on_clone(int status_flags)
|
void Pipe::on_clone(int status_flags)
|
||||||
|
|||||||
@@ -74,6 +74,7 @@ namespace Kernel
|
|||||||
: CharacterDevice(mode, uid, gid)
|
: CharacterDevice(mode, uid, gid)
|
||||||
, m_termios(termios)
|
, m_termios(termios)
|
||||||
{
|
{
|
||||||
|
m_kind |= InodeKind::TTY;
|
||||||
m_rdev = next_tty_rdev();
|
m_rdev = next_tty_rdev();
|
||||||
m_output.buffer = MUST(ByteRingBuffer::create(PAGE_SIZE));
|
m_output.buffer = MUST(ByteRingBuffer::create(PAGE_SIZE));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user