@@ -677,6 +677,12 @@ static int lfs_dir_commit(lfs_t *lfs, lfs_dir_t *dir,
677
677
return 0 ;
678
678
}
679
679
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
+
680
686
static int lfs_dir_append (lfs_t * lfs , lfs_dir_t * dir ,
681
687
lfs_entry_t * entry , struct lfs_region * regions ) {
682
688
// 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) {
876
882
dir -> pos += sizeof (dir -> d ) + 4 ;
877
883
}
878
884
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 ));
881
886
lfs_entry_fromle32 (& entry -> d );
882
887
if (err ) {
883
888
return err ;
@@ -1167,7 +1172,7 @@ int lfs_dir_read(lfs_t *lfs, lfs_dir_t *dir, struct lfs_info *info) {
1167
1172
info -> size = entry .d .elen ;
1168
1173
}
1169
1174
1170
- int err = lfs_bd_read (lfs , dir -> pair [ 0 ] ,
1175
+ int err = lfs_dir_get (lfs , dir ,
1171
1176
entry .off + entry .size - entry .d .nlen ,
1172
1177
info -> name , entry .d .nlen );
1173
1178
if (err ) {
@@ -1502,7 +1507,7 @@ int lfs_file_open(lfs_t *lfs, lfs_file_t *file,
1502
1507
file -> flags |= LFS_F_INLINE ;
1503
1508
file -> cache .block = file -> head ;
1504
1509
file -> cache .off = 0 ;
1505
- err = lfs_bd_read (lfs , cwd . pair [ 0 ] ,
1510
+ err = lfs_dir_get (lfs , & cwd ,
1506
1511
entry .off + 4 ,
1507
1512
file -> cache .buffer , file -> size );
1508
1513
if (err ) {
@@ -1679,8 +1684,8 @@ int lfs_file_sync(lfs_t *lfs, lfs_file_t *file) {
1679
1684
1680
1685
// TODO entry read function?
1681
1686
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 ));
1684
1689
lfs_entry_fromle32 (& entry .d );
1685
1690
if (err ) {
1686
1691
return err ;
@@ -2047,7 +2052,7 @@ int lfs_stat(lfs_t *lfs, const char *path, struct lfs_info *info) {
2047
2052
if (lfs_paircmp (entry .d .u .dir , lfs -> root ) == 0 ) {
2048
2053
strcpy (info -> name , "/" );
2049
2054
} else {
2050
- err = lfs_bd_read (lfs , cwd . pair [ 0 ] ,
2055
+ err = lfs_dir_get (lfs , & cwd ,
2051
2056
entry .off + entry .size - entry .d .nlen ,
2052
2057
info -> name , entry .d .nlen );
2053
2058
if (err ) {
@@ -2439,14 +2444,14 @@ int lfs_mount(lfs_t *lfs, const struct lfs_config *cfg) {
2439
2444
}
2440
2445
2441
2446
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 ));
2444
2449
lfs_superblock_fromle32 (& superblock .d );
2445
2450
if (err ) {
2446
2451
return err ;
2447
2452
}
2448
2453
2449
- err = lfs_bd_read (lfs , dir . pair [ 0 ] ,
2454
+ err = lfs_dir_get (lfs , & dir ,
2450
2455
sizeof (dir .d ) + 4 + sizeof (superblock .d ),
2451
2456
magic , sizeof (magic ));
2452
2457
if (err ) {
@@ -2504,8 +2509,8 @@ int lfs_traverse(lfs_t *lfs, int (*cb)(void*, lfs_block_t), void *data) {
2504
2509
// iterate over contents
2505
2510
lfs_entry_t entry ;
2506
2511
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 ));
2509
2514
lfs_entry_fromle32 (& entry .d );
2510
2515
if (err ) {
2511
2516
return err ;
0 commit comments