usbloadergx/source/usbloader/wbfs/wbfs_wbfs.cpp
dimok321 f1febd91be *Fixed no cover image loading for themes
*Fixed Font loading. The font.ttf is loaded from the path with .thems if it exists there.
When a Theme is loaded and a font.ttf file exists in the defined "Image-Folder:" than this font.ttf will override all others. This ensures support for themes with special fonts.
*Fixed double count on playcount bug
*Updated libext2fs to git snapshot 2010-12-24
*Added proper close of all file systems where the games are loaded from (FAT32/NTFS/EXT)
*Fixed hang bug when reloading into the IOS set in the individual game settings with that (reload to 223, 224, 245, ...)
2010-12-28 17:02:10 +00:00

178 lines
3.3 KiB
C++

#include "wbfs_wbfs.h"
#include "prompts/ProgressWindow.h"
#include "settings/CSettings.h"
#include "wbfs_rw.h"
extern u32 sector_size;
s32 Wbfs_Wbfs::Open()
{
wbfs_t *part = NULL;
/* Open partition */
part = wbfs_open_partition(readCallback, writeCallback, NULL, sector_size, size, lba, 0);
if (!part) return -1;
/* Close current hard disk */
Close();
hdd = part;
// Save the new sector size, so it will be used in read and write calls
sector_size = 1 << hdd->head->hd_sec_sz_s;
return 0;
}
void Wbfs_Wbfs::Close()
{
if (hdd)
{
wbfs_close(hdd);
hdd = NULL;
}
}
wbfs_disc_t* Wbfs_Wbfs::OpenDisc(u8 *discid)
{
/* No device open */
if (!hdd) return NULL;
/* Open disc */
return wbfs_open_disc(hdd, discid);
}
void Wbfs_Wbfs::CloseDisc(wbfs_disc_t *disc)
{
/* No device open */
if (!hdd || !disc) return;
/* Close disc */
wbfs_close_disc(disc);
}
s32 Wbfs_Wbfs::Format()
{
wbfs_t *partition = NULL;
/* Reset partition */
partition = wbfs_open_partition(readCallback, writeCallback, NULL, sector_size, size, lba, 1);
if (!partition) return -1;
/* Free memory */
wbfs_close(partition);
return 0;
}
s32 Wbfs_Wbfs::GetCount(u32 *count)
{
/* No device open */
if (!hdd) return -1;
/* Get list length */
*count = wbfs_count_discs(hdd);
return 0;
}
s32 Wbfs_Wbfs::GetHeaders(struct discHdr *outbuf, u32 cnt, u32 len)
{
u32 idx, size;
s32 ret;
/* No device open */
if (!hdd) return -1;
for (idx = 0; idx < cnt; idx++)
{
u8 *ptr = ((u8 *) outbuf) + (idx * len);
/* Get header */
ret = wbfs_get_disc_info(hdd, idx, ptr, len, &size);
if (ret < 0) return ret;
}
return 0;
}
s32 Wbfs_Wbfs::AddGame()
{
s32 ret;
/* No device open */
if (!hdd) return -1;
partition_selector_t part_sel = (partition_selector_t) Settings.InstallPartitions;
/* Add game to device */
ret = wbfs_add_disc(hdd, __ReadDVD, NULL, ProgressCallback, part_sel, 0);
if (ret < 0) return ret;
return 0;
}
s32 Wbfs_Wbfs::RemoveGame(u8 *discid)
{
s32 ret;
/* No device open */
if (!hdd) return -1;
/* Remove game from USB device */
ret = wbfs_rm_disc(hdd, discid);
if (ret < 0) return ret;
return 0;
}
s32 Wbfs_Wbfs::DiskSpace(f32 *used, f32 *free)
{
f32 ssize;
u32 cnt;
/* No device open */
if (!hdd) return -1;
/* Count used blocks */
cnt = wbfs_count_usedblocks(hdd);
/* Sector size in GB */
ssize = hdd->wbfs_sec_sz / GB_SIZE;
/* Copy values */
*free = ssize * cnt;
*used = ssize * (hdd->n_wbfs_sec - cnt);
return 0;
}
s32 Wbfs_Wbfs::RenameGame(u8 *discid, const void *newname)
{
s32 ret;
/* No USB device open */
if (!hdd) return -1;
ret = wbfs_ren_disc(hdd, discid, (u8*) newname);
if (ret < 0) return ret;
return 0;
}
s32 Wbfs_Wbfs::ReIDGame(u8 *discid, const void *newID)
{
s32 ret;
/* No USB device open */
if (!hdd) return -1;
ret = wbfs_rID_disc(hdd, discid, (u8*) newID);
if (ret < 0) return ret;
return 0;
}
f32 Wbfs_Wbfs::EstimateGameSize()
{
partition_selector_t part_sel = (partition_selector_t) Settings.InstallPartitions;
return wbfs_estimate_disc(hdd, __ReadDVD, NULL, part_sel);
}