@@ -373,8 +373,8 @@ static int lfs_dir_alloc(lfs_t *lfs, lfs_dir_t *dir) {
373
373
// set defaults
374
374
dir -> d .rev += 1 ;
375
375
dir -> d .size = sizeof (dir -> d )+ 4 ;
376
- dir -> d .tail [0 ] = -1 ;
377
- dir -> d .tail [1 ] = -1 ;
376
+ dir -> d .tail [0 ] = 0xffffffff ;
377
+ dir -> d .tail [1 ] = 0xffffffff ;
378
378
dir -> off = sizeof (dir -> d );
379
379
380
380
// don't write out yet, let caller take care of that
@@ -455,88 +455,91 @@ static int lfs_dir_commit(lfs_t *lfs, lfs_dir_t *dir,
455
455
bool relocated = false;
456
456
457
457
while (true) {
458
- int err = lfs_bd_erase (lfs , dir -> pair [0 ]);
459
- if (err ) {
460
- if (err == LFS_ERR_CORRUPT ) {
461
- goto relocate ;
458
+ if (true) {
459
+ int err = lfs_bd_erase (lfs , dir -> pair [0 ]);
460
+ if (err ) {
461
+ if (err == LFS_ERR_CORRUPT ) {
462
+ goto relocate ;
463
+ }
464
+ return err ;
462
465
}
463
- return err ;
464
- }
465
466
466
- uint32_t crc = 0xffffffff ;
467
- lfs_crc (& crc , & dir -> d , sizeof (dir -> d ));
468
- err = lfs_bd_prog (lfs , dir -> pair [0 ], 0 , & dir -> d , sizeof (dir -> d ));
469
- if (err ) {
470
- if (err == LFS_ERR_CORRUPT ) {
471
- goto relocate ;
467
+ uint32_t crc = 0xffffffff ;
468
+ lfs_crc (& crc , & dir -> d , sizeof (dir -> d ));
469
+ err = lfs_bd_prog (lfs , dir -> pair [0 ], 0 , & dir -> d , sizeof (dir -> d ));
470
+ if (err ) {
471
+ if (err == LFS_ERR_CORRUPT ) {
472
+ goto relocate ;
473
+ }
474
+ return err ;
472
475
}
473
- return err ;
474
- }
475
476
476
- int i = 0 ;
477
- lfs_off_t oldoff = sizeof (dir -> d );
478
- lfs_off_t newoff = sizeof (dir -> d );
479
- while (newoff < (0x7fffffff & dir -> d .size )- 4 ) {
480
- if (i < count && regions [i ].oldoff == oldoff ) {
481
- lfs_crc (& crc , regions [i ].newdata , regions [i ].newlen );
482
- int err = lfs_bd_prog (lfs , dir -> pair [0 ],
483
- newoff , regions [i ].newdata , regions [i ].newlen );
484
- if (err ) {
485
- if (err == LFS_ERR_CORRUPT ) {
486
- goto relocate ;
477
+ int i = 0 ;
478
+ lfs_off_t oldoff = sizeof (dir -> d );
479
+ lfs_off_t newoff = sizeof (dir -> d );
480
+ while (newoff < (0x7fffffff & dir -> d .size )- 4 ) {
481
+ if (i < count && regions [i ].oldoff == oldoff ) {
482
+ lfs_crc (& crc , regions [i ].newdata , regions [i ].newlen );
483
+ int err = lfs_bd_prog (lfs , dir -> pair [0 ],
484
+ newoff , regions [i ].newdata , regions [i ].newlen );
485
+ if (err ) {
486
+ if (err == LFS_ERR_CORRUPT ) {
487
+ goto relocate ;
488
+ }
489
+ return err ;
487
490
}
488
- return err ;
489
- }
490
491
491
- oldoff += regions [i ].oldlen ;
492
- newoff += regions [i ].newlen ;
493
- i += 1 ;
494
- } else {
495
- uint8_t data ;
496
- int err = lfs_bd_read (lfs , oldpair [1 ], oldoff , & data , 1 );
497
- if (err ) {
498
- return err ;
499
- }
492
+ oldoff += regions [i ].oldlen ;
493
+ newoff += regions [i ].newlen ;
494
+ i += 1 ;
495
+ } else {
496
+ uint8_t data ;
497
+ int err = lfs_bd_read (lfs , oldpair [1 ], oldoff , & data , 1 );
498
+ if (err ) {
499
+ return err ;
500
+ }
500
501
501
- lfs_crc (& crc , & data , 1 );
502
- err = lfs_bd_prog (lfs , dir -> pair [0 ], newoff , & data , 1 );
503
- if (err ) {
504
- if (err == LFS_ERR_CORRUPT ) {
505
- goto relocate ;
502
+ lfs_crc (& crc , & data , 1 );
503
+ err = lfs_bd_prog (lfs , dir -> pair [0 ], newoff , & data , 1 );
504
+ if (err ) {
505
+ if (err == LFS_ERR_CORRUPT ) {
506
+ goto relocate ;
507
+ }
508
+ return err ;
506
509
}
507
- return err ;
508
- }
509
510
510
- oldoff += 1 ;
511
- newoff += 1 ;
511
+ oldoff += 1 ;
512
+ newoff += 1 ;
513
+ }
512
514
}
513
- }
514
515
515
- err = lfs_bd_prog (lfs , dir -> pair [0 ], newoff , & crc , 4 );
516
- if (err ) {
517
- if (err == LFS_ERR_CORRUPT ) {
518
- goto relocate ;
516
+ err = lfs_bd_prog (lfs , dir -> pair [0 ], newoff , & crc , 4 );
517
+ if (err ) {
518
+ if (err == LFS_ERR_CORRUPT ) {
519
+ goto relocate ;
520
+ }
521
+ return err ;
519
522
}
520
- return err ;
521
- }
522
523
523
- err = lfs_bd_sync (lfs );
524
- if (err ) {
525
- if (err == LFS_ERR_CORRUPT ) {
526
- goto relocate ;
524
+ err = lfs_bd_sync (lfs );
525
+ if (err ) {
526
+ if (err == LFS_ERR_CORRUPT ) {
527
+ goto relocate ;
528
+ }
529
+ return err ;
527
530
}
528
- return err ;
529
- }
530
531
531
- // successful commit, check checksum to make sure
532
- crc = 0xffffffff ;
533
- err = lfs_bd_crc (lfs , dir -> pair [0 ], 0 , 0x7fffffff & dir -> d .size , & crc );
534
- if (err ) {
535
- return err ;
536
- }
532
+ // successful commit, check checksum to make sure
533
+ crc = 0xffffffff ;
534
+ err = lfs_bd_crc (lfs , dir -> pair [0 ], 0 ,
535
+ 0x7fffffff & dir -> d .size , & crc );
536
+ if (err ) {
537
+ return err ;
538
+ }
537
539
538
- if (crc == 0 ) {
539
- break ;
540
+ if (crc == 0 ) {
541
+ break ;
542
+ }
540
543
}
541
544
542
545
relocate :
@@ -554,7 +557,7 @@ static int lfs_dir_commit(lfs_t *lfs, lfs_dir_t *dir,
554
557
}
555
558
556
559
// relocate half of pair
557
- err = lfs_alloc (lfs , & dir -> pair [0 ]);
560
+ int err = lfs_alloc (lfs , & dir -> pair [0 ]);
558
561
if (err ) {
559
562
return err ;
560
563
}
@@ -791,8 +794,6 @@ static int lfs_dir_find(lfs_t *lfs, lfs_dir_t *dir,
791
794
return err ;
792
795
}
793
796
}
794
-
795
- return 0 ;
796
797
}
797
798
798
799
@@ -1020,7 +1021,7 @@ static int lfs_index_find(lfs_t *lfs,
1020
1021
lfs_block_t head , lfs_size_t size ,
1021
1022
lfs_size_t pos , lfs_block_t * block , lfs_off_t * off ) {
1022
1023
if (size == 0 ) {
1023
- * block = -1 ;
1024
+ * block = 0xffffffff ;
1024
1025
* off = 0 ;
1025
1026
return 0 ;
1026
1027
}
@@ -1052,79 +1053,84 @@ static int lfs_index_extend(lfs_t *lfs,
1052
1053
lfs_block_t head , lfs_size_t size ,
1053
1054
lfs_off_t * block , lfs_block_t * off ) {
1054
1055
while (true) {
1055
- // go ahead and grab a block
1056
- int err = lfs_alloc (lfs , block );
1057
- if (err ) {
1058
- return err ;
1059
- }
1060
- assert (* block >= 2 && * block <= lfs -> cfg -> block_count );
1056
+ if (true) {
1057
+ // go ahead and grab a block
1058
+ int err = lfs_alloc (lfs , block );
1059
+ if (err ) {
1060
+ return err ;
1061
+ }
1062
+ assert (* block >= 2 && * block <= lfs -> cfg -> block_count );
1061
1063
1062
- err = lfs_bd_erase (lfs , * block );
1063
- if (err ) {
1064
- if (err == LFS_ERR_CORRUPT ) {
1065
- goto relocate ;
1064
+ err = lfs_bd_erase (lfs , * block );
1065
+ if (err ) {
1066
+ if (err == LFS_ERR_CORRUPT ) {
1067
+ goto relocate ;
1068
+ }
1069
+ return err ;
1066
1070
}
1067
- return err ;
1068
- }
1069
1071
1070
- if (size == 0 ) {
1071
- * off = 0 ;
1072
- return 0 ;
1073
- }
1072
+ if (size == 0 ) {
1073
+ * off = 0 ;
1074
+ return 0 ;
1075
+ }
1074
1076
1075
- size -= 1 ;
1076
- lfs_off_t index = lfs_index (lfs , & size );
1077
- size += 1 ;
1077
+ size -= 1 ;
1078
+ lfs_off_t index = lfs_index (lfs , & size );
1079
+ size += 1 ;
1078
1080
1079
- // just copy out the last block if it is incomplete
1080
- if (size != lfs -> cfg -> block_size ) {
1081
- for (lfs_off_t i = 0 ; i < size ; i ++ ) {
1082
- uint8_t data ;
1083
- int err = lfs_cache_read (lfs , rcache , NULL , head , i , & data , 1 );
1084
- if (err ) {
1085
- return err ;
1081
+ // just copy out the last block if it is incomplete
1082
+ if (size != lfs -> cfg -> block_size ) {
1083
+ for (lfs_off_t i = 0 ; i < size ; i ++ ) {
1084
+ uint8_t data ;
1085
+ int err = lfs_cache_read (lfs , rcache , NULL ,
1086
+ head , i , & data , 1 );
1087
+ if (err ) {
1088
+ return err ;
1089
+ }
1090
+
1091
+ err = lfs_cache_prog (lfs , pcache , rcache ,
1092
+ * block , i , & data , 1 );
1093
+ if (err ) {
1094
+ if (err == LFS_ERR_CORRUPT ) {
1095
+ goto relocate ;
1096
+ }
1097
+ return err ;
1098
+ }
1086
1099
}
1087
1100
1088
- err = lfs_cache_prog (lfs , pcache , rcache , * block , i , & data , 1 );
1101
+ * off = size ;
1102
+ return 0 ;
1103
+ }
1104
+
1105
+ // append block
1106
+ index += 1 ;
1107
+ lfs_size_t skips = lfs_ctz (index ) + 1 ;
1108
+
1109
+ for (lfs_off_t i = 0 ; i < skips ; i ++ ) {
1110
+ int err = lfs_cache_prog (lfs , pcache , rcache ,
1111
+ * block , 4 * i , & head , 4 );
1089
1112
if (err ) {
1090
1113
if (err == LFS_ERR_CORRUPT ) {
1091
1114
goto relocate ;
1092
1115
}
1093
1116
return err ;
1094
1117
}
1095
- }
1096
-
1097
- * off = size ;
1098
- return 0 ;
1099
- }
1100
-
1101
- // append block
1102
- index += 1 ;
1103
- lfs_size_t skips = lfs_ctz (index ) + 1 ;
1104
1118
1105
- for ( lfs_off_t i = 0 ; i < skips ; i ++ ) {
1106
- int err = lfs_cache_prog (lfs , pcache , rcache ,
1107
- * block , 4 * i , & head , 4 );
1108
- if (err ) {
1109
- if ( err == LFS_ERR_CORRUPT ) {
1110
- goto relocate ;
1119
+ if ( i != skips - 1 ) {
1120
+ err = lfs_cache_read (lfs , rcache , NULL ,
1121
+ head , 4 * i , & head , 4 );
1122
+ if (err ) {
1123
+ return err ;
1124
+ }
1111
1125
}
1112
- return err ;
1113
- }
1114
1126
1115
- if (i != skips - 1 ) {
1116
- err = lfs_cache_read (lfs , rcache , NULL , head , 4 * i , & head , 4 );
1117
- if (err ) {
1118
- return err ;
1119
- }
1127
+ assert (head >= 2 && head <= lfs -> cfg -> block_count );
1120
1128
}
1121
1129
1122
- assert (head >= 2 && head <= lfs -> cfg -> block_count );
1130
+ * off = 4 * skips ;
1131
+ return 0 ;
1123
1132
}
1124
1133
1125
- * off = 4 * skips ;
1126
- return 0 ;
1127
-
1128
1134
relocate :
1129
1135
LFS_DEBUG ("Bad block at %ld" , * block );
1130
1136
@@ -1160,8 +1166,6 @@ static int lfs_index_traverse(lfs_t *lfs,
1160
1166
1161
1167
index -= 1 ;
1162
1168
}
1163
-
1164
- return 0 ;
1165
1169
}
1166
1170
1167
1171
@@ -1199,7 +1203,7 @@ int lfs_file_open(lfs_t *lfs, lfs_file_t *file,
1199
1203
entry .d .elen = sizeof (entry .d ) - 4 ;
1200
1204
entry .d .alen = 0 ;
1201
1205
entry .d .nlen = strlen (path );
1202
- entry .d .u .file .head = -1 ;
1206
+ entry .d .u .file .head = 0xffffffff ;
1203
1207
entry .d .u .file .size = 0 ;
1204
1208
err = lfs_dir_append (lfs , & cwd , & entry , path );
1205
1209
if (err ) {
@@ -1221,7 +1225,7 @@ int lfs_file_open(lfs_t *lfs, lfs_file_t *file,
1221
1225
file -> pos = 0 ;
1222
1226
1223
1227
if (flags & LFS_O_TRUNC ) {
1224
- file -> head = -1 ;
1228
+ file -> head = 0xffffffff ;
1225
1229
file -> size = 0 ;
1226
1230
}
1227
1231
@@ -1588,13 +1592,13 @@ lfs_soff_t lfs_file_seek(lfs_t *lfs, lfs_file_t *file,
1588
1592
if (whence == LFS_SEEK_SET ) {
1589
1593
file -> pos = off ;
1590
1594
} else if (whence == LFS_SEEK_CUR ) {
1591
- if (- off > file -> pos ) {
1595
+ if (( lfs_off_t ) - off > file -> pos ) {
1592
1596
return LFS_ERR_INVAL ;
1593
1597
}
1594
1598
1595
1599
file -> pos = file -> pos + off ;
1596
1600
} else if (whence == LFS_SEEK_END ) {
1597
- if (- off > file -> size ) {
1601
+ if (( lfs_off_t ) - off > file -> size ) {
1598
1602
return LFS_ERR_INVAL ;
1599
1603
}
1600
1604
0 commit comments