summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEllipticEllipsis <73679967+EllipticEllipsis@users.noreply.github.com>2021-12-27 03:36:06 +0000
committerGitHub <noreply@github.com>2021-12-27 03:36:06 +0000
commit8ebdb504701d136c2d716117712948495ca61bb9 (patch)
tree559af1ffb0f5cbcdb5fc9e4387c559141d109bf5 /src
parent2664f75ac2e041156e6aaa2d63a7dab5cacc6b67 (diff)
pfsfreeblocks OK (#423)
* pfsfreeblocks OK * Update src/libultra/io/pfsfreeblocks.c Co-authored-by: Tharo <17233964+Thar0@users.noreply.github.com> Co-authored-by: Tharo <17233964+Thar0@users.noreply.github.com>
Diffstat (limited to 'src')
-rw-r--r--src/libultra/io/pfsfreeblocks.c36
1 files changed, 35 insertions, 1 deletions
diff --git a/src/libultra/io/pfsfreeblocks.c b/src/libultra/io/pfsfreeblocks.c
index af10a5b88..b90979c59 100644
--- a/src/libultra/io/pfsfreeblocks.c
+++ b/src/libultra/io/pfsfreeblocks.c
@@ -1,3 +1,37 @@
#include "global.h"
+#include "PR/pfs.h"
-#pragma GLOBAL_ASM("asm/non_matchings/boot/pfsfreeblocks/osPfsFreeBlocks.s")
+s32 osPfsFreeBlocks(OSPfs* pfs, s32* leftoverBytes) {
+ s32 j;
+ s32 pages = 0;
+ __OSInode inode;
+ s32 ret = 0;
+ u8 bank;
+ s32 offset;
+
+ if (!(pfs->status & PFS_INITIALIZED)) {
+ return PFS_ERR_INVALID;
+ }
+
+ ret = __osCheckId(pfs);
+ if (ret != 0) {
+ return ret;
+ }
+
+ for (bank = PFS_ID_BANK_256K; bank < pfs->banks; bank++) {
+ ret = __osPfsRWInode(pfs, &inode, PFS_READ, bank);
+ if (ret != 0) {
+ return ret;
+ }
+
+ offset = ((bank > PFS_ID_BANK_256K) ? 1 : pfs->inodeStartPage);
+ for (j = offset; j < PFS_INODE_SIZE_PER_PAGE; j++) {
+ if (inode.inodePage[j].ipage == PFS_PAGE_NOT_USED) {
+ pages++;
+ }
+ }
+ }
+
+ *leftoverBytes = pages * PFS_ONE_PAGE * BLOCKSIZE;
+ return 0;
+}