2023-06-21 21:32:28 +02:00
|
|
|
#pragma once
|
|
|
|
#include "fs/ext2/FileSystem.h"
|
|
|
|
|
|
|
|
#define EXT2_FIFO 0x1000
|
|
|
|
#define EXT2_CHR 0x2000
|
|
|
|
#define EXT2_DIR 0x4000
|
|
|
|
#define EXT2_BLK 0x6000
|
|
|
|
#define EXT2_REG 0x8000
|
|
|
|
#define EXT2_LNK 0xA000
|
|
|
|
#define EXT2_SOCK 0xC000
|
|
|
|
|
|
|
|
namespace Ext2
|
|
|
|
{
|
|
|
|
class Inode : public VFS::FileInode
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
VFS::InodeType type() const override
|
|
|
|
{
|
|
|
|
return m_type;
|
|
|
|
}
|
|
|
|
|
|
|
|
usize size() const override
|
|
|
|
{
|
|
|
|
// FIXME: If EXT2_REVISION >= 1.0, use size_high as well.
|
|
|
|
return m_raw_inode.size_low;
|
|
|
|
}
|
|
|
|
|
|
|
|
mode_t mode() const override
|
|
|
|
{
|
|
|
|
return m_raw_inode.mode & 07777;
|
|
|
|
}
|
|
|
|
|
|
|
|
nlink_t nlinks() const override
|
|
|
|
{
|
|
|
|
return m_raw_inode.nlinks;
|
|
|
|
}
|
|
|
|
|
|
|
|
u32 uid() const override
|
|
|
|
{
|
|
|
|
return m_raw_inode.uid;
|
|
|
|
}
|
|
|
|
|
|
|
|
u32 gid() const override
|
|
|
|
{
|
|
|
|
return m_raw_inode.gid;
|
|
|
|
}
|
|
|
|
|
|
|
|
usize inode_number() const override
|
|
|
|
{
|
|
|
|
return m_inum;
|
|
|
|
}
|
|
|
|
|
|
|
|
VFS::FileSystem* fs() const override
|
|
|
|
{
|
|
|
|
return m_fs;
|
|
|
|
}
|
|
|
|
|
|
|
|
void did_link() override
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void did_unlink() override
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
Result<void> chmod(mode_t) override
|
|
|
|
{
|
|
|
|
return err(EROFS);
|
|
|
|
}
|
|
|
|
|
|
|
|
Result<void> chown(u32, u32) override
|
|
|
|
{
|
|
|
|
return err(EROFS);
|
|
|
|
}
|
|
|
|
|
|
|
|
Result<usize> read(u8* buf, usize offset, usize length) const override;
|
|
|
|
|
|
|
|
Result<usize> write(const u8*, usize, usize) override
|
|
|
|
{
|
|
|
|
return err(EROFS);
|
|
|
|
}
|
|
|
|
|
|
|
|
Result<void> truncate(usize) override
|
|
|
|
{
|
|
|
|
return err(EROFS);
|
|
|
|
}
|
|
|
|
|
|
|
|
Inode(Badge<FileSystem>, FileSystem* fs);
|
|
|
|
virtual ~Inode() = default;
|
|
|
|
|
|
|
|
private:
|
|
|
|
VFS::InodeType m_type;
|
|
|
|
RawInode m_raw_inode;
|
|
|
|
FileSystem* m_fs;
|
|
|
|
ino_t m_inum;
|
|
|
|
|
2023-06-22 16:34:22 +02:00
|
|
|
usize find_block(usize index) const;
|
|
|
|
|
2023-06-21 21:32:28 +02:00
|
|
|
friend class FileSystem;
|
|
|
|
};
|
|
|
|
}
|