-dont use frag list on wbfs partitions, they are not needed

-fixed booting games from wbfs via waninkoko cIOS r17 or older
-fixed partition handle wbfs detection
This commit is contained in:
fix94.1 2012-07-20 21:18:29 +00:00
parent 8d099e9041
commit 0b1562fcdf
5 changed files with 14 additions and 12 deletions

View File

@ -152,8 +152,7 @@ bool PartitionHandle::Mount(int pos, const char * name, bool forceFAT)
return true; return true;
} }
} }
else if(strncmp(GetFSName(pos), "NTFS", 4) == 0 || strcmp(GetFSName(pos), "GUID-Entry") == 0)
if(strncmp(GetFSName(pos), "NTFS", 4) == 0 || strcmp(GetFSName(pos), "GUID-Entry") == 0)
{ {
if(ntfsMount(MountNameList[pos].c_str(), interface, GetLBAStart(pos), CACHE, SECTORS, NTFS_SHOW_HIDDEN_FILES | NTFS_RECOVER)) if(ntfsMount(MountNameList[pos].c_str(), interface, GetLBAStart(pos), CACHE, SECTORS, NTFS_SHOW_HIDDEN_FILES | NTFS_RECOVER))
{ {
@ -161,8 +160,7 @@ bool PartitionHandle::Mount(int pos, const char * name, bool forceFAT)
return true; return true;
} }
} }
else if(strncmp(GetFSName(pos), "LINUX", 5) == 0 || strcmp(GetFSName(pos), "GUID-Entry") == 0)
if(strncmp(GetFSName(pos), "LINUX", 5) == 0 || strcmp(GetFSName(pos), "GUID-Entry") == 0)
{ {
if(ext2Mount(MountNameList[pos].c_str(), interface, GetLBAStart(pos), CACHE, SECTORS, EXT2_FLAG_DEFAULT)) if(ext2Mount(MountNameList[pos].c_str(), interface, GetLBAStart(pos), CACHE, SECTORS, EXT2_FLAG_DEFAULT))
{ {
@ -177,8 +175,11 @@ bool PartitionHandle::Mount(int pos, const char * name, bool forceFAT)
else if(interface == &__io_sdhc) else if(interface == &__io_sdhc)
SetWbfsHandle(pos, wbfs_open_partition(__WBFS_ReadSDHC, __WBFS_WriteSDHC, NULL, 512, GetSecCount(pos), GetLBAStart(pos), 0)); SetWbfsHandle(pos, wbfs_open_partition(__WBFS_ReadSDHC, __WBFS_WriteSDHC, NULL, 512, GetSecCount(pos), GetLBAStart(pos), 0));
if(GetWbfsHandle(pos)) if(GetWbfsHandle(pos))
{
PartitionList[pos].FSName = "WBFS";
return true; return true;
} }
}
MountNameList[pos].clear(); MountNameList[pos].clear();

View File

@ -299,15 +299,15 @@ s32 Disc_Wait(void)
return 0; return 0;
} }
s32 Disc_SetUSB(const u8 *id) s32 Disc_SetUSB(const u8 *id, bool frag)
{ {
if(id) if(id && frag)
return set_frag_list((u8 *) id); return set_frag_list((u8 *) id);
s32 part = -1; s32 part = -1;
if(is_ios_type(IOS_TYPE_HERMES, IOS_GetVersion())) if(is_ios_type(IOS_TYPE_HERMES, IOS_GetVersion()))
part = wbfs_part_idx ? wbfs_part_idx - 1 : 0; part = wbfs_part_idx ? wbfs_part_idx - 1 : 0;
return WDVD_SetUSBMode(wbfsDev, (u8 *) id, part); return WDVD_SetUSBMode(wbfsDev, (u8*)id, part);
} }
s32 Disc_ReadHeader(void *outbuf) s32 Disc_ReadHeader(void *outbuf)

View File

@ -97,7 +97,7 @@ extern "C" {
s32 Disc_Init(void); s32 Disc_Init(void);
s32 Disc_Open(bool); s32 Disc_Open(bool);
s32 Disc_Wait(void); s32 Disc_Wait(void);
s32 Disc_SetUSB(const u8 *); s32 Disc_SetUSB(const u8 *id, bool frag);
s32 Disc_ReadHeader(void *); s32 Disc_ReadHeader(void *);
s32 Disc_ReadGCHeader(void *); s32 Disc_ReadGCHeader(void *);
s32 Disc_Type(bool); s32 Disc_Type(bool);

View File

@ -1152,7 +1152,7 @@ void CMenu::_launchGame(dir_discHdr *hdr, bool dvd)
#ifndef DOLPHIN #ifndef DOLPHIN
if(!neek2o()) if(!neek2o())
{ {
Disc_SetUSB(NULL); Disc_SetUSB(NULL, false);
if (WDVD_GetCoverStatus(&cover) < 0) if (WDVD_GetCoverStatus(&cover) < 0)
{ {
error(_t("errgame7", L"WDVDGetCoverStatus Failed!")); error(_t("errgame7", L"WDVDGetCoverStatus Failed!"));
@ -1281,7 +1281,8 @@ void CMenu::_launchGame(dir_discHdr *hdr, bool dvd)
Nand::Instance()->Do_Region_Change(id); Nand::Instance()->Do_Region_Change(id);
} }
} }
if(!dvd && get_frag_list((u8 *)id.c_str(), (char*)path.c_str(), currentPartition == 0 ? 0x200 : USBStorage2_GetSectorSize()) < 0) bool wbfs_partition = (DeviceHandler::Instance()->GetFSType(currentPartition) == PART_FS_WBFS);
if(!dvd && !wbfs_partition && get_frag_list((u8 *)id.c_str(), (char*)path.c_str(), currentPartition == 0 ? 0x200 : USBStorage2_GetSectorSize()) < 0)
return; return;
u8 patchVidMode = min((u32)m_gcfg2.getInt(id, "patch_video_modes", 0), ARRAY_SIZE(CMenu::_vidModePatch) - 1u); u8 patchVidMode = min((u32)m_gcfg2.getInt(id, "patch_video_modes", 0), ARRAY_SIZE(CMenu::_vidModePatch) - 1u);
@ -1383,7 +1384,7 @@ void CMenu::_launchGame(dir_discHdr *hdr, bool dvd)
} }
if(!dvd) if(!dvd)
{ {
s32 ret = Disc_SetUSB((u8 *)id.c_str()); s32 ret = Disc_SetUSB((u8*)id.c_str(), !wbfs_partition);
if (ret < 0) if (ret < 0)
{ {
gprintf("Set USB failed: %d\n", ret); gprintf("Set USB failed: %d\n", ret);

View File

@ -312,7 +312,7 @@ bool CMenu::_wbfsOp(CMenu::WBFS_OP op)
m_btnMgr.hide(m_wbfsBtnBack); m_btnMgr.hide(m_wbfsBtnBack);
m_btnMgr.show(m_wbfsLblMessage); m_btnMgr.show(m_wbfsLblMessage);
m_btnMgr.setText(m_wbfsLblMessage, L""); m_btnMgr.setText(m_wbfsLblMessage, L"");
Disc_SetUSB(NULL); Disc_SetUSB(NULL, false);
if (Disc_Wait() < 0) if (Disc_Wait() < 0)
{ {
error(_t("wbfsoperr1", L"Disc_Wait failed")); error(_t("wbfsoperr1", L"Disc_Wait failed"));