Kernel: Rework processes and VFS so we don't expose inodes
Everything is now done through a file descriptor.
This commit is contained in:
@@ -123,15 +123,22 @@ namespace Kernel
|
||||
class Ext2Inode : public Inode
|
||||
{
|
||||
public:
|
||||
virtual ino_t ino() const override { return m_index; };
|
||||
virtual mode_t mode() const override { return m_inode.mode; }
|
||||
virtual nlink_t nlink() const override { return m_inode.links_count; }
|
||||
virtual uid_t uid() const override { return m_inode.uid; }
|
||||
virtual gid_t gid() const override { return m_inode.gid; }
|
||||
virtual size_t size() const override { return m_inode.size; }
|
||||
|
||||
virtual mode_t mode() const override { return m_inode.mode; }
|
||||
virtual off_t size() const override { return m_inode.size; }
|
||||
virtual timespec atime() const override { return timespec { .tv_sec = m_inode.atime, .tv_nsec = 0 }; }
|
||||
virtual timespec mtime() const override { return timespec { .tv_sec = m_inode.mtime, .tv_nsec = 0 }; }
|
||||
virtual timespec ctime() const override { return timespec { .tv_sec = m_inode.ctime, .tv_nsec = 0 }; }
|
||||
virtual blksize_t blksize() const override;
|
||||
virtual blkcnt_t blocks() const override;
|
||||
|
||||
virtual BAN::StringView name() const override { return m_name; }
|
||||
|
||||
virtual BAN::ErrorOr<size_t> read(size_t, void*, size_t) override;
|
||||
virtual BAN::ErrorOr<BAN::Vector<BAN::String>> read_directory_entries_impl(size_t) override;
|
||||
|
||||
virtual BAN::ErrorOr<void> create_file(BAN::StringView, mode_t) override;
|
||||
|
||||
@@ -139,8 +146,7 @@ namespace Kernel
|
||||
virtual bool operator==(const Inode& other) const override;
|
||||
|
||||
protected:
|
||||
virtual BAN::ErrorOr<BAN::Vector<BAN::RefPtr<Inode>>> directory_inodes_impl() override;
|
||||
virtual BAN::ErrorOr<BAN::RefPtr<Inode>> directory_find_impl(BAN::StringView) override;
|
||||
virtual BAN::ErrorOr<BAN::RefPtr<Inode>> read_directory_inode_impl(BAN::StringView) override;
|
||||
|
||||
private:
|
||||
BAN::ErrorOr<uint32_t> data_block_index(uint32_t);
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include <BAN/Vector.h>
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <time.h>
|
||||
|
||||
namespace Kernel
|
||||
{
|
||||
@@ -43,27 +44,32 @@ namespace Kernel
|
||||
bool ifdir() const { return mode() & Mode::IFDIR; }
|
||||
bool ifreg() const { return mode() & Mode::IFREG; }
|
||||
|
||||
virtual ino_t ino() const = 0;
|
||||
virtual mode_t mode() const = 0;
|
||||
virtual nlink_t nlink() const = 0;
|
||||
virtual uid_t uid() const = 0;
|
||||
virtual gid_t gid() const = 0;
|
||||
virtual size_t size() const = 0;
|
||||
|
||||
virtual mode_t mode() const = 0;
|
||||
virtual off_t size() const = 0;
|
||||
virtual timespec atime() const = 0;
|
||||
virtual timespec mtime() const = 0;
|
||||
virtual timespec ctime() const = 0;
|
||||
virtual blksize_t blksize() const = 0;
|
||||
virtual blkcnt_t blocks() const = 0;
|
||||
|
||||
virtual BAN::StringView name() const = 0;
|
||||
|
||||
BAN::ErrorOr<BAN::Vector<BAN::RefPtr<Inode>>> directory_inodes();
|
||||
BAN::ErrorOr<BAN::RefPtr<Inode>> directory_find(BAN::StringView);
|
||||
BAN::ErrorOr<BAN::RefPtr<Inode>> read_directory_inode(BAN::StringView);
|
||||
BAN::ErrorOr<BAN::Vector<BAN::String>> read_directory_entries(size_t);
|
||||
|
||||
virtual BAN::ErrorOr<size_t> read(size_t, void*, size_t) = 0;
|
||||
|
||||
virtual BAN::ErrorOr<void> create_file(BAN::StringView, mode_t) = 0;
|
||||
|
||||
virtual Type type() const = 0;
|
||||
virtual bool operator==(const Inode&) const = 0;
|
||||
|
||||
protected:
|
||||
virtual BAN::ErrorOr<BAN::Vector<BAN::RefPtr<Inode>>> directory_inodes_impl() = 0;
|
||||
virtual BAN::ErrorOr<BAN::RefPtr<Inode>> directory_find_impl(BAN::StringView) = 0;
|
||||
virtual BAN::ErrorOr<BAN::RefPtr<Inode>> read_directory_inode_impl(BAN::StringView) = 0;
|
||||
virtual BAN::ErrorOr<BAN::Vector<BAN::String>> read_directory_entries_impl(size_t) = 0;
|
||||
};
|
||||
|
||||
}
|
||||
@@ -7,6 +7,8 @@
|
||||
#include <kernel/SpinLock.h>
|
||||
#include <kernel/Thread.h>
|
||||
|
||||
#include <sys/stat.h>
|
||||
|
||||
namespace Kernel
|
||||
{
|
||||
|
||||
@@ -32,11 +34,14 @@ namespace Kernel
|
||||
BAN::ErrorOr<size_t> read(int, void*, size_t);
|
||||
BAN::ErrorOr<void> creat(BAN::StringView, mode_t);
|
||||
|
||||
BAN::ErrorOr<void> fstat(int, stat*);
|
||||
BAN::ErrorOr<void> stat(BAN::StringView, stat*);
|
||||
|
||||
BAN::ErrorOr<BAN::Vector<BAN::String>> read_directory_entries(int);
|
||||
|
||||
BAN::String working_directory() const;
|
||||
BAN::ErrorOr<void> set_working_directory(BAN::StringView);
|
||||
|
||||
Inode& inode_for_fd(int);
|
||||
|
||||
static BAN::RefPtr<Process> current() { return Thread::current()->process(); }
|
||||
|
||||
private:
|
||||
@@ -51,8 +56,6 @@ namespace Kernel
|
||||
BAN::String path;
|
||||
size_t offset = 0;
|
||||
uint8_t flags = 0;
|
||||
|
||||
BAN::ErrorOr<size_t> read(void*, size_t);
|
||||
};
|
||||
|
||||
BAN::ErrorOr<void> validate_fd(int);
|
||||
|
||||
Reference in New Issue
Block a user