Bläddra i källkod

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.
Christopher Haster 7 år sedan
förälder
incheckning
746b90965c
2 ändrade filer med 24 tillägg och 0 borttagningar
  1. 16 0
      lfs.c
  2. 8 0
      lfs.h

+ 16 - 0
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;
+}

+ 8 - 0
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 ///