2022-10-30 20:30:49 +00:00
|
|
|
#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);
|
2022-10-31 08:53:37 +00:00
|
|
|
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);
|
2022-10-30 20:30:49 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
2022-10-31 08:53:37 +00:00
|
|
|
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);
|
|
|
|
|
2022-10-30 20:30:49 +00:00
|
|
|
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;
|
|
|
|
};
|