Shipwright/soh/src/libultra/io/pfsfreeblocks.c
M4xw 39cc86c260 git subrepo clone https://github.com/HarbourMasters/soh.git
subrepo:
  subdir:   "soh"
  merged:   "ba904bbd0"
upstream:
  origin:   "https://github.com/HarbourMasters/soh.git"
  branch:   "master"
  commit:   "ba904bbd0"
git-subrepo:
  version:  "0.4.1"
  origin:   "???"
  commit:   "???"
2022-03-22 02:51:23 +01:00

36 lines
866 B
C

#include "ultra64.h"
#include "global.h"
#include "ultra64/pfs.h"
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);
}
if ((ret = __osCheckId(pfs)) != 0) {
return ret;
}
for (bank = PFS_ID_BANK_256K; bank < pfs->banks; bank++) {
if ((ret = __osPfsRWInode(pfs, &inode, PFS_READ, bank)) != 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;
}