From f67791b511dc6c2bf8a0b4c12e31f7d1c1c8c9c5 Mon Sep 17 00:00:00 2001 From: Christopher Haster Date: Fri, 25 Apr 2025 14:37:09 -0500 Subject: [PATCH] Dropped bmoss/bsprout support from lfsr_stat_ I think this was just overlooked when dropping bmoss/bsprouts. Dropping bmoss here makes it so file size is always the first leb128 in the data, which is nice. Saves a bit of code: code stack ctx before: 35864 2440 640 after: 35820 (-0.1%) 2440 (+0.0%) 640 (+0.0%) --- lfs.c | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/lfs.c b/lfs.c index 63e28a6f..01e021a4 100644 --- a/lfs.c +++ b/lfs.c @@ -10724,28 +10724,22 @@ static int lfsr_stat_(lfs_t *lfs, const lfsr_mdir_t *mdir, } info->name[name_len] = '\0'; - // get file size if we're a regular file, this gets a bit messy - // because of the different file representations + // default size to zero info->size = 0; + + // get file size if we're a regular file if (tag == LFSR_TAG_REG) { - // inlined? lfsr_tag_t tag; lfsr_data_t data; - int err = lfsr_mdir_lookupnext(lfs, mdir, LFSR_TAG_DATA, + int err = lfsr_mdir_lookup(lfs, mdir, + LFSR_TAG_MASK8 | LFSR_TAG_STRUCT, &tag, &data); if (err && err != LFS_ERR_NOENT) { return err; } - // may be a moss (simple inlined data) - if (err != LFS_ERR_NOENT && tag == LFSR_TAG_DATA) { - info->size = lfsr_data_size(data); - - // or a block/bshrub/btree, size is always first field here - } else if (err != LFS_ERR_NOENT - && (tag == LFSR_TAG_BLOCK - || tag == LFSR_TAG_BSHRUB - || tag == LFSR_TAG_BTREE)) { + if (err != LFS_ERR_NOENT) { + // in bshrubs/btrees, size is always the first field err = lfsr_data_readleb128(lfs, &data, &info->size); if (err) { return err;