Luna/kernel/include/fs/TmpFS.h

59 lines
1.3 KiB
C++

#pragma once
#include "fs/VFS.h"
namespace TmpFSImpl
{
ssize_t read(VFS::Node* node, size_t offset, size_t size, char* buffer);
ssize_t write(VFS::Node* node, size_t offset, size_t size, char* buffer);
VFS::Node* find(VFS::Node* node, const char* filename);
VFS::Node* readdir(VFS::Node* node, long index);
int mkdir(VFS::Node* node, const char* filename, mode_t mode);
}
class TmpFS
{
public:
VFS::Node* root()
{
return m_root;
}
static TmpFS* create(const char* name);
static void release(TmpFS* fs);
ssize_t read(VFS::Node* node, size_t offset, size_t size, char* buffer);
ssize_t write(VFS::Node* node, size_t offset, size_t size, char* buffer);
VFS::Node* find(VFS::Node* node, const char* filename);
VFS::Node* readdir(VFS::Node* node, long index);
int mkdir(VFS::Node* node, const char* filename, mode_t mode);
void purge();
private:
struct File
{
char* buf;
size_t len;
int valid;
};
struct Directory
{
VFS::Node* buf;
size_t len;
int valid;
};
template <typename T> struct Array
{
T* buf;
size_t len;
};
TmpFS(const char* name);
Array<File> m_files;
Array<Directory> m_dirs;
VFS::Node* m_root;
};