From 746b90965cfd5d81b91af6d6a63362adf0e08060 Mon Sep 17 00:00:00 2001 From: Christopher Haster Date: Sun, 8 Apr 2018 22:25:58 -0500 Subject: [PATCH] Added lfs_fs_size for finding a count of used blocks This has existed for some time in the form of the lfs_traverse function, through which a user could provide a simple callback that would just count the number of blocks lfs_traverse finds. However, this approach is relatively unconventional and has proven to be confusing for most users. --- lfs.c | 16 ++++++++++++++++ lfs.h | 8 ++++++++ 2 files changed, 24 insertions(+) diff --git a/lfs.c b/lfs.c index efc8744..12c903f 100644 --- a/lfs.c +++ b/lfs.c @@ -3183,3 +3183,19 @@ int lfs_fs_setattrs(lfs_t *lfs, const struct lfs_attr *attrs, int count) { return lfs_dir_setattrs(lfs, &dir, &entry, attrs, count); } + +static int lfs_fs_size_count(void *p, lfs_block_t block) { + lfs_size_t *size = p; + *size += 1; + return 0; +} + +lfs_ssize_t lfs_fs_size(lfs_t *lfs) { + lfs_size_t size = 0; + int err = lfs_traverse(lfs, lfs_fs_size_count, &size); + if (err) { + return err; + } + + return size; +} diff --git a/lfs.h b/lfs.h index 1e81a38..3fd3ba1 100644 --- a/lfs.h +++ b/lfs.h @@ -590,6 +590,14 @@ int lfs_fs_getattrs(lfs_t *lfs, const struct lfs_attr *attrs, int count); // Returns a negative error code on failure. int lfs_fs_setattrs(lfs_t *lfs, const struct lfs_attr *attrs, int count); +// Finds the current size of the filesystem +// +// Note: Result is best effort. If files share COW structures, the returned +// size may be larger than the filesystem actually is. +// +// Returns the number of allocated blocks, or a negative error code on failure. +lfs_ssize_t lfs_fs_size(lfs_t *lfs); + /// Miscellaneous littlefs specific operations ///