@@ -74,32 +74,39 @@ namespace coreinit
74
74
75
75
FS_RESULT FSGetMountSourceNext (FSClient_t* fsClient, FSCmdBlock_t* fsCmdBlock, MOUNT_TYPE mountSourceType, FS_MOUNT_SOURCE* mountSourceInfo, FS_ERROR_MASK errMask)
76
76
{
77
- // hacky
78
- static FS_MOUNT_SOURCE* s_last_source = nullptr ;
79
- if (s_last_source != mountSourceInfo)
77
+ if (mountSourceType == MOUNT_TYPE::SD)
80
78
{
81
- s_last_source = mountSourceInfo;
82
- fsCmdBlock->data .mount_it = 0 ;
79
+ // This function is supposed to be called after an initial FSGetMountSource call => always returns FS_RESULT::END_ITERATION because we only have one SD Card
80
+ // It *might* causes issues if this function is called for getting the first MountSource (instead of "FSGetMountSource")
81
+ cemu_assert_suspicious ();
82
+ return FS_RESULT::END_ITERATION;
83
+ }
84
+ else
85
+ {
86
+ cemu_assert_unimplemented ();
83
87
}
84
88
85
- fsCmdBlock->data .mount_it ++;
89
+ return FS_RESULT::END_ITERATION;
90
+ }
86
91
87
- // SD
88
- if (mountSourceType == MOUNT_TYPE::SD && fsCmdBlock->data .mount_it == 1 )
92
+ FS_RESULT FSGetMountSource (FSClient_t* fsClient, FSCmdBlock_t* fsCmdBlock, MOUNT_TYPE mountSourceType, FS_MOUNT_SOURCE* mountSourceInfo, FS_ERROR_MASK errMask)
93
+ {
94
+ // This implementation is simplified A LOT compared to what the Wii U is actually doing. On Cemu we expect to only have one mountable source (SD Card) anyway,
95
+ // so we can just hard code it. Other mount types are not (yet) supported.
96
+ if (mountSourceType == MOUNT_TYPE::SD)
89
97
{
90
98
mountSourceInfo->sourceType = 0 ;
91
99
strcpy (mountSourceInfo->path , " /sd" );
92
100
return FS_RESULT::SUCCESS;
93
101
}
102
+ else
103
+ {
104
+ cemu_assert_unimplemented ();
105
+ }
94
106
95
107
return FS_RESULT::END_ITERATION;
96
108
}
97
109
98
- FS_RESULT FSGetMountSource (FSClient_t* fsClient, FSCmdBlock_t* fsCmdBlock, MOUNT_TYPE mountSourceType, FS_MOUNT_SOURCE* mountSourceInfo, FS_ERROR_MASK errMask)
99
- {
100
- return FSGetMountSourceNext (fsClient, fsCmdBlock, mountSourceType, mountSourceInfo, errMask);
101
- }
102
-
103
110
bool _sdCard01Mounted = false ;
104
111
bool _mlc01Mounted = false ;
105
112
@@ -1399,7 +1406,7 @@ namespace coreinit
1399
1406
return __FSProcessAsyncResult (fsClient, fsCmdBlock, fsAsyncRet, errorMask);
1400
1407
}
1401
1408
1402
- FSA_RESULT __FSPrepareCmd_AppendFile (iosu::fsa::FSAShimBuffer* fsaShimBuffer, IOSDevHandle fsaHandle, uint32 fileHandle , uint32 size , uint32 count , uint32 uknParam)
1409
+ FSA_RESULT __FSPrepareCmd_AppendFile (iosu::fsa::FSAShimBuffer* fsaShimBuffer, IOSDevHandle fsaHandle, uint32 size , uint32 count , uint32 fileHandle , uint32 uknParam)
1403
1410
{
1404
1411
if (fsaShimBuffer == nullptr )
1405
1412
return FSA_RESULT::INVALID_BUFFER;
@@ -1408,29 +1415,29 @@ namespace coreinit
1408
1415
fsaShimBuffer->operationType = (uint32)FSA_CMD_OPERATION_TYPE::APPENDFILE;
1409
1416
1410
1417
fsaShimBuffer->request .cmdAppendFile .fileHandle = fileHandle;
1411
- fsaShimBuffer->request .cmdAppendFile .count = size ;
1412
- fsaShimBuffer->request .cmdAppendFile .size = count ;
1418
+ fsaShimBuffer->request .cmdAppendFile .count = count ;
1419
+ fsaShimBuffer->request .cmdAppendFile .size = size ;
1413
1420
fsaShimBuffer->request .cmdAppendFile .uknParam = uknParam;
1414
1421
1415
1422
return FSA_RESULT::OK;
1416
1423
}
1417
1424
1418
- sint32 FSAppendFileAsync (FSClient_t* fsClient, FSCmdBlock_t* fsCmdBlock, uint32 fileHandle , uint32 size , uint32 count , uint32 errorMask, FSAsyncParamsNew_t* fsAsyncParams)
1425
+ sint32 FSAppendFileAsync (FSClient_t* fsClient, FSCmdBlock_t* fsCmdBlock, uint32 size , uint32 count , uint32 fileHandle , uint32 errorMask, FSAsyncParamsNew_t* fsAsyncParams)
1419
1426
{
1420
1427
_FSCmdIntro ();
1421
- FSA_RESULT prepareResult = __FSPrepareCmd_AppendFile (&fsCmdBlockBody->fsaShimBuffer , fsClientBody->iosuFSAHandle , fileHandle, size, count, 0 );
1428
+ FSA_RESULT prepareResult = __FSPrepareCmd_AppendFile (&fsCmdBlockBody->fsaShimBuffer , fsClientBody->iosuFSAHandle , size, count, fileHandle , 0 );
1422
1429
if (prepareResult != FSA_RESULT::OK)
1423
1430
return (FSStatus)_FSAStatusToFSStatus (prepareResult);
1424
1431
1425
1432
__FSQueueCmd (&fsClientBody->fsCmdQueue , fsCmdBlockBody, RPLLoader_MakePPCCallable (export___FSQueueDefaultFinishFunc));
1426
1433
return (FSStatus)FS_RESULT::SUCCESS;
1427
1434
}
1428
1435
1429
- sint32 FSAppendFile (FSClient_t* fsClient, FSCmdBlock_t* fsCmdBlock, uint32 fileHandle , uint32 size , uint32 count, uint32 errorMask)
1436
+ sint32 FSAppendFile (FSClient_t* fsClient, FSCmdBlock_t* fsCmdBlock, uint32 size , uint32 count , uint32 fileHandle, uint32 errorMask)
1430
1437
{
1431
1438
StackAllocator<FSAsyncParamsNew_t> asyncParams;
1432
1439
__FSAsyncToSyncInit (fsClient, fsCmdBlock, asyncParams);
1433
- sint32 fsAsyncRet = FSAppendFileAsync (fsClient, fsCmdBlock, fileHandle, size, count, errorMask, asyncParams.GetPointer ());
1440
+ sint32 fsAsyncRet = FSAppendFileAsync (fsClient, fsCmdBlock, size, count, fileHandle , errorMask, asyncParams.GetPointer ());
1434
1441
return __FSProcessAsyncResult (fsClient, fsCmdBlock, fsAsyncRet, errorMask);
1435
1442
}
1436
1443
0 commit comments