mufs: optimise memory footprint of find_dirent_size()

tags/0.1.0
S.J.R. van Schaik 8 years ago
parent 6d73d7a655
commit 555e28e229
  1. 16
      source/fs/mufs/dir.c

@ -195,26 +195,24 @@ size_t find_dirent_size(struct mufs *fs, struct mufs_tree *tree,
{ {
struct flash_dev *dev = fs->dev; struct flash_dev *dev = fs->dev;
size_t block_size = 1 << dev->log2_block_size; size_t block_size = 1 << dev->log2_block_size;
char data[block_size]; struct mufs_dentry entry;
struct mufs_dentry *entry;
uint32_t offset, len; uint32_t offset, len;
va = align(va, dev->log2_block_size); va = align(va, dev->log2_block_size);
if (mufs_tree_read(tree, data, va, 1 << dev->log2_block_size) == 0)
return 0;
for (offset = 0; offset < block_size; offset += len) { for (offset = 0; offset < block_size; offset += len) {
entry = (struct mufs_dentry *)(data + offset); len = sizeof entry;
len = sizeof *entry;
if (block_size - offset < len) if (block_size - offset < len)
break; break;
if (!entry->type) if (mufs_tree_read(tree, &entry, va + offset, sizeof entry) == 0)
break;
if (!entry.type)
break; break;
len += entry->path_len; len += entry.path_len;
if (block_size - offset < len) if (block_size - offset < len)
break; break;

Loading…
Cancel
Save