summaryrefslogtreecommitdiff
path: root/src/os/osPfsFreeBlocks.c
blob: 58f495999a080741c5c799c8907248c610ede55e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include "libultra_internal.h"
#include "controller.h"

s32 osPfsFreeBlocks(OSPfs* pfs, s32* bytes_not_used) {
    int j;
    int pages;
    __OSInode inode;
    s32 ret;
    u8 bank;
    int offset;
    pages = 0;
    ret = 0;
    PFS_CHECK_STATUS;
    PFS_CHECK_ID;
    for (bank = 0; bank < pfs->banks; bank++) {
        ERRCK(__osPfsRWInode(pfs, &inode, OS_READ, bank));
        if (bank > 0) {
            offset = 1;
        } else {
            offset = pfs->inode_start_page;
        }
        for (j = offset; j < ARRLEN(inode.inode_page); j++) {
            if (inode.inode_page[j].ipage == 3) {
                pages++;
            }
        }
    }
    *bytes_not_used = pages * PFS_ONE_PAGE * BLOCKSIZE;
    return 0;
}