From 555e28e2296dec2ea18d38b88cc941c4cbc3bc0d Mon Sep 17 00:00:00 2001 From: "S.J.R. van Schaik" Date: Fri, 16 Jun 2017 15:46:55 +0200 Subject: [PATCH] mufs: optimise memory footprint of find_dirent_size() --- source/fs/mufs/dir.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/source/fs/mufs/dir.c b/source/fs/mufs/dir.c index 1e3cd6c..70e2471 100644 --- a/source/fs/mufs/dir.c +++ b/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; 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; 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) { - entry = (struct mufs_dentry *)(data + offset); - len = sizeof *entry; + len = sizeof entry; if (block_size - offset < len) break; - if (!entry->type) + if (mufs_tree_read(tree, &entry, va + offset, sizeof entry) == 0) + break; + + if (!entry.type) break; - len += entry->path_len; + len += entry.path_len; if (block_size - offset < len) break;