mirror of
https://github.com/eledio-devices/thirdparty-littlefs.git
synced 2025-11-01 00:38:29 +01:00
WIP Added lfs_dir_get
This commit is contained in:
29
lfs.c
29
lfs.c
@@ -677,6 +677,12 @@ relocate:
|
||||
return 0;
|
||||
}
|
||||
|
||||
// TODO zeros?
|
||||
static int lfs_dir_get(lfs_t *lfs, const lfs_dir_t *dir,
|
||||
lfs_off_t off, void *buffer, lfs_size_t size) {
|
||||
return lfs_bd_read(lfs, dir->pair[0], off, buffer, size);
|
||||
}
|
||||
|
||||
static int lfs_dir_append(lfs_t *lfs, lfs_dir_t *dir,
|
||||
lfs_entry_t *entry, struct lfs_region *regions) {
|
||||
// check if we fit, if top bit is set we do not and move on
|
||||
@@ -876,8 +882,7 @@ static int lfs_dir_next(lfs_t *lfs, lfs_dir_t *dir, lfs_entry_t *entry) {
|
||||
dir->pos += sizeof(dir->d) + 4;
|
||||
}
|
||||
|
||||
int err = lfs_bd_read(lfs, dir->pair[0], dir->off,
|
||||
&entry->d, sizeof(entry->d));
|
||||
int err = lfs_dir_get(lfs, dir, dir->off, &entry->d, sizeof(entry->d));
|
||||
lfs_entry_fromle32(&entry->d);
|
||||
if (err) {
|
||||
return err;
|
||||
@@ -1167,7 +1172,7 @@ int lfs_dir_read(lfs_t *lfs, lfs_dir_t *dir, struct lfs_info *info) {
|
||||
info->size = entry.d.elen;
|
||||
}
|
||||
|
||||
int err = lfs_bd_read(lfs, dir->pair[0],
|
||||
int err = lfs_dir_get(lfs, dir,
|
||||
entry.off + entry.size - entry.d.nlen,
|
||||
info->name, entry.d.nlen);
|
||||
if (err) {
|
||||
@@ -1502,7 +1507,7 @@ int lfs_file_open(lfs_t *lfs, lfs_file_t *file,
|
||||
file->flags |= LFS_F_INLINE;
|
||||
file->cache.block = file->head;
|
||||
file->cache.off = 0;
|
||||
err = lfs_bd_read(lfs, cwd.pair[0],
|
||||
err = lfs_dir_get(lfs, &cwd,
|
||||
entry.off + 4,
|
||||
file->cache.buffer, file->size);
|
||||
if (err) {
|
||||
@@ -1679,8 +1684,8 @@ int lfs_file_sync(lfs_t *lfs, lfs_file_t *file) {
|
||||
|
||||
// TODO entry read function?
|
||||
lfs_entry_t entry = {.off = file->poff};
|
||||
err = lfs_bd_read(lfs, cwd.pair[0], entry.off,
|
||||
&entry.d, sizeof(entry.d));
|
||||
err = lfs_dir_get(lfs, &cwd,
|
||||
entry.off, &entry.d, sizeof(entry.d));
|
||||
lfs_entry_fromle32(&entry.d);
|
||||
if (err) {
|
||||
return err;
|
||||
@@ -2047,7 +2052,7 @@ int lfs_stat(lfs_t *lfs, const char *path, struct lfs_info *info) {
|
||||
if (lfs_paircmp(entry.d.u.dir, lfs->root) == 0) {
|
||||
strcpy(info->name, "/");
|
||||
} else {
|
||||
err = lfs_bd_read(lfs, cwd.pair[0],
|
||||
err = lfs_dir_get(lfs, &cwd,
|
||||
entry.off + entry.size - entry.d.nlen,
|
||||
info->name, entry.d.nlen);
|
||||
if (err) {
|
||||
@@ -2439,14 +2444,14 @@ int lfs_mount(lfs_t *lfs, const struct lfs_config *cfg) {
|
||||
}
|
||||
|
||||
if (!err) {
|
||||
err = lfs_bd_read(lfs, dir.pair[0], sizeof(dir.d)+4,
|
||||
&superblock.d, sizeof(superblock.d));
|
||||
err = lfs_dir_get(lfs, &dir,
|
||||
sizeof(dir.d)+4, &superblock.d, sizeof(superblock.d));
|
||||
lfs_superblock_fromle32(&superblock.d);
|
||||
if (err) {
|
||||
return err;
|
||||
}
|
||||
|
||||
err = lfs_bd_read(lfs, dir.pair[0],
|
||||
err = lfs_dir_get(lfs, &dir,
|
||||
sizeof(dir.d) + 4 + sizeof(superblock.d),
|
||||
magic, sizeof(magic));
|
||||
if (err) {
|
||||
@@ -2504,8 +2509,8 @@ int lfs_traverse(lfs_t *lfs, int (*cb)(void*, lfs_block_t), void *data) {
|
||||
// iterate over contents
|
||||
lfs_entry_t entry;
|
||||
while (dir.off + sizeof(entry.d) <= (0x7fffffff & dir.d.size)-4) {
|
||||
err = lfs_bd_read(lfs, dir.pair[0], dir.off,
|
||||
&entry.d, sizeof(entry.d));
|
||||
err = lfs_dir_get(lfs, &dir,
|
||||
dir.off, &entry.d, sizeof(entry.d));
|
||||
lfs_entry_fromle32(&entry.d);
|
||||
if (err) {
|
||||
return err;
|
||||
|
||||
Reference in New Issue
Block a user