| 158 | } |
| 159 | |
| 160 | s32 CARDOpen(s32 chan, const char *fileName, CARDFileInfo *fileInfo) |
| 161 | { |
| 162 | CARDControl *card; |
| 163 | CARDDir *dir; |
| 164 | CARDDir *ent; |
| 165 | s32 result; |
| 166 | s32 fileNo; |
| 167 | |
| 168 | fileInfo->chan = -1; |
| 169 | result = __CARDGetControlBlock(chan, &card); |
| 170 | if (result < 0) |
| 171 | { |
| 172 | return result; |
| 173 | } |
| 174 | result = __CARDGetFileNo(card, fileName, &fileNo); |
| 175 | if (0 <= result) |
| 176 | { |
| 177 | dir = __CARDGetDirBlock(card); |
| 178 | ent = &dir[fileNo]; |
| 179 | if (!CARDIsValidBlockNo(card, ent->startBlock)) |
| 180 | { |
| 181 | result = CARD_RESULT_BROKEN; |
| 182 | } |
| 183 | else |
| 184 | { |
| 185 | fileInfo->chan = chan; |
| 186 | fileInfo->fileNo = fileNo; |
| 187 | fileInfo->offset = 0; |
| 188 | fileInfo->iBlock = ent->startBlock; |
| 189 | } |
| 190 | } |
| 191 | return __CARDPutControlBlock(card, result); |
| 192 | } |
| 193 | |
| 194 | s32 CARDClose(CARDFileInfo *fileInfo) |
| 195 | { |
no test coverage detected