From 6af43aec5b3d72f2025dc06496a6e1f505739be0 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 function for finding a count of used blocks This has existed for some time in the form of the lfs_traverse function, however lfs_traverse is relatively unconventional and has proven to not have been the most intuitive for 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 ///