@@ -490,7 +490,8 @@ struct lfs_commit {
490
490
lfs_off_t off ;
491
491
};
492
492
493
- static int lfs_commit (lfs_t * lfs , struct lfs_commit * c , const void * data , lfs_size_t size ) {
493
+ static int lfs_commit (lfs_t * lfs , struct lfs_commit * c ,
494
+ const void * data , lfs_size_t size ) {
494
495
lfs_crc (& c -> crc , data , size );
495
496
int err = lfs_bd_prog (lfs , c -> block , c -> off , data , size );
496
497
c -> off += size ;
@@ -500,46 +501,44 @@ static int lfs_commit(lfs_t *lfs, struct lfs_commit *c, const void *data, lfs_si
500
501
struct lfs_region {
501
502
lfs_off_t off ;
502
503
lfs_ssize_t diff ;
503
- int (* commit )(lfs_t * lfs , struct lfs_commit * c , const void * p );
504
- const void * data ;
505
- struct lfs_region * next ;
506
- };
507
504
508
- struct lfs_commit_mem {
505
+ int (* commit )(lfs_t * lfs , struct lfs_commit * c ,
506
+ const void * data , lfs_size_t size );
509
507
const void * data ;
510
508
lfs_size_t size ;
509
+ struct lfs_region * next ;
511
510
};
512
511
513
- static int lfs_commit_mem (lfs_t * lfs , struct lfs_commit * c , const void * p ) {
514
- const struct lfs_commit_mem * m = p ;
515
- return lfs_commit (lfs , c , m -> data , m -> size );
512
+ static int lfs_commit_mem (lfs_t * lfs , struct lfs_commit * c ,
513
+ const void * data , lfs_size_t size ) {
514
+ return lfs_commit (lfs , c , data , size );
516
515
}
517
516
518
517
struct lfs_commit_disk {
519
518
lfs_block_t block ;
520
519
lfs_off_t off ;
521
- lfs_size_t size ;
522
520
struct lfs_region * regions ;
523
521
};
524
522
525
- static int lfs_commit_disk (lfs_t * lfs , struct lfs_commit * c , const void * p ) {
526
- const struct lfs_commit_disk * u = p ;
523
+ static int lfs_commit_disk (lfs_t * lfs , struct lfs_commit * c ,
524
+ const void * p , lfs_size_t size ) {
525
+ const struct lfs_commit_disk * d = p ;
527
526
528
- struct lfs_region * r = u -> regions ;
527
+ struct lfs_region * r = d -> regions ;
529
528
lfs_off_t off = 0 ;
530
529
while (true) {
531
530
if (r && r -> off == off ) {
532
531
lfs_off_t orig = c -> off ;
533
- int err = r -> commit (lfs , c , r -> data );
532
+ int err = r -> commit (lfs , c , r -> data , r -> size );
534
533
if (err ) {
535
534
return err ;
536
535
}
537
536
538
537
off += (c -> off - orig ) - r -> diff ;
539
538
r = r -> next ;
540
- } else if (off < u -> size ) {
539
+ } else if (off < size ) {
541
540
uint8_t data ;
542
- int err = lfs_bd_read (lfs , u -> block , u -> off + off , & data , 1 );
541
+ int err = lfs_bd_read (lfs , d -> block , d -> off + off , & data , 1 );
543
542
if (err ) {
544
543
return err ;
545
544
}
@@ -590,12 +589,11 @@ static int lfs_dir_commit(lfs_t *lfs, lfs_dir_t *dir,
590
589
591
590
lfs_dir_tole32 (& dir -> d );
592
591
err = lfs_commit_disk (lfs , & c , & (struct lfs_commit_disk ){
593
- oldpair [1 ], 0 , oldsize ,
592
+ oldpair [1 ], 0 ,
594
593
& (struct lfs_region ){
595
594
0 , 0 ,
596
- lfs_commit_mem , & (struct lfs_commit_mem ){
597
- & dir -> d , sizeof (dir -> d )},
598
- regions }});
595
+ lfs_commit_mem , & dir -> d , sizeof (dir -> d ),
596
+ regions }}, oldsize );
599
597
lfs_dir_fromle32 (& dir -> d );
600
598
if (err ) {
601
599
if (err == LFS_ERR_CORRUPT ) {
@@ -754,8 +752,7 @@ static int lfs_dir_update(lfs_t *lfs, lfs_dir_t *dir,
754
752
int err = lfs_dir_commit (lfs , & olddir ,
755
753
& (struct lfs_region ){
756
754
oldoff , 0 ,
757
- lfs_commit_mem , & (struct lfs_commit_mem ){
758
- & entry -> d .type , 1 }});
755
+ lfs_commit_mem , & entry -> d .type , 1 });
759
756
if (err ) {
760
757
return err ;
761
758
}
@@ -766,7 +763,7 @@ static int lfs_dir_update(lfs_t *lfs, lfs_dir_t *dir,
766
763
& (struct lfs_region ){
767
764
0 , + lfs_entry_size (entry ),
768
765
lfs_commit_disk , & (struct lfs_commit_disk ){
769
- olddir .pair [0 ], entry -> off , oldsize , regions }});
766
+ olddir .pair [0 ], entry -> off , regions }, oldsize });
770
767
if (err ) {
771
768
return err ;
772
769
}
@@ -775,8 +772,7 @@ static int lfs_dir_update(lfs_t *lfs, lfs_dir_t *dir,
775
772
err = lfs_dir_commit (lfs , & olddir ,
776
773
& (struct lfs_region ){
777
774
oldoff , - oldsize ,
778
- lfs_commit_mem , & (struct lfs_commit_mem ){
779
- NULL , 0 }});
775
+ lfs_commit_mem , NULL , 0 });
780
776
if (err ) {
781
777
return err ;
782
778
}
@@ -829,8 +825,7 @@ static int lfs_dir_remove(lfs_t *lfs, lfs_dir_t *dir, lfs_entry_t *entry) {
829
825
int err = lfs_dir_commit (lfs , dir ,
830
826
& (struct lfs_region ){
831
827
entry -> off , - lfs_entry_size (entry ),
832
- lfs_commit_mem , & (struct lfs_commit_mem ){
833
- NULL , 0 }});
828
+ lfs_commit_mem , NULL , 0 });
834
829
if (err ) {
835
830
return err ;
836
831
}
@@ -1053,12 +1048,10 @@ int lfs_mkdir(lfs_t *lfs, const char *path) {
1053
1048
err = lfs_dir_append (lfs , & cwd , & entry ,
1054
1049
& (struct lfs_region ){
1055
1050
0 , + sizeof (entry .d ),
1056
- lfs_commit_mem , & (struct lfs_commit_mem ){
1057
- & entry .d , sizeof (entry .d )},
1051
+ lfs_commit_mem , & entry .d , sizeof (entry .d ),
1058
1052
& (struct lfs_region ){
1059
1053
0 , + entry .d .nlen ,
1060
- lfs_commit_mem , & (struct lfs_commit_mem ){
1061
- path , entry .d .nlen }}});
1054
+ lfs_commit_mem , path , entry .d .nlen }});
1062
1055
if (err ) {
1063
1056
return err ;
1064
1057
}
@@ -1445,12 +1438,10 @@ int lfs_file_open(lfs_t *lfs, lfs_file_t *file,
1445
1438
err = lfs_dir_append (lfs , & cwd , & entry ,
1446
1439
& (struct lfs_region ){
1447
1440
0 , + sizeof (entry .d ),
1448
- lfs_commit_mem , & (struct lfs_commit_mem ){
1449
- & entry .d , sizeof (entry .d )},
1441
+ lfs_commit_mem , & entry .d , sizeof (entry .d ),
1450
1442
& (struct lfs_region ){
1451
1443
0 , + entry .d .nlen ,
1452
- lfs_commit_mem , & (struct lfs_commit_mem ){
1453
- path , entry .d .nlen }}});
1444
+ lfs_commit_mem , path , entry .d .nlen }});
1454
1445
if (err ) {
1455
1446
return err ;
1456
1447
}
@@ -1669,8 +1660,7 @@ int lfs_file_sync(lfs_t *lfs, lfs_file_t *file) {
1669
1660
err = lfs_dir_update (lfs , & cwd , & entry ,
1670
1661
& (struct lfs_region ){
1671
1662
0 , 0 ,
1672
- lfs_commit_mem , & (struct lfs_commit_mem ){
1673
- & entry .d , sizeof (entry .d )}});
1663
+ lfs_commit_mem , & entry .d , sizeof (entry .d )});
1674
1664
if (err ) {
1675
1665
return err ;
1676
1666
}
@@ -2095,8 +2085,7 @@ int lfs_rename(lfs_t *lfs, const char *oldpath, const char *newpath) {
2095
2085
err = lfs_dir_update (lfs , & oldcwd , & oldentry ,
2096
2086
& (struct lfs_region ){
2097
2087
0 , 0 ,
2098
- lfs_commit_mem , & (struct lfs_commit_mem ){
2099
- & oldentry .d , sizeof (oldentry .d )}});
2088
+ lfs_commit_mem , & oldentry .d , sizeof (oldentry .d )});
2100
2089
if (err ) {
2101
2090
return err ;
2102
2091
}
@@ -2116,25 +2105,21 @@ int lfs_rename(lfs_t *lfs, const char *oldpath, const char *newpath) {
2116
2105
err = lfs_dir_update (lfs , & newcwd , & newentry ,
2117
2106
& (struct lfs_region ){
2118
2107
0 , 0 ,
2119
- lfs_commit_mem , & (struct lfs_commit_mem ){
2120
- & newentry .d , sizeof (newentry .d )},
2108
+ lfs_commit_mem , & newentry .d , sizeof (newentry .d ),
2121
2109
& (struct lfs_region ){
2122
2110
sizeof (newentry .d ), 0 ,
2123
- lfs_commit_mem , & (struct lfs_commit_mem ){
2124
- newpath , newentry .d .nlen }}});
2111
+ lfs_commit_mem , newpath , newentry .d .nlen }});
2125
2112
if (err ) {
2126
2113
return err ;
2127
2114
}
2128
2115
} else {
2129
2116
err = lfs_dir_append (lfs , & newcwd , & newentry ,
2130
2117
& (struct lfs_region ){
2131
2118
0 , + sizeof (newentry .d ),
2132
- lfs_commit_mem , & (struct lfs_commit_mem ){
2133
- & newentry .d , sizeof (newentry .d )},
2119
+ lfs_commit_mem , & newentry .d , sizeof (newentry .d ),
2134
2120
& (struct lfs_region ){
2135
2121
0 , + newentry .d .nlen ,
2136
- lfs_commit_mem , & (struct lfs_commit_mem ){
2137
- newpath , newentry .d .nlen }}});
2122
+ lfs_commit_mem , newpath , newentry .d .nlen }});
2138
2123
if (err ) {
2139
2124
return err ;
2140
2125
}
@@ -2302,8 +2287,7 @@ int lfs_format(lfs_t *lfs, const struct lfs_config *cfg) {
2302
2287
for (int i = 0 ; i < 2 ; i ++ ) {
2303
2288
err = lfs_dir_commit (lfs , & superdir , & (struct lfs_region ){
2304
2289
sizeof (superdir .d ), 0 ,
2305
- lfs_commit_mem , & (struct lfs_commit_mem ){
2306
- & superblock .d , sizeof (superblock .d )}});
2290
+ lfs_commit_mem , & superblock .d , sizeof (superblock .d )});
2307
2291
if (err && err != LFS_ERR_CORRUPT ) {
2308
2292
return err ;
2309
2293
}
@@ -2570,8 +2554,7 @@ static int lfs_relocate(lfs_t *lfs,
2570
2554
int err = lfs_dir_update (lfs , & parent , & entry ,
2571
2555
& (struct lfs_region ){
2572
2556
0 , 0 ,
2573
- lfs_commit_mem , & (struct lfs_commit_mem ){
2574
- & entry .d , sizeof (entry .d )}});
2557
+ lfs_commit_mem , & entry .d , sizeof (entry .d )});
2575
2558
if (err ) {
2576
2559
return err ;
2577
2560
}
@@ -2698,8 +2681,7 @@ int lfs_deorphan(lfs_t *lfs) {
2698
2681
err = lfs_dir_update (lfs , & cwd , & entry ,
2699
2682
& (struct lfs_region ){
2700
2683
0 , 0 ,
2701
- lfs_commit_mem , & (struct lfs_commit_mem ){
2702
- & entry .d , sizeof (entry .d )}});
2684
+ lfs_commit_mem , & entry .d , sizeof (entry .d )});
2703
2685
if (err ) {
2704
2686
return err ;
2705
2687
}
0 commit comments