Added limited support for directories

This comes with a lot of scafolding put into place around the core
of the filesystem.

Added operations:
- append an entry to a directory
- find an entry in a directory
- iterate over entries in a directory

Some to do:
- Chaining multiple directory blocks
- Recursion on directory operations
This commit is contained in:
Christopher Haster
2017-03-12 18:41:08 -06:00
parent 106b06a457
commit 53674cb3bc
2 changed files with 261 additions and 63 deletions

35
lfs.h
View File

@@ -13,8 +13,17 @@
// Data structures
enum lfs_error {
LFS_ERROR_OK = 0,
LFS_ERROR_CORRUPT = -3,
LFS_ERROR_OK = 0,
LFS_ERROR_CORRUPT = -3,
LFS_ERROR_NO_ENTRY = -4,
LFS_ERROR_EXISTS = -5,
LFS_ERROR_NOT_DIR = -6,
LFS_ERROR_INVALID = -7,
};
enum lfs_type {
LFS_TYPE_REG = 1,
LFS_TYPE_DIR = 2,
};
typedef struct lfs_free {
@@ -28,11 +37,12 @@ typedef struct lfs_free {
typedef struct lfs_dir {
lfs_ino_t pair[2];
lfs_off_t i;
lfs_disk_struct lfs_disk_dir {
lfs_word_t rev;
lfs_size_t size;
lfs_ino_t tail[2];
lfs_ino_t parent[2];
struct lfs_disk_free free;
} d;
@@ -49,20 +59,9 @@ typedef struct lfs_entry {
lfs_disk_struct {
lfs_ino_t head;
lfs_size_t size;
char name[LFS_NAME_MAX];
} file;
lfs_disk_struct {
lfs_ino_t dir[2];
char name[LFS_NAME_MAX];
} dir;
lfs_disk_struct {
char magic[4];
uint32_t read_size;
uint32_t write_size;
uint32_t erase_size;
uint32_t erase_count;
} superblock;
} value;
lfs_ino_t dir[2];
} u;
} d;
} lfs_entry_t;
@@ -83,6 +82,7 @@ typedef struct lfs {
lfs_bd_t *bd;
const struct lfs_bd_ops *ops;
lfs_ino_t cwd[2];
lfs_free_t free;
struct lfs_bd_info info;
} lfs_t;
@@ -92,4 +92,7 @@ lfs_error_t lfs_create(lfs_t *lfs, lfs_bd_t *bd, const struct lfs_bd_ops *bd_ops
lfs_error_t lfs_format(lfs_t *lfs);
lfs_error_t lfs_mount(lfs_t *lfs);
lfs_error_t lfs_mkdir(lfs_t *lfs, const char *path);
#endif