-fixed wii game installer

This commit is contained in:
fix94.1 2012-08-17 15:48:11 +00:00
parent 85ff18bd8d
commit 088ae57074
8 changed files with 31 additions and 32 deletions

View File

@ -622,7 +622,7 @@ u32 wbfs_size_disc(wbfs_t *p,read_wiidisc_callback_t read_src_wii_disc,
u32 wii_sec_per_wbfs_sect = 1 << (p->wbfs_sec_sz_s - p->wii_sec_sz_s);
wiidisc_t *d = 0;
u8 *used = wbfs_malloc(p->n_wii_sec_per_disc);
u8 *used = wbfs_ioalloc(p->n_wii_sec_per_disc);
if(!used)
ERROR("unable to alloc memory\n");

View File

@ -304,7 +304,7 @@ wiidisc_t *wd_open_disc(read_wiidisc_callback_t read, void *fp)
d->fp = fp;
d->part_sel = ALL_PARTITIONS;
d->tmp_buffer = wbfs_ioalloc(0x8000);
d->tmp_buffer2 = wbfs_malloc(0x8000);
d->tmp_buffer2 = wbfs_ioalloc(0x8000);
return d;
}

View File

@ -52,7 +52,7 @@ s32 Disc_Open(bool boot_disc)
/* Directly set Audio Streaming for GC*/
if(boot_disc)
gprintf("Setting Audio Streaming for GC Games: 0x%08x\n", WDVD_SetStreaming());
gprintf("Setting Audio Streaming for GC Games %s\n", WDVD_SetStreaming() == 0 ? "succeed" : "failed");
return ret;
}

View File

@ -68,7 +68,7 @@ s32 __WBFS_ReadDVD(void *fp, u32 lba, u32 len, void *iobuf)
if (mod)
{
/* Allocate memory */
fp = malloc(0x20);
fp = memalign(0x20, 0x20);
if (!fp)
return -1;
@ -269,10 +269,7 @@ s32 WBFS_AddGame(progress_callback_t spinner, void *spinner_data)
if (!hdd) return -1;
/* Add game to device */
partition_selector_t part_sel = ONLY_GAME_PARTITION;
int copy_1_1 = 0;
s32 ret = wbfs_add_disc(hdd, __WBFS_ReadDVD, NULL, spinner, spinner_data, part_sel, copy_1_1);
s32 ret = wbfs_add_disc(hdd, __WBFS_ReadDVD, NULL, spinner, spinner_data, REMOVE_UPDATE_PARTITION, 0);
return ret < 0 ? ret : 0;
}
@ -310,7 +307,7 @@ s32 WBFS_GameSize(u8 *discid, char *path, f32 *size)
s32 WBFS_DVD_Size(u64 *comp_size, u64 *real_size)
{
if (wbfs_part_fs) return WBFS_Ext_DVD_Size(comp_size, real_size, (currentPartition == 0));
if (wbfs_part_fs) return WBFS_Ext_DVD_Size(comp_size, real_size);
u32 comp_sec = 0, last_sec = 0;
@ -318,9 +315,7 @@ s32 WBFS_DVD_Size(u64 *comp_size, u64 *real_size)
if (!hdd) return -1;
/* Add game to device */
partition_selector_t part_sel = ONLY_GAME_PARTITION;
s32 ret = wbfs_size_disc(hdd, __WBFS_ReadDVD, NULL, part_sel, &comp_sec, &last_sec);
s32 ret = wbfs_size_disc(hdd, __WBFS_ReadDVD, NULL, REMOVE_UPDATE_PARTITION, &comp_sec, &last_sec);
if (ret < 0) return ret;
*comp_size = ((u64)hdd->wii_sec_sz) * comp_sec;

View File

@ -183,13 +183,15 @@ s32 WBFS_Ext_AddGame(progress_callback_t spinner, void *spinner_data)
Disc_ReadHeader(&header);
asprintf(&cleantitle, header.title);
for (cp = strpbrk(cleantitle, illegal); cp; cp = strpbrk(cp, illegal))
for(cp = strpbrk(cleantitle, illegal); cp; cp = strpbrk(cp, illegal))
*cp = '_';
snprintf(folder, sizeof(folder), "%s%s", wbfs_fs_drive, wbfs_ext_dir);
fsop_MakeFolder(folder);
snprintf(folder, sizeof(folder), "%s%s/%s [%s]", wbfs_fs_drive, wbfs_ext_dir, cleantitle, header.id);
fsop_MakeFolder(folder);
free(cleantitle);
fsop_MakeFolder((char *)folder);
snprintf(gamepath, sizeof(gamepath), "%s/%s.wbfs", folder, header.id);
snprintf(gamepath, sizeof(gamepath), "%s/%s.wbfs", folder, header.id);
u64 size = (u64)143432*2*0x8000ULL;
u32 n_sector = size / 512;
@ -214,7 +216,7 @@ s32 WBFS_Ext_AddGame(progress_callback_t spinner, void *spinner_data)
extern wbfs_t *hdd;
wbfs_t *old_hdd = hdd;
hdd = part; // used by spinner
s32 ret = wbfs_add_disc(part, __WBFS_ReadDVD, NULL, spinner, spinner_data, ONLY_GAME_PARTITION, 0);
s32 ret = wbfs_add_disc(part, __WBFS_ReadDVD, NULL, spinner, spinner_data, REMOVE_UPDATE_PARTITION, 0);
hdd = old_hdd;
if(ret == 0) wbfs_trim(part);
@ -226,24 +228,31 @@ s32 WBFS_Ext_AddGame(progress_callback_t spinner, void *spinner_data)
return ret < 0 ? ret : 0;
}
s32 WBFS_Ext_DVD_Size(u64 *comp_size, u64 *real_size, bool sd)
s32 WBFS_Ext_DVD_Size(u64 *comp_size, u64 *real_size)
{
s32 ret;
u32 comp_sec = 0, last_sec = 0;
wbfs_t *part = NULL;
u64 size = (u64)143432*2*0x8000ULL;
u32 n_sector = size / 512;
u32 wii_sec_sz;
// init a temporary dummy part
// as a placeholder for wbfs_size_disc
wbfs_t *part = wbfs_open_partition(0, 0, NULL, sd ? 512 : USBStorage2_GetSectorSize(), n_sector, 0, 1);
if (!part)
part = wbfs_open_partition(0, 0, NULL, 512, n_sector, 0, 1);
if(!part)
return -1;
wii_sec_sz = part->wii_sec_sz;
u32 comp_sec = 0, last_sec = 0;
s32 ret = wbfs_size_disc(part, __WBFS_ReadDVD, NULL, ONLY_GAME_PARTITION, &comp_sec, &last_sec);
/* Add game to device */
ret = wbfs_size_disc(part, __WBFS_ReadDVD, NULL, REMOVE_UPDATE_PARTITION, &comp_sec, &last_sec);
wbfs_close(part);
if (ret < 0) return ret;
if(ret < 0)
return ret;
*comp_size = (u64)(part->wii_sec_sz) * comp_sec;
*real_size = (u64)(part->wii_sec_sz) * last_sec;
*comp_size = (u64)wii_sec_sz * comp_sec;
*real_size = (u64)wii_sec_sz * last_sec;
return 0;
}

View File

@ -16,7 +16,7 @@ void WBFS_Ext_CloseDisc(wbfs_disc_t* disc);
s32 WBFS_Ext_DiskSpace(f32 *used, f32 *free);
s32 WBFS_Ext_RemoveGame(u8 *discid, char *path);
s32 WBFS_Ext_AddGame(progress_callback_t spinner, void *spinner_data);
s32 WBFS_Ext_DVD_Size(u64 *comp_size, u64 *real_size, bool sd);
s32 WBFS_Ext_DVD_Size(u64 *comp_size, u64 *real_size);
int WBFS_Ext_find_fname(u8 *id, char *path, char *fname, int len);
char* strcopy(char *dest, const char *src, int size);

View File

@ -2151,7 +2151,6 @@ bool CMenu::_loadHomebrewList()
Config tmpcfg;
gprintf("%s\n", DeviceName[currentPartition]);
DeviceHandler::Instance()->Open_WBFS(currentPartition);
m_gameList.Load(sfmt(HOMEBREW_DIR, DeviceName[currentPartition]), ".dol|.elf", m_cfg.getString("HOMEBREW", "lastlanguage", "EN").c_str(), tmpcfg);
m_cfg.setString("HOMEBREW", "lastlanguage", m_loc.getString(m_curLanguage, "gametdb_code", "EN"));
m_cfg.save();
@ -2166,7 +2165,6 @@ bool CMenu::_loadDmlList()
Config tmpcfg;
gprintf("%s\n", DeviceName[currentPartition]);
DeviceHandler::Instance()->Open_WBFS(currentPartition);
if(currentPartition != SD)
m_gameList.Load(sfmt(m_DMLgameDir.c_str(), DeviceName[currentPartition]), "boot.bin|.iso", m_cfg.getString("DML", "lastlanguage", "EN").c_str(), tmpcfg);
else
@ -2183,8 +2181,6 @@ bool CMenu::_loadEmuList()
return false;
gprintf("%s\n", DeviceName[currentPartition]);
DeviceHandler::Instance()->Open_WBFS(currentPartition);
DIR *pdir;
struct dirent *pent;

View File

@ -125,7 +125,7 @@ int CMenu::_gameInstaller(void *obj)
f32 free, used;
WBFS_DiskSpace(&used, &free);
WBFS_DVD_Size(&comp_size, &real_size);
if((f32)comp_size + (f32)128*1024 >= free * GB_SIZE)
{
LWP_MutexLock(m.m_mutex);
@ -320,7 +320,7 @@ bool CMenu::_wbfsOp(CMenu::WBFS_OP op)
out = true;
break;
}
if (Disc_Open(true) < 0)
if (Disc_Open(false) < 0)
{
error(_t("wbfsoperr2", L"Disc_Open failed"));
out = true;
@ -329,7 +329,6 @@ bool CMenu::_wbfsOp(CMenu::WBFS_OP op)
if (Disc_IsWii() == 0)
{
Disc_ReadHeader(&header);
if(_searchGamesByID((const char *) header.id).size() != 0)
{
error(_t("wbfsoperr4", L"Game already installed"));