colla/vfs.h
2024-12-05 18:15:05 +01:00

36 lines
No EOL
1.2 KiB
C

#pragma once
#include "str.h"
#include "arena.h"
typedef enum {
VFS_FLAGS_NONE = 0,
VFS_FLAGS_COMPRESSED = 1 << 0,
VFS_FLAGS_NULL_TERMINATE_FILES = 1 << 1, // only valid when compress is false
VFS_FLAGS_DONT_STREAM = 1 << 2,
} vfsflags_e;
typedef struct virtualfs_t virtualfs_t;
bool vfsVirtualiseDir(arena_t scratch, strview_t dirpath, strview_t outfile, vfsflags_e flags);
virtualfs_t *vfsReadFromFile(arena_t *arena, strview_t vfs_file, vfsflags_e flags);
buffer_t vfsRead(arena_t *arena, virtualfs_t *vfs, strview_t path);
str_t vfsReadStr(arena_t *arena, virtualfs_t *vfs, strview_t path);
// vfs replacement for the file api
typedef struct {
uintptr_t handle;
} vfs_file_t;
void vfsSetGlobalVirtualFS(virtualfs_t *vfs);
bool vfsFileExists(strview_t path);
vfs_file_t vfsFileOpen(strview_t name, int mode);
void vfsFileClose(vfs_file_t ctx);
bool vfsFileIsValid(vfs_file_t ctx);
usize vfsFileSize(vfs_file_t ctx);
buffer_t vfsFileReadWhole(arena_t *arena, strview_t name);
buffer_t vfsFileReadWholeFP(arena_t *arena, vfs_file_t ctx);
str_t vfsFileReadWholeStr(arena_t *arena, strview_t name);
str_t vfsFileReadWholeStrFP(arena_t *arena, vfs_file_t ctx);