@@ -349,11 +349,10 @@ static void lfs_entry_fromle32(struct lfs_disk_entry *d) {
349
349
d -> u .dir [1 ] = lfs_fromle32 (d -> u .dir [1 ]);
350
350
}
351
351
352
- // TODO
353
- //static void lfs_entry_tole32(struct lfs_disk_entry *d) {
354
- // d->u.dir[0] = lfs_tole32(d->u.dir[0]);
355
- // d->u.dir[1] = lfs_tole32(d->u.dir[1]);
356
- //}
352
+ static void lfs_entry_tole32 (struct lfs_disk_entry * d ) {
353
+ d -> u .dir [0 ] = lfs_tole32 (d -> u .dir [0 ]);
354
+ d -> u .dir [1 ] = lfs_tole32 (d -> u .dir [1 ]);
355
+ }
357
356
358
357
static void lfs_superblock_fromle32 (struct lfs_disk_superblock * d ) {
359
358
d -> root [0 ] = lfs_fromle32 (d -> root [0 ]);
@@ -683,7 +682,10 @@ static int lfs_dir_append(lfs_t *lfs, lfs_dir_t *dir,
683
682
r -> off += entry -> off ;
684
683
}
685
684
686
- return lfs_dir_commit (lfs , dir , regions );
685
+ lfs_entry_tole32 (& entry -> d );
686
+ int err = lfs_dir_commit (lfs , dir , regions );
687
+ lfs_entry_fromle32 (& entry -> d );
688
+ return err ;
687
689
}
688
690
689
691
// we need to allocate a new dir block
@@ -701,7 +703,9 @@ static int lfs_dir_append(lfs_t *lfs, lfs_dir_t *dir,
701
703
r -> off += entry -> off ;
702
704
}
703
705
706
+ lfs_entry_tole32 (& entry -> d );
704
707
err = lfs_dir_commit (lfs , dir , regions );
708
+ lfs_entry_fromle32 (& entry -> d );
705
709
if (err ) {
706
710
return err ;
707
711
}
@@ -783,7 +787,9 @@ static int lfs_dir_update(lfs_t *lfs, lfs_dir_t *dir,
783
787
r -> off += entry -> off ;
784
788
}
785
789
790
+ lfs_entry_tole32 (& entry -> d );
786
791
int err = lfs_dir_commit (lfs , dir , regions );
792
+ lfs_entry_fromle32 (& entry -> d );
787
793
if (err ) {
788
794
return err ;
789
795
}
@@ -807,32 +813,35 @@ static int lfs_dir_update(lfs_t *lfs, lfs_dir_t *dir,
807
813
}
808
814
} else {
809
815
lfs_dir_t olddir = * dir ;
810
- lfs_off_t oldoff = entry -> off ;
811
- lfs_size_t oldsize = entry -> size - diff ;
816
+ lfs_entry_t oldentry = {
817
+ .off = entry -> off ,
818
+ .size = entry -> size - diff ,
819
+ .d .type = entry -> d .type | LFS_STRUCT_MOVED ,
820
+ };
812
821
813
822
// mark as moving
814
- entry -> d .type |= LFS_STRUCT_MOVED ;
815
823
int err = lfs_dir_commit (lfs , & olddir ,
816
824
& (struct lfs_region ){
817
- oldoff , 0 ,
818
- lfs_commit_mem , & entry -> d .type , 1 });
825
+ oldentry . off , 0 ,
826
+ lfs_commit_mem , & oldentry . d .type , 1 });
819
827
if (err ) {
820
828
return err ;
821
829
}
822
- entry -> d .type &= LFS_STRUCT_MOVED ;
823
830
824
831
// append updated entry
832
+ lfs_entry_tole32 (& entry -> d );
825
833
err = lfs_dir_append (lfs , dir , entry ,
826
834
& (struct lfs_region ){
827
835
0 , + entry -> size ,
828
836
lfs_commit_disk , & (struct lfs_commit_disk ){
829
- olddir .pair [0 ], entry -> off , regions }, oldsize });
837
+ olddir .pair [0 ], entry -> off , regions }, oldentry .size });
838
+ lfs_entry_fromle32 (& entry -> d );
830
839
if (err ) {
831
840
return err ;
832
841
}
833
842
834
843
// remove old entry
835
- err = lfs_dir_remove (lfs , dir , & ( lfs_entry_t ){ oldoff , oldsize } );
844
+ err = lfs_dir_remove (lfs , dir , & oldentry );
836
845
if (err ) {
837
846
return err ;
838
847
}
@@ -1645,10 +1654,12 @@ int lfs_file_sync(lfs_t *lfs, lfs_file_t *file) {
1645
1654
entry .d .u .file .head = file -> head ;
1646
1655
entry .d .u .file .size = file -> size ;
1647
1656
1657
+ lfs_entry_tole32 (& entry .d );
1648
1658
err = lfs_dir_update (lfs , & cwd , & entry ,
1649
1659
& (struct lfs_region ){
1650
1660
0 , 0 ,
1651
1661
lfs_commit_mem , & entry .d , sizeof (entry .d )});
1662
+ lfs_entry_fromle32 (& entry .d );
1652
1663
if (err ) {
1653
1664
return err ;
1654
1665
}
@@ -2073,7 +2084,7 @@ int lfs_rename(lfs_t *lfs, const char *oldpath, const char *newpath) {
2073
2084
err = lfs_dir_update (lfs , & oldcwd , & oldentry ,
2074
2085
& (struct lfs_region ){
2075
2086
0 , 0 ,
2076
- lfs_commit_mem , & oldentry .d , sizeof ( oldentry . d ) });
2087
+ lfs_commit_mem , & oldentry .d . type , 1 });
2077
2088
if (err ) {
2078
2089
return err ;
2079
2090
}
0 commit comments