@@ -560,20 +560,20 @@ static int lfs_dir_update(lfs_t *lfs, lfs_dir_t *dir,
560
560
const lfs_entry_t * entry , const void * data ) {
561
561
return lfs_dir_commit (lfs , dir , (struct lfs_region []){
562
562
{entry -> off , sizeof (entry -> d ), & entry -> d , sizeof (entry -> d )},
563
- {entry -> off + sizeof (entry -> d ), entry -> d .len - sizeof (entry -> d ),
564
- data , entry -> d .len - sizeof (entry -> d )}
563
+ {entry -> off + sizeof (entry -> d ), entry -> d .nlen , data , entry -> d .nlen }
565
564
}, data ? 2 : 1 );
566
565
}
567
566
568
567
static int lfs_dir_append (lfs_t * lfs , lfs_dir_t * dir ,
569
568
lfs_entry_t * entry , const void * data ) {
570
569
// check if we fit, if top bit is set we do not and move on
571
570
while (true) {
572
- if (dir -> d .size + entry -> d .len <= lfs -> cfg -> block_size ) {
571
+ if (dir -> d .size + 4 + entry -> d .elen + entry -> d .alen + entry -> d .nlen
572
+ <= lfs -> cfg -> block_size ) {
573
573
entry -> off = dir -> d .size - 4 ;
574
574
return lfs_dir_commit (lfs , dir , (struct lfs_region []){
575
575
{entry -> off , 0 , & entry -> d , sizeof (entry -> d )},
576
- {entry -> off , 0 , data , entry -> d .len - sizeof ( entry -> d ) }
576
+ {entry -> off , 0 , data , entry -> d .nlen }
577
577
}, 2 );
578
578
}
579
579
@@ -590,7 +590,7 @@ static int lfs_dir_append(lfs_t *lfs, lfs_dir_t *dir,
590
590
entry -> off = newdir .d .size - 4 ;
591
591
err = lfs_dir_commit (lfs , & newdir , (struct lfs_region []){
592
592
{entry -> off , 0 , & entry -> d , sizeof (entry -> d )},
593
- {entry -> off , 0 , data , entry -> d .len - sizeof ( entry -> d ) }
593
+ {entry -> off , 0 , data , entry -> d .nlen }
594
594
}, 2 );
595
595
if (err ) {
596
596
return err ;
@@ -620,7 +620,8 @@ static int lfs_dir_remove(lfs_t *lfs, lfs_dir_t *dir, lfs_entry_t *entry) {
620
620
621
621
if (!(pdir .d .size & 0x80000000 )) {
622
622
return lfs_dir_commit (lfs , dir , (struct lfs_region []){
623
- {entry -> off , entry -> d .len , NULL , 0 },
623
+ {entry -> off , 4 + entry -> d .elen + entry -> d .alen + entry -> d .nlen ,
624
+ NULL , 0 },
624
625
}, 1 );
625
626
} else {
626
627
pdir .d .tail [0 ] = dir -> d .tail [0 ];
@@ -629,7 +630,8 @@ static int lfs_dir_remove(lfs_t *lfs, lfs_dir_t *dir, lfs_entry_t *entry) {
629
630
}
630
631
} else {
631
632
return lfs_dir_commit (lfs , dir , (struct lfs_region []){
632
- {entry -> off , entry -> d .len , NULL , 0 },
633
+ {entry -> off , 4 + entry -> d .elen + entry -> d .alen + entry -> d .nlen ,
634
+ NULL , 0 },
633
635
}, 1 );
634
636
}
635
637
}
@@ -656,9 +658,9 @@ static int lfs_dir_next(lfs_t *lfs, lfs_dir_t *dir, lfs_entry_t *entry) {
656
658
return err ;
657
659
}
658
660
659
- dir -> off += entry -> d . len ;
660
- dir -> pos += entry -> d .len ;
661
- entry -> off = dir -> off - entry -> d .len ;
661
+ entry -> off = dir -> off ;
662
+ dir -> off += 4 + entry -> d .elen + entry -> d . alen + entry -> d . nlen ;
663
+ dir -> pos += 4 + entry -> d . elen + entry -> d . alen + entry -> d .nlen ;
662
664
return 0 ;
663
665
}
664
666
@@ -713,12 +715,13 @@ static int lfs_dir_find(lfs_t *lfs, lfs_dir_t *dir,
713
715
714
716
if ((entry -> d .type != LFS_TYPE_REG &&
715
717
entry -> d .type != LFS_TYPE_DIR ) ||
716
- entry -> d .name != pathlen ) {
718
+ entry -> d .nlen != pathlen ) {
717
719
continue ;
718
720
}
719
721
720
722
int res = lfs_bd_cmp (lfs , dir -> pair [0 ],
721
- entry -> off + sizeof (entry -> d ), pathname , pathlen );
723
+ entry -> off + 4 + entry -> d .elen + entry -> d .alen ,
724
+ pathname , pathlen );
722
725
if (res < 0 ) {
723
726
return res ;
724
727
}
@@ -784,8 +787,9 @@ int lfs_mkdir(lfs_t *lfs, const char *path) {
784
787
}
785
788
786
789
entry .d .type = LFS_TYPE_DIR ;
787
- entry .d .name = strlen (path );
788
- entry .d .len = sizeof (entry .d ) + entry .d .name ;
790
+ entry .d .elen = sizeof (entry .d ) - 4 ;
791
+ entry .d .alen = 0 ;
792
+ entry .d .nlen = strlen (path );
789
793
entry .d .u .dir [0 ] = dir .pair [0 ];
790
794
entry .d .u .dir [1 ] = dir .pair [1 ];
791
795
@@ -880,8 +884,9 @@ int lfs_dir_read(lfs_t *lfs, lfs_dir_t *dir, struct lfs_info *info) {
880
884
info -> size = entry .d .u .file .size ;
881
885
}
882
886
883
- int err = lfs_bd_read (lfs , dir -> pair [0 ], entry .off + sizeof (entry .d ),
884
- info -> name , entry .d .name );
887
+ int err = lfs_bd_read (lfs , dir -> pair [0 ],
888
+ entry .off + 4 + entry .d .elen + entry .d .alen ,
889
+ info -> name , entry .d .nlen );
885
890
if (err ) {
886
891
return err ;
887
892
}
@@ -1117,8 +1122,9 @@ int lfs_file_open(lfs_t *lfs, lfs_file_t *file,
1117
1122
1118
1123
// create entry to remember name
1119
1124
entry .d .type = LFS_TYPE_REG ;
1120
- entry .d .name = strlen (path );
1121
- entry .d .len = sizeof (entry .d ) + entry .d .name ;
1125
+ entry .d .elen = sizeof (entry .d ) - 4 ;
1126
+ entry .d .alen = 0 ;
1127
+ entry .d .nlen = strlen (path );
1122
1128
entry .d .u .file .head = -1 ;
1123
1129
entry .d .u .file .size = 0 ;
1124
1130
err = lfs_dir_append (lfs , & cwd , & entry , path );
@@ -1537,8 +1543,9 @@ int lfs_stat(lfs_t *lfs, const char *path, struct lfs_info *info) {
1537
1543
info -> size = entry .d .u .file .size ;
1538
1544
}
1539
1545
1540
- err = lfs_bd_read (lfs , cwd .pair [0 ], entry .off + sizeof (entry .d ),
1541
- info -> name , entry .d .name );
1546
+ err = lfs_bd_read (lfs , cwd .pair [0 ],
1547
+ entry .off + 4 + entry .d .elen + entry .d .alen ,
1548
+ info -> name , entry .d .nlen );
1542
1549
if (err ) {
1543
1550
return err ;
1544
1551
}
@@ -1585,7 +1592,7 @@ int lfs_remove(lfs_t *lfs, const char *path) {
1585
1592
f -> pair [0 ] = 0xffffffff ;
1586
1593
f -> pair [1 ] = 0xffffffff ;
1587
1594
} else if (f -> poff > entry .off ) {
1588
- f -> poff -= entry .d .len ;
1595
+ f -> poff -= 4 + entry .d .elen + entry . d . alen + entry . d . nlen ;
1589
1596
}
1590
1597
}
1591
1598
}
@@ -1651,8 +1658,7 @@ int lfs_rename(lfs_t *lfs, const char *oldpath, const char *newpath) {
1651
1658
// move to new location
1652
1659
lfs_entry_t newentry = preventry ;
1653
1660
newentry .d = oldentry .d ;
1654
- newentry .d .name = strlen (newpath );
1655
- newentry .d .len = sizeof (newentry .d ) + newentry .d .name ;
1661
+ newentry .d .nlen = strlen (newpath );
1656
1662
1657
1663
if (prevexists ) {
1658
1664
int err = lfs_dir_update (lfs , & newcwd , & newentry , newpath );
@@ -1690,7 +1696,7 @@ int lfs_rename(lfs_t *lfs, const char *oldpath, const char *newpath) {
1690
1696
f -> pair [0 ] = 0xffffffff ;
1691
1697
f -> pair [1 ] = 0xffffffff ;
1692
1698
} else if (f -> poff > oldentry .off ) {
1693
- f -> poff -= oldentry .d .len ;
1699
+ f -> poff -= 4 + oldentry .d .elen + oldentry . d . alen + oldentry . d . nlen ;
1694
1700
}
1695
1701
}
1696
1702
}
@@ -1809,8 +1815,8 @@ int lfs_format(lfs_t *lfs, const struct lfs_config *cfg) {
1809
1815
lfs_superblock_t superblock = {
1810
1816
.off = sizeof (superdir .d ),
1811
1817
.d .type = LFS_TYPE_SUPERBLOCK ,
1812
- .d .name = sizeof (superblock .d . magic ),
1813
- .d .len = sizeof (superblock .d ),
1818
+ .d .elen = sizeof (superblock .d ) - sizeof ( superblock . d . magic ) - 4 ,
1819
+ .d .nlen = sizeof (superblock .d . magic ),
1814
1820
.d .version = 0x00010001 ,
1815
1821
.d .magic = {"littlefs" },
1816
1822
.d .block_size = lfs -> cfg -> block_size ,
@@ -1865,8 +1871,8 @@ int lfs_mount(lfs_t *lfs, const struct lfs_config *cfg) {
1865
1871
lfs_superblock_t superblock ;
1866
1872
err = lfs_dir_fetch (lfs , & dir , (const lfs_block_t [2 ]){0 , 1 });
1867
1873
if (!err ) {
1868
- err = lfs_bd_read (lfs , dir .pair [0 ],
1869
- sizeof ( dir . d ), & superblock .d , sizeof (superblock .d ));
1874
+ err = lfs_bd_read (lfs , dir .pair [0 ], sizeof ( dir . d ),
1875
+ & superblock .d , sizeof (superblock .d ));
1870
1876
1871
1877
lfs -> root [0 ] = superblock .d .root [0 ];
1872
1878
lfs -> root [1 ] = superblock .d .root [1 ];
@@ -1925,7 +1931,7 @@ int lfs_traverse(lfs_t *lfs, int (*cb)(void*, lfs_block_t), void *data) {
1925
1931
return err ;
1926
1932
}
1927
1933
1928
- dir .off += entry .d .len ;
1934
+ dir .off += 4 + entry .d .elen + entry . d . alen + entry . d . nlen ;
1929
1935
if ((0xf & entry .d .type ) == (0xf & LFS_TYPE_REG )) {
1930
1936
int err = lfs_index_traverse (lfs , & lfs -> rcache , NULL ,
1931
1937
entry .d .u .file .head , entry .d .u .file .size , cb , data );
0 commit comments