#ifndef _RAM_FS_H #define _RAM_FS_H #include #define RAMFS_FILENAME_LEN 32 #define RAMFS_PERM_READ 0x01 #define RAMFS_PERM_WRITE 0x02 #define RAMFS_PERM_EXEC 0x04 #define RAMFS_PERM_ALL (RAMFS_PERM_READ | RAMFS_PERM_WRITE | RAMFS_PERM_EXEC) #define RAMFS_FILE_DIR 'd' #define RAMFS_FILE_TEXT 't' #define RAMFS_FILE_BINARY 'b' #define RAMFS_FILE_LINK 'l' #define RAMFS_FILE_NOFILE 'n' #define RAMFS_ENCR_NONE 'n' #define RAMFS_ENCR_SIMPLE 's' typedef struct ramfs_file_header { char filename[RAMFS_FILENAME_LEN + 1]; char type; char encryption; struct ramfs_file_header* content; struct ramfs_file_header* parent; struct ramfs_file_header* next; struct ramfs_file_header* link_target; void* data_begin; void* data_end; int32_t read_offset; int32_t fd; } ramfs_file_header_t; void ramfs_init(void); ramfs_file_header_t* ramfs_make_root(void); ramfs_file_header_t* ramfs_get_root(void); int32_t ramfs_get_files(void); bool ramfs_get_initialized(void); ramfs_file_header_t* ramfs_resolve_path(const char* path); ramfs_file_header_t* ramfs_resolve_fd_dir(ramfs_file_header_t* current, int32_t fd); ramfs_file_header_t* ramfs_resolve_fd(int32_t fd); ramfs_file_header_t* ramfs_create_file(char* name, char type, char encryption, ramfs_file_header_t* parent); int32_t ramfs_delete_file(ramfs_file_header_t* file); ramfs_file_header_t* ramfs_write_file(ramfs_file_header_t* file, void* data, size_t len); int32_t ramfs_read_file(ramfs_file_header_t* file, void* buffer, size_t buffer_len); #endif