feat: vfs - add stat syscall
This commit is contained in:
@@ -18,6 +18,17 @@ namespace Fs::Vfs {
|
||||
uint32_t generation;
|
||||
};
|
||||
|
||||
// Metadata for a single path, filled by FsDriver::Stat. Timestamps are UTC
|
||||
// unix seconds; a filesystem that does not record a given time leaves it 0.
|
||||
struct StatInfo {
|
||||
uint64_t size; // file size in bytes
|
||||
int64_t mtime; // last data modification time
|
||||
int64_t ctime; // last inode (metadata) change time
|
||||
int64_t atime; // last access time
|
||||
uint32_t mode; // ext2/POSIX i_mode bits (type + permissions)
|
||||
bool isDir; // true if the entry is a directory
|
||||
};
|
||||
|
||||
struct FsDriver {
|
||||
int (*Open)(const char* path);
|
||||
int (*Read)(int handle, uint8_t* buffer, uint64_t offset, uint64_t size);
|
||||
@@ -33,6 +44,9 @@ namespace Fs::Vfs {
|
||||
// Optional: paginated directory read returning entries [startIndex, startIndex+maxEntries).
|
||||
// Drivers that leave this null are read via ReadDir at startIndex 0 only.
|
||||
int (*ReadDirAt)(const char* path, const char** outNames, int maxEntries, int startIndex);
|
||||
// Optional: fill metadata for a path. Drivers that leave this null do
|
||||
// not support stat and VfsStat returns -1 for their paths.
|
||||
int (*Stat)(const char* path, StatInfo* out);
|
||||
};
|
||||
|
||||
void Initialize();
|
||||
@@ -51,6 +65,7 @@ namespace Fs::Vfs {
|
||||
void CloseBackendFile(BackendFile& file);
|
||||
|
||||
int VfsDelete(const char* path);
|
||||
int VfsStat(const char* path, StatInfo& out);
|
||||
int VfsReadDir(const char* path, const char** outNames, int maxEntries);
|
||||
int VfsReadDirAt(const char* path, const char** outNames, int maxEntries, int startIndex);
|
||||
int VfsMkdir(const char* path);
|
||||
|
||||
Reference in New Issue
Block a user