Skip to content

Commit ad74825

Browse files
committed
Added internal lfs_dir_get to consolidate logic for reading dir entries
It's a relatively simple function but offers some code reuse as well as making the dir entry operations a bit more readable.
1 parent d0e0453 commit ad74825

File tree

1 file changed

+17
-12
lines changed

1 file changed

+17
-12
lines changed

lfs.c

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -677,6 +677,12 @@ static int lfs_dir_commit(lfs_t *lfs, lfs_dir_t *dir,
677677
return 0;
678678
}
679679

680+
// TODO zeros?
681+
static int lfs_dir_get(lfs_t *lfs, const lfs_dir_t *dir,
682+
lfs_off_t off, void *buffer, lfs_size_t size) {
683+
return lfs_bd_read(lfs, dir->pair[0], off, buffer, size);
684+
}
685+
680686
static int lfs_dir_append(lfs_t *lfs, lfs_dir_t *dir,
681687
lfs_entry_t *entry, struct lfs_region *regions) {
682688
// 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) {
876882
dir->pos += sizeof(dir->d) + 4;
877883
}
878884

879-
int err = lfs_bd_read(lfs, dir->pair[0], dir->off,
880-
&entry->d, sizeof(entry->d));
885+
int err = lfs_dir_get(lfs, dir, dir->off, &entry->d, sizeof(entry->d));
881886
lfs_entry_fromle32(&entry->d);
882887
if (err) {
883888
return err;
@@ -1167,7 +1172,7 @@ int lfs_dir_read(lfs_t *lfs, lfs_dir_t *dir, struct lfs_info *info) {
11671172
info->size = entry.d.elen;
11681173
}
11691174

1170-
int err = lfs_bd_read(lfs, dir->pair[0],
1175+
int err = lfs_dir_get(lfs, dir,
11711176
entry.off + entry.size - entry.d.nlen,
11721177
info->name, entry.d.nlen);
11731178
if (err) {
@@ -1502,7 +1507,7 @@ int lfs_file_open(lfs_t *lfs, lfs_file_t *file,
15021507
file->flags |= LFS_F_INLINE;
15031508
file->cache.block = file->head;
15041509
file->cache.off = 0;
1505-
err = lfs_bd_read(lfs, cwd.pair[0],
1510+
err = lfs_dir_get(lfs, &cwd,
15061511
entry.off + 4,
15071512
file->cache.buffer, file->size);
15081513
if (err) {
@@ -1679,8 +1684,8 @@ int lfs_file_sync(lfs_t *lfs, lfs_file_t *file) {
16791684

16801685
// TODO entry read function?
16811686
lfs_entry_t entry = {.off = file->poff};
1682-
err = lfs_bd_read(lfs, cwd.pair[0], entry.off,
1683-
&entry.d, sizeof(entry.d));
1687+
err = lfs_dir_get(lfs, &cwd,
1688+
entry.off, &entry.d, sizeof(entry.d));
16841689
lfs_entry_fromle32(&entry.d);
16851690
if (err) {
16861691
return err;
@@ -2047,7 +2052,7 @@ int lfs_stat(lfs_t *lfs, const char *path, struct lfs_info *info) {
20472052
if (lfs_paircmp(entry.d.u.dir, lfs->root) == 0) {
20482053
strcpy(info->name, "/");
20492054
} else {
2050-
err = lfs_bd_read(lfs, cwd.pair[0],
2055+
err = lfs_dir_get(lfs, &cwd,
20512056
entry.off + entry.size - entry.d.nlen,
20522057
info->name, entry.d.nlen);
20532058
if (err) {
@@ -2439,14 +2444,14 @@ int lfs_mount(lfs_t *lfs, const struct lfs_config *cfg) {
24392444
}
24402445

24412446
if (!err) {
2442-
err = lfs_bd_read(lfs, dir.pair[0], sizeof(dir.d)+4,
2443-
&superblock.d, sizeof(superblock.d));
2447+
err = lfs_dir_get(lfs, &dir,
2448+
sizeof(dir.d)+4, &superblock.d, sizeof(superblock.d));
24442449
lfs_superblock_fromle32(&superblock.d);
24452450
if (err) {
24462451
return err;
24472452
}
24482453

2449-
err = lfs_bd_read(lfs, dir.pair[0],
2454+
err = lfs_dir_get(lfs, &dir,
24502455
sizeof(dir.d) + 4 + sizeof(superblock.d),
24512456
magic, sizeof(magic));
24522457
if (err) {
@@ -2504,8 +2509,8 @@ int lfs_traverse(lfs_t *lfs, int (*cb)(void*, lfs_block_t), void *data) {
25042509
// iterate over contents
25052510
lfs_entry_t entry;
25062511
while (dir.off + sizeof(entry.d) <= (0x7fffffff & dir.d.size)-4) {
2507-
err = lfs_bd_read(lfs, dir.pair[0], dir.off,
2508-
&entry.d, sizeof(entry.d));
2512+
err = lfs_dir_get(lfs, &dir,
2513+
dir.off, &entry.d, sizeof(entry.d));
25092514
lfs_entry_fromle32(&entry.d);
25102515
if (err) {
25112516
return err;

0 commit comments

Comments
 (0)