MCPcopy Create free account
hub / github.com/bfbbdecomp/bfbb / __CARDAllocBlock

Function __CARDAllocBlock

src/dolphin/src/card/CARDBlock.c:74–121  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

72}
73
74s32 __CARDAllocBlock(s32 chan, u32 cBlock, CARDCallback callback) {
75 CARDControl* card;
76 u16* fat;
77 u16 iBlock;
78 u16 startBlock;
79 u16 prevBlock;
80 u16 count;
81
82 card = &__CARDBlock[chan];
83 if (!card->attached) {
84 return CARD_RESULT_NOCARD;
85 }
86
87 fat = __CARDGetFatBlock(card);
88 if (fat[3] < cBlock) {
89 return CARD_RESULT_INSSPACE;
90 }
91
92 fat[3] -= cBlock;
93 startBlock = 0xFFFF;
94 iBlock = fat[4];
95 count = 0;
96 while (0 < cBlock) {
97 if (card->cBlock - 5 < ++count) {
98 return CARD_RESULT_BROKEN;
99 }
100
101 iBlock++;
102 if (!CARDIsValidBlockNo(card, iBlock)) {
103 iBlock = 5;
104 }
105
106 if (fat[iBlock] == 0x0000u) {
107 if (startBlock == 0xFFFF) {
108 startBlock = iBlock;
109 } else {
110 fat[prevBlock] = iBlock;
111 }
112 prevBlock = iBlock;
113 fat[iBlock] = 0xFFFF;
114 --cBlock;
115 }
116 }
117 fat[4] = iBlock;
118 card->startBlock = startBlock;
119
120 return __CARDUpdateFatBlock(chan, fat, callback);
121}
122
123s32 __CARDFreeBlock(s32 chan, u16 nBlock, CARDCallback callback) {
124 CARDControl* card;

Callers 1

CARDCreateAsyncFunction · 0.85

Calls 2

__CARDGetFatBlockFunction · 0.85
__CARDUpdateFatBlockFunction · 0.85

Tested by

no test coverage detected