PS2 signature: static signed int iSG_isSpaceForFile(class st_ISG_MEMCARD_DATA* mcdata, S32 mcidx, S32 fsize, char* dpath, char* fname, S32* bytesNeeded, S32* availOnDisk)
| 1150 | // static signed int iSG_isSpaceForFile(class st_ISG_MEMCARD_DATA* mcdata, S32 mcidx, S32 fsize, |
| 1151 | // char* dpath, char* fname, S32* bytesNeeded, S32* availOnDisk) |
| 1152 | static S32 iSG_isSpaceForFile(st_ISG_MEMCARD_DATA* mcdata, S32 param2, const char* param3, |
| 1153 | S32* param4, S32* param5, S32* param6) |
| 1154 | { |
| 1155 | S32 rc = 0; |
| 1156 | S32 result = 0; |
| 1157 | s32 byteNotUsed = 0; |
| 1158 | s32 filesNotUsed = 0; |
| 1159 | S32 len; |
| 1160 | |
| 1161 | if (mcdata->unk_0 == 0) |
| 1162 | { |
| 1163 | return 0; |
| 1164 | } |
| 1165 | len = iSG_cubeicon_size(mcdata->chan, mcdata->sectorSize); |
| 1166 | len = len + param2; |
| 1167 | len = ALIGN_THING(mcdata->sectorSize, len); |
| 1168 | |
| 1169 | do |
| 1170 | { |
| 1171 | result = CARDFreeBlocks(mcdata->chan, &byteNotUsed, &filesNotUsed); |
| 1172 | } while (result == CARD_RESULT_BUSY); |
| 1173 | |
| 1174 | if (result == CARD_RESULT_READY) |
| 1175 | { |
| 1176 | if (param5) |
| 1177 | { |
| 1178 | *param5 = byteNotUsed / mcdata->sectorSize; |
| 1179 | } |
| 1180 | if (param4) |
| 1181 | { |
| 1182 | *param4 = len / mcdata->sectorSize; |
| 1183 | } |
| 1184 | } |
| 1185 | else |
| 1186 | { |
| 1187 | return 0; |
| 1188 | } |
| 1189 | |
| 1190 | if (param6) |
| 1191 | { |
| 1192 | *param6 = 1; |
| 1193 | } |
| 1194 | |
| 1195 | if (iSG_get_finfo(mcdata, param3)) |
| 1196 | { |
| 1197 | if (param6) |
| 1198 | { |
| 1199 | *param6 = *param6 - 1 & ~(*param6 - 1 >> 0x1f); // FIXME: Fakematch |
| 1200 | } |
| 1201 | if (len <= mcdata->unk_b0.length + byteNotUsed) |
| 1202 | { |
| 1203 | rc = 1; |
| 1204 | } |
| 1205 | } |
| 1206 | else |
| 1207 | { |
| 1208 | if (len <= byteNotUsed && filesNotUsed > 0) |
| 1209 | { |
no test coverage detected