mufs: clean up calculation of the va of a tree object in read_dirent()

tags/0.1.0
S.J.R. van Schaik 8 years ago
parent 93c0466c90
commit 58f6e87854
  1. 17
      source/fs/mufs/dir.c

@ -179,10 +179,14 @@ void mufs_closedir(struct mufs_dir *dir)
static size_t read_dirent(struct mufs *fs, struct mufs_tree *tree,
struct mufs_dirent *dirent, uint32_t va)
{
struct flash_dev *dev = fs->dev;
struct mufs_dentry entry;
size_t ret = 0;
size_t len;
uint32_t base = va;
uint32_t base, offset;
offset = va & ((UINT32_C(1) << dev->log2_block_size) - 1);
base = align(va, dev->log2_block_size);
if (va + sizeof(entry) > tree->file_size)
return 0;
@ -208,17 +212,12 @@ static size_t read_dirent(struct mufs *fs, struct mufs_tree *tree,
dirent->type = entry.type;
struct flash_dev *dev = fs->dev;
if (mufs_lookup_page(tree, &dirent->tree.va,
base & ~((UINT32_C(1) << dev->log2_block_size) - 1)) < 0)
if (mufs_lookup_page(tree, &dirent->tree.va, base) < 0)
return 0;
dirent->tree.fs = fs;
dirent->tree.va = dirent->tree.va << dev->log2_block_size;
/* TODO: get a proper offset to the tree. */
dirent->tree.va += offsetof(struct mufs_dentry, tree);
dirent->tree.va += base & ((UINT32_C(1) << dev->log2_block_size) - 1);
dirent->tree.va = (dirent->tree.va << dev->log2_block_size) + offset +
offsetof(struct mufs_dentry, tree);
dirent->tree.file_size = entry.tree.file_size;
dirent->tree.root = entry.tree.root;
dirent->tree.depth = entry.tree.depth;

Loading…
Cancel
Save