@@ -17,6 +17,7 @@ static int lfs_cache_read(lfs_t *lfs, lfs_cache_t *rcache,
17
17
const lfs_cache_t * pcache , lfs_block_t block ,
18
18
lfs_off_t off , void * buffer , lfs_size_t size ) {
19
19
uint8_t * data = buffer ;
20
+ assert (block < lfs -> cfg -> block_count );
20
21
21
22
while (size > 0 ) {
22
23
if (pcache && block == pcache -> block && off >= pcache -> off &&
@@ -73,14 +74,14 @@ static int lfs_cache_read(lfs_t *lfs, lfs_cache_t *rcache,
73
74
}
74
75
75
76
static int lfs_cache_flush (lfs_t * lfs , lfs_cache_t * cache ) {
76
- if (cache -> off != -1 ) {
77
+ if (cache -> block != 0xffffffff ) {
77
78
int err = lfs -> cfg -> prog (lfs -> cfg , cache -> block ,
78
79
cache -> off , cache -> buffer , lfs -> cfg -> prog_size );
79
80
if (err ) {
80
81
return err ;
81
82
}
82
83
83
- cache -> off = -1 ;
84
+ cache -> block = 0xffffffff ;
84
85
}
85
86
86
87
return 0 ;
@@ -89,6 +90,7 @@ static int lfs_cache_flush(lfs_t *lfs, lfs_cache_t *cache) {
89
90
static int lfs_cache_prog (lfs_t * lfs , lfs_cache_t * cache , lfs_block_t block ,
90
91
lfs_off_t off , const void * buffer , lfs_size_t size ) {
91
92
const uint8_t * data = buffer ;
93
+ assert (block < lfs -> cfg -> block_count );
92
94
93
95
while (size > 0 ) {
94
96
if (block == cache -> block && off >= cache -> off &&
@@ -115,7 +117,7 @@ static int lfs_cache_prog(lfs_t *lfs, lfs_cache_t *cache, lfs_block_t block,
115
117
116
118
// cache must have been flushed, either by programming and
117
119
// entire block or manually flushing the cache
118
- assert (cache -> off == -1 );
120
+ assert (cache -> block == 0xffffffff );
119
121
120
122
if (off % lfs -> cfg -> prog_size == 0 &&
121
123
size >= lfs -> cfg -> prog_size ) {
@@ -264,7 +266,7 @@ static inline void lfs_pairswap(lfs_block_t pair[2]) {
264
266
}
265
267
266
268
static inline bool lfs_pairisnull (const lfs_block_t pair [2 ]) {
267
- return ! pair [0 ] && ! pair [1 ];
269
+ return pair [0 ] == 0xffffffff || pair [1 ] == 0xffffffff ;
268
270
}
269
271
270
272
static inline int lfs_paircmp (
@@ -298,8 +300,8 @@ static int lfs_dir_alloc(lfs_t *lfs, lfs_dir_t *dir) {
298
300
// set defaults
299
301
dir -> d .rev += 1 ;
300
302
dir -> d .size = sizeof (dir -> d );
301
- dir -> d .tail [0 ] = 0 ;
302
- dir -> d .tail [1 ] = 0 ;
303
+ dir -> d .tail [0 ] = -1 ;
304
+ dir -> d .tail [1 ] = -1 ;
303
305
dir -> off = sizeof (dir -> d );
304
306
305
307
// don't write out yet, let caller take care of that
@@ -872,7 +874,7 @@ static int lfs_index_find(lfs_t *lfs,
872
874
lfs_block_t head , lfs_size_t size ,
873
875
lfs_size_t pos , lfs_block_t * block , lfs_off_t * off ) {
874
876
if (size == 0 ) {
875
- * block = 0 ;
877
+ * block = -1 ;
876
878
* off = 0 ;
877
879
return 0 ;
878
880
}
@@ -1019,7 +1021,7 @@ int lfs_file_open(lfs_t *lfs, lfs_file_t *file,
1019
1021
// create entry to remember name
1020
1022
entry .d .type = LFS_TYPE_REG ;
1021
1023
entry .d .len = sizeof (entry .d ) + strlen (path );
1022
- entry .d .u .file .head = 0 ;
1024
+ entry .d .u .file .head = -1 ;
1023
1025
entry .d .u .file .size = 0 ;
1024
1026
err = lfs_dir_append (lfs , & cwd , & entry , path );
1025
1027
if (err ) {
@@ -1039,15 +1041,15 @@ int lfs_file_open(lfs_t *lfs, lfs_file_t *file,
1039
1041
file -> size = entry .d .u .file .size ;
1040
1042
file -> flags = flags ;
1041
1043
file -> pos = 0 ;
1042
- file -> block = 0 ;
1044
+ file -> block = -1 ; // TODO rm me?
1043
1045
1044
1046
if (flags & LFS_O_TRUNC ) {
1045
- file -> head = 0 ;
1047
+ file -> head = -1 ;
1046
1048
file -> size = 0 ;
1047
1049
}
1048
1050
1049
1051
// allocate buffer if needed
1050
- file -> cache .off = -1 ;
1052
+ file -> cache .block = 0xffffffff ;
1051
1053
if (lfs -> cfg -> file_buffer ) {
1052
1054
file -> cache .buffer = lfs -> cfg -> file_buffer ;
1053
1055
} else if ((file -> flags & 3 ) == LFS_O_RDONLY ) {
@@ -1091,7 +1093,7 @@ int lfs_file_close(lfs_t *lfs, lfs_file_t *file) {
1091
1093
static int lfs_file_flush (lfs_t * lfs , lfs_file_t * file ) {
1092
1094
if (file -> flags & LFS_F_READING ) {
1093
1095
// just drop read cache
1094
- file -> cache .off = -1 ;
1096
+ file -> cache .block = 0xffffffff ;
1095
1097
file -> flags &= ~LFS_F_READING ;
1096
1098
}
1097
1099
@@ -1106,7 +1108,7 @@ static int lfs_file_flush(lfs_t *lfs, lfs_file_t *file) {
1106
1108
.pos = file -> pos ,
1107
1109
.cache = lfs -> rcache ,
1108
1110
};
1109
- lfs -> rcache .off = -1 ;
1111
+ lfs -> rcache .block = 0xffffffff ;
1110
1112
1111
1113
while (file -> pos < file -> size ) {
1112
1114
// copy over a byte at a time, leave it up to caching
@@ -1123,9 +1125,9 @@ static int lfs_file_flush(lfs_t *lfs, lfs_file_t *file) {
1123
1125
}
1124
1126
1125
1127
// keep our reference to the rcache in sync
1126
- if (lfs -> rcache .off != -1 ) {
1127
- orig .cache .off = -1 ;
1128
- lfs -> rcache .off = -1 ;
1128
+ if (lfs -> rcache .block != 0xffffffff ) {
1129
+ orig .cache .block = 0xffffffff ;
1130
+ lfs -> rcache .block = 0xffffffff ;
1129
1131
}
1130
1132
}
1131
1133
@@ -1273,7 +1275,7 @@ lfs_ssize_t lfs_file_write(lfs_t *lfs, lfs_file_t *file,
1273
1275
}
1274
1276
1275
1277
// mark cache as dirty since we may have read data into it
1276
- file -> cache .off = -1 ;
1278
+ file -> cache .block = 0xffffffff ;
1277
1279
file -> flags |= LFS_F_WRITING ;
1278
1280
}
1279
1281
@@ -1515,7 +1517,7 @@ static int lfs_init(lfs_t *lfs, const struct lfs_config *cfg) {
1515
1517
lfs -> words = lfs -> cfg -> block_size / sizeof (uint32_t );
1516
1518
1517
1519
// setup read cache
1518
- lfs -> rcache .off = -1 ;
1520
+ lfs -> rcache .block = 0xffffffff ;
1519
1521
if (lfs -> cfg -> read_buffer ) {
1520
1522
lfs -> rcache .buffer = lfs -> cfg -> read_buffer ;
1521
1523
} else {
@@ -1526,7 +1528,7 @@ static int lfs_init(lfs_t *lfs, const struct lfs_config *cfg) {
1526
1528
}
1527
1529
1528
1530
// setup program cache
1529
- lfs -> pcache .off = -1 ;
1531
+ lfs -> pcache .block = 0xffffffff ;
1530
1532
if (lfs -> cfg -> prog_buffer ) {
1531
1533
lfs -> pcache .buffer = lfs -> cfg -> prog_buffer ;
1532
1534
} else {
0 commit comments