|
|
@@ -859,11 +859,12 @@ int lfs_dir_rewind(lfs_t *lfs, lfs_dir_t *dir) {
|
|
|
/// File index list operations ///
|
|
|
static int lfs_index(lfs_t *lfs, lfs_off_t *off) {
|
|
|
lfs_off_t i = 0;
|
|
|
+ lfs_size_t words = lfs->cfg->block_size / 4;
|
|
|
|
|
|
while (*off >= lfs->cfg->block_size) {
|
|
|
i += 1;
|
|
|
*off -= lfs->cfg->block_size;
|
|
|
- *off += 4*lfs_min(lfs_ctz(i)+1, lfs->words-1);
|
|
|
+ *off += 4*lfs_min(lfs_ctz(i)+1, words-1);
|
|
|
}
|
|
|
|
|
|
return i;
|
|
|
@@ -881,11 +882,12 @@ static int lfs_index_find(lfs_t *lfs,
|
|
|
|
|
|
lfs_off_t current = lfs_index(lfs, &(lfs_off_t){size-1});
|
|
|
lfs_off_t target = lfs_index(lfs, &pos);
|
|
|
+ lfs_size_t words = lfs->cfg->block_size / 4;
|
|
|
|
|
|
while (current > target) {
|
|
|
lfs_size_t skip = lfs_min(
|
|
|
lfs_npw2(current-target+1) - 1,
|
|
|
- lfs_min(lfs_ctz(current)+1, lfs->words-1) - 1);
|
|
|
+ lfs_min(lfs_ctz(current)+1, words-1) - 1);
|
|
|
|
|
|
int err = lfs_cache_read(lfs, rcache, pcache, head, 4*skip, &head, 4);
|
|
|
if (err) {
|
|
|
@@ -945,7 +947,8 @@ static int lfs_index_extend(lfs_t *lfs,
|
|
|
|
|
|
// append block
|
|
|
index += 1;
|
|
|
- lfs_size_t skips = lfs_min(lfs_ctz(index)+1, lfs->words-1);
|
|
|
+ lfs_size_t words = lfs->cfg->block_size / 4;
|
|
|
+ lfs_size_t skips = lfs_min(lfs_ctz(index)+1, words-1);
|
|
|
|
|
|
for (lfs_off_t i = 0; i < skips; i++) {
|
|
|
int err = lfs_cache_prog(lfs, pcache, *block, 4*i, &head, 4);
|
|
|
@@ -1538,7 +1541,6 @@ int lfs_rename(lfs_t *lfs, const char *oldpath, const char *newpath) {
|
|
|
/// Filesystem operations ///
|
|
|
static int lfs_init(lfs_t *lfs, const struct lfs_config *cfg) {
|
|
|
lfs->cfg = cfg;
|
|
|
- lfs->words = lfs->cfg->block_size / sizeof(uint32_t);
|
|
|
|
|
|
// setup read cache
|
|
|
lfs->rcache.block = 0xffffffff;
|