2023-02-03 22:18:52 +01:00
|
|
|
#pragma once
|
|
|
|
#include "fs/VFS.h"
|
2023-03-18 09:10:33 +01:00
|
|
|
#include "fs/devices/DeviceRegistry.h"
|
2023-02-25 18:06:23 +01:00
|
|
|
#include <luna/Atomic.h>
|
2023-02-03 22:18:52 +01:00
|
|
|
|
|
|
|
namespace TmpFS
|
|
|
|
{
|
|
|
|
class FileSystem : public VFS::FileSystem
|
|
|
|
{
|
|
|
|
public:
|
2023-03-10 22:18:48 +01:00
|
|
|
SharedPtr<VFS::Inode> root_inode() const override
|
2023-02-03 22:18:52 +01:00
|
|
|
{
|
2023-03-10 22:18:48 +01:00
|
|
|
return m_root_inode;
|
2023-02-03 22:18:52 +01:00
|
|
|
}
|
|
|
|
|
2023-02-25 18:03:11 +01:00
|
|
|
Result<SharedPtr<VFS::Inode>> create_file_inode() override;
|
2023-02-27 15:04:29 +01:00
|
|
|
Result<SharedPtr<VFS::Inode>> create_dir_inode(SharedPtr<VFS::Inode> parent) override;
|
2023-03-18 09:10:33 +01:00
|
|
|
Result<SharedPtr<VFS::Inode>> create_device_inode(u32 major, u32 minor) override;
|
2023-05-20 21:46:31 +02:00
|
|
|
Result<SharedPtr<VFS::Inode>> create_symlink_inode(StringView link) override;
|
2023-02-25 18:03:11 +01:00
|
|
|
|
2023-05-17 19:40:37 +02:00
|
|
|
Result<void> set_mount_dir(SharedPtr<VFS::Inode> parent) override;
|
|
|
|
|
2023-02-03 22:18:52 +01:00
|
|
|
static Result<SharedPtr<VFS::FileSystem>> create();
|
|
|
|
|
2023-05-23 20:45:24 +02:00
|
|
|
dev_t host_device_id() const override
|
|
|
|
{
|
|
|
|
return m_host_device_id;
|
|
|
|
}
|
|
|
|
|
2023-02-03 22:18:52 +01:00
|
|
|
virtual ~FileSystem() = default;
|
|
|
|
|
|
|
|
private:
|
2023-05-23 20:45:24 +02:00
|
|
|
FileSystem();
|
2023-02-03 22:18:52 +01:00
|
|
|
|
2023-02-25 18:03:11 +01:00
|
|
|
void set_root(SharedPtr<VFS::Inode> root);
|
2023-02-03 22:18:52 +01:00
|
|
|
|
|
|
|
SharedPtr<VFS::Inode> m_root_inode;
|
2023-02-25 18:03:11 +01:00
|
|
|
|
2023-02-25 18:06:23 +01:00
|
|
|
Atomic<usize> m_next_inode_number { 2 };
|
2023-05-23 20:45:24 +02:00
|
|
|
|
|
|
|
dev_t m_host_device_id;
|
2023-02-03 22:18:52 +01:00
|
|
|
};
|
|
|
|
}
|