kernel/inc/drivers/fs/vfs.h

79 lines
2.4 KiB
C

// This file is part of noxos and licensed under the MIT open source license
#ifndef NOX_VFS_H
#define NOX_VFS_H
#include "utils/stdtypes.h"
#include "utils/string.h"
#include "boot/boot_info.h"
#define VFS_MAX_NAME_LENGTH 128
typedef struct vfs_node_T vfs_node_T;
typedef enum {
FS_RAMFS,
FS_ENUM_END
} fs_type_E;
typedef enum {
VFS_NODE_DIRECTORY,
VFS_NODE_FILE,
VFS_NODE_MOUNT,
VFS_NODE_BLOCK_DEVICE,
VFS_NODE_ENUM_END
} vfs_node_type_E;
typedef struct {
fs_type_E type;
vfs_node_T* root_node;
} fs_T;
typedef struct {
void* buffer;
uint64_t buffer_size;
bool reclaimable;
vfs_node_T* node;
} vfs_node_cache_T;
struct vfs_node_T{
char name[VFS_MAX_NAME_LENGTH];
vfs_node_type_E type;
vfs_node_cache_T* cache;
uint64_t size;
void* specific;
fs_T* filesystem;
vfs_node_T* prev;
vfs_node_T* next;
vfs_node_T* parent;
vfs_node_T* childs;
};
extern fs_T g_root_fs;
vfs_node_cache_T* vfs_node_cache_create (vfs_node_T* node, uint64_t size);
void vfs_node_cache_destruct (vfs_node_cache_T* node_cache);
vfs_node_T* vfs_node_create (vfs_node_T* parent, string_t name, vfs_node_type_E type, void* specific);
void vfs_node_destruct (vfs_node_T* node);
void vfs_node_delete (vfs_node_T* node);
void vfs_node_dump_info (vfs_node_T* node, uint64_t indent);
vfs_node_T* vfs_node_resolve_child (vfs_node_T* node, string_t child_name);
vfs_node_T* vfs_file_create (fs_T* filesystem, string_t path);
void vfs_file_delete (vfs_node_T* file);
uint64_t vfs_file_write (vfs_node_T* file, uint64_t position, uint64_t size, uint8_t* buffer_in);
uint64_t vfs_file_read (vfs_node_T* file, uint64_t position, uint64_t size, uint8_t* buffer_out);
vfs_node_T* vfs_directory_create (fs_T* filesystem, string_t path);
void vfs_directory_delete (vfs_node_T* directory);
void vfs_init (boot_info_T* boot_info);
vfs_node_T* vfs_resolve_path (fs_T* filesystem, string_t path);
void vfs_unpack_archive_ustar (fs_T* filesystem, void* archive);
#endif //NOX_VFS_H