Espresso 0.0.1b
This commit is contained in:
		| @ -3,6 +3,52 @@ | ||||
|  | ||||
| #include <types.h> | ||||
|  | ||||
| void duckfs_init(void); | ||||
| #define DUCKFS_MAGIC "DUCKFS1" | ||||
| #define DUCKFS_NAME_LEN 32 | ||||
|  | ||||
| typedef enum { DUCKFS_TYPE_FILE = 0, DUCKFS_TYPE_DIR = 1, DUCKFS_TYPE_SYMLINK = 2 } duckfs_type_t; | ||||
|  | ||||
| typedef struct { | ||||
|     char name[DUCKFS_NAME_LEN]; | ||||
|     duckfs_type_t type; | ||||
|     uint8_t permissions;      /* rwxrwxrwx packed into 9 bits  */ | ||||
|     uint16_t uid; | ||||
|     uint16_t gid; | ||||
|     uint64_t size; | ||||
|     uint64_t created; | ||||
|     uint64_t modified; | ||||
|     uint64_t first_block_lba; | ||||
|     uint64_t next_file_lba; | ||||
|     uint64_t child_lba;       /* only for directories */ | ||||
| } __attribute__((packed)) duckfs_file_header_t; | ||||
|  | ||||
| typedef struct { | ||||
|     char magic[8];            /* "DUCKFS1\0" */ | ||||
|     uint32_t block_size; | ||||
|     uint64_t total_blocks; | ||||
|     uint64_t root_header_lba; | ||||
|     uint64_t free_list_lba; | ||||
|     uint32_t fs_version; | ||||
| } __attribute__((packed)) duckfs_superblock_t; | ||||
|  | ||||
| struct free_block { | ||||
|     uint64_t next; | ||||
| }; | ||||
|  | ||||
| /* DuckFS API  */ | ||||
| int32_t duckfs_mount(void); | ||||
|  | ||||
| int32_t duckfs_find(const char* path, duckfs_file_header_t* out); | ||||
|  | ||||
| int32_t duckfs_create_file(const char* name, const void* content, size_t size, uint16_t uid, uint16_t gid, uint8_t perms, duckfs_file_header_t* parent_dir); | ||||
| int32_t duckfs_create_dir(const char* name, uint16_t uid, uint16_t gid, uint8_t perms, duckfs_file_header_t* parent_dir); | ||||
| int32_t duckfs_delete_file(const char* name, duckfs_file_header_t* parent_dir); | ||||
| int32_t duckfs_delete_dir(const char* name, duckfs_file_header_t* parent_dir); | ||||
|  | ||||
| int32_t duckfs_read_file(const duckfs_file_header_t* file, void* buffer, size_t size); | ||||
| int32_t duckfs_write_data(duckfs_file_header_t* file, const void* data, size_t offset, size_t length); | ||||
| int32_t duckfs_append_data(duckfs_file_header_t* file, const void* data, size_t length); | ||||
|  | ||||
| int32_t duckfs_truncate(duckfs_file_header_t* file, size_t new_size); | ||||
|  | ||||
| #endif | ||||
|  | ||||
							
								
								
									
										38
									
								
								include/fs/fat16.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								include/fs/fat16.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,38 @@ | ||||
| #ifndef _FAT16_H | ||||
| #define _FAT16_H | ||||
|  | ||||
| #include <types.h> | ||||
|  | ||||
| #define FAT16_MAX_FILENAME  256 | ||||
| #define FAT16_ATTR_DIRECTORY 0x10 | ||||
|  | ||||
| typedef struct { | ||||
|     uint8_t drive; | ||||
|     uint32_t fat_start; | ||||
|     uint32_t root_dir_start; | ||||
|     uint32_t data_start; | ||||
|     uint16_t bytes_per_sector; | ||||
|     uint8_t sectors_per_cluster; | ||||
|     uint16_t root_entry_count; | ||||
|     uint32_t current_dir_cluster; | ||||
| } fat16_t; | ||||
|  | ||||
| typedef struct { | ||||
|     char name[FAT16_MAX_FILENAME]; | ||||
|     uint8_t attr; | ||||
|     uint32_t cluster; | ||||
|     uint32_t size; | ||||
| } fat16_dir_entry_t; | ||||
|  | ||||
| int32_t fat16_init(uint8_t drive); | ||||
|  | ||||
| uint32_t cluster_to_lba(uint16_t cluster); | ||||
| uint16_t fat16_get_fat_entry(uint16_t cluster); | ||||
| uint16_t fat16_alloc_cluster(void); | ||||
|  | ||||
| int32_t fat16_list_dir(fat16_dir_entry_t* entries, size_t max_entries); | ||||
| int32_t fat16_change_dir(const char* dirname); | ||||
| int32_t fat16_read_file(const char* filename, void* buffer, size_t max_size); | ||||
| int32_t fat16_write_file(const char* filename, const void* data, size_t size); | ||||
|  | ||||
| #endif | ||||
| @ -8,10 +8,15 @@ | ||||
|  | ||||
| int32_t fat32_init(int32_t drive); /* 0 = primary master */ | ||||
| int32_t fat32_list_root(void); | ||||
|  | ||||
| int32_t fat32_read_file(const char *name, uint8_t *buffer, uint32_t max_len); | ||||
| int32_t fat32_write_file(const char *name, const uint8_t *buffer, uint32_t len); | ||||
|  | ||||
| int32_t fat32_create_file(const char *name); | ||||
| int32_t fat32_create_directory(const char *name); | ||||
|  | ||||
| int32_t fat32_change_directory(const char *name); | ||||
|  | ||||
| void format_83_name(const char* input, char* output); | ||||
|  | ||||
| #endif | ||||
|  | ||||
| @ -5,16 +5,6 @@ | ||||
|  | ||||
| typedef int32_t FILE; | ||||
|  | ||||
| void vfs_init(void); | ||||
|  | ||||
| FILE create_file(char* filename, char type, char encryption, FILE parent); | ||||
| int32_t delete_file(FILE file); | ||||
|  | ||||
| FILE open_file(char* filename); | ||||
|  | ||||
| FILE write_file(FILE file, void* data, size_t len); | ||||
| int32_t read_file(FILE file, void* buf, size_t buflen); | ||||
|  | ||||
| int32_t reset_read_offset(FILE file); | ||||
|  | ||||
| #endif | ||||
|  | ||||
		Reference in New Issue
	
	Block a user