|
|
|
@ -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; |
|
|
|
|