mirror of
https://github.com/Fledge68/WiiFlow_Lite.git
synced 2025-02-17 12:36:20 +01:00
-added more security checks and mechanisms to wiiflow to increase stability
This commit is contained in:
parent
f036c92c45
commit
a780efc0cd
@ -35,6 +35,7 @@
|
|||||||
#include "nand.hpp"
|
#include "nand.hpp"
|
||||||
#include "config/config.hpp"
|
#include "config/config.hpp"
|
||||||
#include "gecko/gecko.hpp"
|
#include "gecko/gecko.hpp"
|
||||||
|
#include "gui/fmt.h"
|
||||||
#include "gui/text.hpp"
|
#include "gui/text.hpp"
|
||||||
#include "loader/fs.h"
|
#include "loader/fs.h"
|
||||||
#include "loader/nk.h"
|
#include "loader/nk.h"
|
||||||
@ -73,7 +74,7 @@ u8 Channels::GetRequestedIOS(u64 title)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
char tmd[ISFS_MAXPATH] ATTRIBUTE_ALIGN(32);
|
char tmd[ISFS_MAXPATH] ATTRIBUTE_ALIGN(32);
|
||||||
sprintf(tmd, "/title/%08x/%08x/content/title.tmd", TITLE_UPPER(title), TITLE_LOWER(title));
|
strncpy(tmd, fmt("/title/%08x/%08x/content/title.tmd", TITLE_UPPER(title), TITLE_LOWER(title)), ISFS_MAXPATH);
|
||||||
titleTMD = ISFS_GetFile(tmd, &size, -1);
|
titleTMD = ISFS_GetFile(tmd, &size, -1);
|
||||||
}
|
}
|
||||||
if(titleTMD == NULL)
|
if(titleTMD == NULL)
|
||||||
@ -117,12 +118,15 @@ bool Channels::GetAppNameFromTmd(u64 title, char *app, u32 *bootcontent)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
char tmd[ISFS_MAXPATH] ATTRIBUTE_ALIGN(32);
|
char tmd[ISFS_MAXPATH] ATTRIBUTE_ALIGN(32);
|
||||||
sprintf(tmd, "/title/%08x/%08x/content/title.tmd", TITLE_UPPER(title), TITLE_LOWER(title));
|
strncpy(tmd, fmt("/title/%08x/%08x/content/title.tmd", TITLE_UPPER(title), TITLE_LOWER(title)), ISFS_MAXPATH);
|
||||||
data = ISFS_GetFile(tmd, &size, -1);
|
data = ISFS_GetFile(tmd, &size, -1);
|
||||||
}
|
}
|
||||||
if (data == NULL || size < 0x208)
|
if(data == NULL || size < 0x208)
|
||||||
|
{
|
||||||
|
if(data != NULL)
|
||||||
|
free(data);
|
||||||
return ret;
|
return ret;
|
||||||
|
}
|
||||||
_tmd *tmd_file = (_tmd *)SIGNATURE_PAYLOAD((u32 *)data);
|
_tmd *tmd_file = (_tmd *)SIGNATURE_PAYLOAD((u32 *)data);
|
||||||
u16 i;
|
u16 i;
|
||||||
for(i = 0; i < tmd_file->num_contents; ++i)
|
for(i = 0; i < tmd_file->num_contents; ++i)
|
||||||
@ -130,7 +134,8 @@ bool Channels::GetAppNameFromTmd(u64 title, char *app, u32 *bootcontent)
|
|||||||
if(tmd_file->contents[i].index == 0)
|
if(tmd_file->contents[i].index == 0)
|
||||||
{
|
{
|
||||||
*bootcontent = tmd_file->contents[i].cid;
|
*bootcontent = tmd_file->contents[i].cid;
|
||||||
sprintf(app, "/title/%08x/%08x/content/%08x.app", TITLE_UPPER(title), TITLE_LOWER(title), *bootcontent);
|
strncpy(app, fmt("/title/%08x/%08x/content/%08x.app",
|
||||||
|
TITLE_UPPER(title), TITLE_LOWER(title), *bootcontent), ISFS_MAXPATH);
|
||||||
ret = true;
|
ret = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1079,12 +1079,19 @@ void Nand::Patch_AHB()
|
|||||||
|
|
||||||
u8 *Nand::GetEmuFile(const char *path, u32 *size, s32 len)
|
u8 *Nand::GetEmuFile(const char *path, u32 *size, s32 len)
|
||||||
{
|
{
|
||||||
u32 filesize = 0;
|
if(path == NULL)
|
||||||
const char *tmp_path = fmt("%s%s", FullNANDPath, path);
|
|
||||||
bool ret = fsop_GetFileSizeBytes(tmp_path, &filesize);
|
|
||||||
if(ret == false || filesize == 0)
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
char *tmp_path = fmt_malloc("%s%s", FullNANDPath, path);
|
||||||
|
if(tmp_path == NULL)
|
||||||
|
return NULL;
|
||||||
|
u32 filesize = 0;
|
||||||
|
bool ret = fsop_GetFileSizeBytes(tmp_path, &filesize);
|
||||||
|
if(ret == false || filesize == 0)
|
||||||
|
{
|
||||||
|
MEM2_free(tmp_path);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
if(len > 0)
|
if(len > 0)
|
||||||
filesize = min(filesize, (u32)len);
|
filesize = min(filesize, (u32)len);
|
||||||
u8 *tmp_buf = (u8*)MEM2_alloc(filesize);
|
u8 *tmp_buf = (u8*)MEM2_alloc(filesize);
|
||||||
@ -1092,6 +1099,7 @@ u8 *Nand::GetEmuFile(const char *path, u32 *size, s32 len)
|
|||||||
fread(tmp_buf, filesize, 1, f);
|
fread(tmp_buf, filesize, 1, f);
|
||||||
fclose(f);
|
fclose(f);
|
||||||
|
|
||||||
|
MEM2_free(tmp_path);
|
||||||
DCFlushRange(tmp_buf, filesize);
|
DCFlushRange(tmp_buf, filesize);
|
||||||
*size = filesize;
|
*size = filesize;
|
||||||
return tmp_buf;
|
return tmp_buf;
|
||||||
@ -1118,11 +1126,15 @@ u64 *Nand::GetChannels(u32 *count)
|
|||||||
|
|
||||||
u8 *Nand::GetTMD(u64 title, u32 *size)
|
u8 *Nand::GetTMD(u64 title, u32 *size)
|
||||||
{
|
{
|
||||||
|
u8 *tmd_buf = NULL;
|
||||||
u32 tmd_size = 0;
|
u32 tmd_size = 0;
|
||||||
const char *tmd_path = fmt("/title/%08x/%08x/content/title.tmd",
|
char *tmd_path = fmt_malloc("/title/%08x/%08x/content/title.tmd",
|
||||||
TITLE_UPPER(title), TITLE_LOWER(title));
|
TITLE_UPPER(title), TITLE_LOWER(title));
|
||||||
u8 *tmd_buf = GetEmuFile(tmd_path, &tmd_size);
|
if(tmd_path != NULL)
|
||||||
|
{
|
||||||
|
tmd_buf = GetEmuFile(tmd_path, &tmd_size);
|
||||||
|
MEM2_free(tmd_path);
|
||||||
|
}
|
||||||
*size = tmd_size;
|
*size = tmd_size;
|
||||||
return tmd_buf;
|
return tmd_buf;
|
||||||
}
|
}
|
||||||
|
@ -132,7 +132,11 @@ bool PartitionHandle::Mount(int pos, const char *name, bool forceFAT)
|
|||||||
MountNameList.resize(pos + 1);
|
MountNameList.resize(pos + 1);
|
||||||
|
|
||||||
MountNameList[pos] = name;
|
MountNameList[pos] = name;
|
||||||
const char *DeviceSyn = fmt("%s:", name);
|
char DeviceSyn[10];
|
||||||
|
memcpy(DeviceSyn, name, 8);
|
||||||
|
strcat(DeviceSyn, ":");
|
||||||
|
DeviceSyn[9] = '\0';
|
||||||
|
|
||||||
//! Some stupid partition manager think they don't need to edit the freaken MBR.
|
//! Some stupid partition manager think they don't need to edit the freaken MBR.
|
||||||
//! So we need to check the first 64 sectors and see if some partition is there.
|
//! So we need to check the first 64 sectors and see if some partition is there.
|
||||||
//! libfat does that by default so let's use it.
|
//! libfat does that by default so let's use it.
|
||||||
@ -202,7 +206,11 @@ void PartitionHandle::UnMount(int pos)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
WBFS_Close();
|
WBFS_Close();
|
||||||
const char *DeviceSyn = fmt("%s:", MountName(pos));
|
char DeviceSyn[10];
|
||||||
|
memcpy(DeviceSyn, MountName(pos), 8);
|
||||||
|
strcat(DeviceSyn, ":");
|
||||||
|
DeviceSyn[9] = '\0';
|
||||||
|
|
||||||
if(strncmp(GetFSName(pos), "WBFS", 4) == 0)
|
if(strncmp(GetFSName(pos), "WBFS", 4) == 0)
|
||||||
{
|
{
|
||||||
wbfs_t *wbfshandle = GetWbfsHandle(pos);
|
wbfs_t *wbfshandle = GetWbfsHandle(pos);
|
||||||
|
@ -42,9 +42,13 @@ void GC_Disc::init(const char *path)
|
|||||||
*strrchr(GamePath, '/') = '\0';
|
*strrchr(GamePath, '/') = '\0';
|
||||||
if(strchr(GamePath, '/') != NULL) //sys
|
if(strchr(GamePath, '/') != NULL) //sys
|
||||||
*strrchr(GamePath, '/') = '\0';
|
*strrchr(GamePath, '/') = '\0';
|
||||||
const char *FstPath = fmt("%s/sys/fst.bin", GamePath);
|
char *FstPath = fmt_malloc("%s/sys/fst.bin", GamePath);
|
||||||
fsop_GetFileSizeBytes(FstPath, &FSTSize);
|
if(FstPath != NULL)
|
||||||
f = fopen(FstPath, "rb");
|
{
|
||||||
|
fsop_GetFileSizeBytes(FstPath, &FSTSize);
|
||||||
|
f = fopen(FstPath, "rb");
|
||||||
|
MEM2_free(FstPath);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
#include "boxmesh.hpp"
|
#include "boxmesh.hpp"
|
||||||
#include "text.hpp"
|
#include "text.hpp"
|
||||||
#include "gecko/gecko.hpp"
|
#include "gecko/gecko.hpp"
|
||||||
|
#include "memory/mem2.hpp"
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
static guVector _GRRaxisx = (guVector){1, 0, 0}; // DO NOT MODIFY!!!
|
static guVector _GRRaxisx = (guVector){1, 0, 0}; // DO NOT MODIFY!!!
|
||||||
@ -184,9 +184,12 @@ CFanartElement::CFanartElement(Config &cfg, const char *dir, int artwork)
|
|||||||
: m_artwork(artwork), m_isValid(false)
|
: m_artwork(artwork), m_isValid(false)
|
||||||
{
|
{
|
||||||
m_isValid = (TexHandle.fromImageFile(m_art, fmt("%s/artwork%d.png", dir, artwork)) == TE_OK);
|
m_isValid = (TexHandle.fromImageFile(m_art, fmt("%s/artwork%d.png", dir, artwork)) == TE_OK);
|
||||||
if (!m_isValid) return;
|
if(!m_isValid)
|
||||||
|
return;
|
||||||
|
|
||||||
const char *section = fmt("artwork%d", artwork);
|
char *section = fmt_malloc("artwork%d", artwork);
|
||||||
|
if(section == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
m_show_on_top = cfg.getBool(section, "show_on_top", true);
|
m_show_on_top = cfg.getBool(section, "show_on_top", true);
|
||||||
|
|
||||||
@ -212,6 +215,8 @@ CFanartElement::CFanartElement(Config &cfg, const char *dir, int artwork)
|
|||||||
m_step_scaleY = m_event_duration == 0 ? 0 : (m_scaleY - m_event_scaleY) / m_event_duration;
|
m_step_scaleY = m_event_duration == 0 ? 0 : (m_scaleY - m_event_scaleY) / m_event_duration;
|
||||||
m_step_alpha = m_event_duration == 0 ? 0 : (m_alpha - m_event_alpha) / m_event_duration;
|
m_step_alpha = m_event_duration == 0 ? 0 : (m_alpha - m_event_alpha) / m_event_duration;
|
||||||
m_step_angle = m_event_duration == 0 ? 0 : (m_angle - m_event_angle) / m_event_duration;
|
m_step_angle = m_event_duration == 0 ? 0 : (m_angle - m_event_angle) / m_event_duration;
|
||||||
|
|
||||||
|
MEM2_free(section);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CFanartElement::Cleanup(void)
|
void CFanartElement::Cleanup(void)
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include "memory/mem2.hpp"
|
||||||
|
|
||||||
int currentStr = 0;
|
int currentStr = 0;
|
||||||
static char fmt_buffer[MAX_USES][MAX_MSG_SIZE];
|
static char fmt_buffer[MAX_USES][MAX_MSG_SIZE];
|
||||||
@ -19,6 +20,22 @@ char *fmt(const char *format, ...)
|
|||||||
return fmt_buffer[currentStr];
|
return fmt_buffer[currentStr];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *fmt_malloc(const char *format, ...)
|
||||||
|
{
|
||||||
|
va_list va;
|
||||||
|
va_start(va, format);
|
||||||
|
|
||||||
|
char *new_buffer = (char*)MEM2_alloc(MAX_MSG_SIZE);
|
||||||
|
if(new_buffer != NULL)
|
||||||
|
{
|
||||||
|
vsnprintf(new_buffer, MAX_MSG_SIZE - 1, format, va);
|
||||||
|
new_buffer[MAX_MSG_SIZE - 1] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
va_end(va);
|
||||||
|
return new_buffer;
|
||||||
|
}
|
||||||
|
|
||||||
void Asciify(wchar_t *str)
|
void Asciify(wchar_t *str)
|
||||||
{
|
{
|
||||||
const wchar_t *ptr = str;
|
const wchar_t *ptr = str;
|
||||||
|
@ -14,6 +14,7 @@ enum {
|
|||||||
};
|
};
|
||||||
|
|
||||||
char *fmt(const char *format, ...);
|
char *fmt(const char *format, ...);
|
||||||
|
char *fmt_malloc(const char *format, ...);
|
||||||
void Asciify(wchar_t *str);
|
void Asciify(wchar_t *str);
|
||||||
void Asciify2(char *str);
|
void Asciify2(char *str);
|
||||||
|
|
||||||
|
@ -566,7 +566,6 @@ const char *CMenu::_cfDomain(bool selected)
|
|||||||
void CMenu::_initCFThemeMenu()
|
void CMenu::_initCFThemeMenu()
|
||||||
{
|
{
|
||||||
TexData emptyTex;
|
TexData emptyTex;
|
||||||
string domain;
|
|
||||||
int x;
|
int x;
|
||||||
int y;
|
int y;
|
||||||
|
|
||||||
@ -581,12 +580,14 @@ void CMenu::_initCFThemeMenu()
|
|||||||
//
|
//
|
||||||
for (int i = 0; i < 16; ++i)
|
for (int i = 0; i < 16; ++i)
|
||||||
{
|
{
|
||||||
domain = fmt("CFTHEME/VAL%i%c_%%s", i / 3 + 1, (char)(i % 3) + 'A');
|
char *domain = fmt_malloc("CFTHEME/VAL%i%c_%%s", i / 3 + 1, (char)(i % 3) + 'A');
|
||||||
|
if(domain == NULL) continue;
|
||||||
x = 20 + (i / 4) * 150;
|
x = 20 + (i / 4) * 150;
|
||||||
y = 340 + (i % 4) * 32;
|
y = 340 + (i % 4) * 32;
|
||||||
m_cfThemeLblVal[i] = _addLabel(fmt(domain.c_str(), "BTN"), theme.btnFont, L"", x + 32, y, 86, 32, theme.btnFontColor, FTGX_JUSTIFY_CENTER | FTGX_ALIGN_MIDDLE, theme.btnTexC);
|
m_cfThemeLblVal[i] = _addLabel(fmt(domain, "BTN"), theme.btnFont, L"", x + 32, y, 86, 32, theme.btnFontColor, FTGX_JUSTIFY_CENTER | FTGX_ALIGN_MIDDLE, theme.btnTexC);
|
||||||
m_cfThemeBtnValM[i] = _addPicButton(fmt(domain.c_str(), "MINUS"), theme.btnTexMinus, theme.btnTexMinusS, x, y, 32, 32);
|
m_cfThemeBtnValM[i] = _addPicButton(fmt(domain, "MINUS"), theme.btnTexMinus, theme.btnTexMinusS, x, y, 32, 32);
|
||||||
m_cfThemeBtnValP[i] = _addPicButton(fmt(domain.c_str(), "PLUS"), theme.btnTexPlus, theme.btnTexPlusS, x + 118, y, 32, 32);
|
m_cfThemeBtnValP[i] = _addPicButton(fmt(domain, "PLUS"), theme.btnTexPlus, theme.btnTexPlusS, x + 118, y, 32, 32);
|
||||||
|
MEM2_free(domain);
|
||||||
}
|
}
|
||||||
for (int i = 0; i < 4; ++i)
|
for (int i = 0; i < 4; ++i)
|
||||||
m_cfThemeLblValTxt[i] = _addLabel(fmt("CFTHEME/VAL%i_LBL", i + 1), theme.lblFont, L"", 20 + i * 150, 100, 150, 240, theme.lblFontColor, FTGX_JUSTIFY_CENTER | FTGX_ALIGN_BOTTOM, emptyTex);
|
m_cfThemeLblValTxt[i] = _addLabel(fmt("CFTHEME/VAL%i_LBL", i + 1), theme.lblFont, L"", 20 + i * 150, 100, 150, 240, theme.lblFontColor, FTGX_JUSTIFY_CENTER | FTGX_ALIGN_BOTTOM, emptyTex);
|
||||||
|
@ -207,7 +207,8 @@ void CMenu::_initCodeMenu()
|
|||||||
|
|
||||||
for (int i = 0; i < 10; ++i)
|
for (int i = 0; i < 10; ++i)
|
||||||
{
|
{
|
||||||
const char *codeText = fmt("CODE/%i_BTN", i);
|
char *codeText = fmt_malloc("CODE/%i_BTN", i);
|
||||||
|
if(codeText == NULL) continue;
|
||||||
if (i > 0)
|
if (i > 0)
|
||||||
{
|
{
|
||||||
int x = i - 1;
|
int x = i - 1;
|
||||||
@ -218,6 +219,7 @@ void CMenu::_initCodeMenu()
|
|||||||
m_codeBtnKey[i] = _addButton(codeText, theme.btnFont, wfmt(L"%i", i), x, y, 100, 50, theme.btnFontColor);
|
m_codeBtnKey[i] = _addButton(codeText, theme.btnFont, wfmt(L"%i", i), x, y, 100, 50, theme.btnFontColor);
|
||||||
}
|
}
|
||||||
_setHideAnim(m_codeBtnKey[i], codeText, 0, 0, 0.f, 0.f);
|
_setHideAnim(m_codeBtnKey[i], codeText, 0, 0, 0.f, 0.f);
|
||||||
|
MEM2_free(codeText);
|
||||||
}
|
}
|
||||||
_setHideAnim(m_codeBtnErase, "CODE/ERASE_BTN", 0, 0, -2.f, 0.f);
|
_setHideAnim(m_codeBtnErase, "CODE/ERASE_BTN", 0, 0, -2.f, 0.f);
|
||||||
_setHideAnim(m_codeBtnBack, "CODE/BACK_BTN", 0, 0, -2.f, 0.f);
|
_setHideAnim(m_codeBtnBack, "CODE/BACK_BTN", 0, 0, -2.f, 0.f);
|
||||||
|
@ -137,7 +137,7 @@ void CMenu::_hideSettings(bool instant)
|
|||||||
m_btnMgr.hide(m_downloadLblPrio, instant);
|
m_btnMgr.hide(m_downloadLblPrio, instant);
|
||||||
m_btnMgr.hide(m_downloadBtnPrioM, instant);
|
m_btnMgr.hide(m_downloadBtnPrioM, instant);
|
||||||
m_btnMgr.hide(m_downloadBtnPrioP, instant);
|
m_btnMgr.hide(m_downloadBtnPrioP, instant);
|
||||||
m_btnMgr.hide(m_downloadLblRegion, instant);
|
m_btnMgr.hide(m_downloadLblRegion, instant);
|
||||||
m_btnMgr.hide(m_downloadBtnEN, instant);
|
m_btnMgr.hide(m_downloadBtnEN, instant);
|
||||||
m_btnMgr.hide(m_downloadBtnJA, instant);
|
m_btnMgr.hide(m_downloadBtnJA, instant);
|
||||||
m_btnMgr.hide(m_downloadBtnFR, instant);
|
m_btnMgr.hide(m_downloadBtnFR, instant);
|
||||||
@ -437,7 +437,6 @@ int CMenu::_initNetwork()
|
|||||||
|
|
||||||
int CMenu::_coverDownloader(bool missingOnly)
|
int CMenu::_coverDownloader(bool missingOnly)
|
||||||
{
|
{
|
||||||
string path;
|
|
||||||
vector<string> coverList;
|
vector<string> coverList;
|
||||||
vector<dir_discHdr> pluginCoverList;
|
vector<dir_discHdr> pluginCoverList;
|
||||||
|
|
||||||
@ -484,28 +483,33 @@ int CMenu::_coverDownloader(bool missingOnly)
|
|||||||
_setThrdMsg(_t("dlmsg7", L"Listing covers to download..."), listWeight * (float)step / (float)nbSteps);
|
_setThrdMsg(_t("dlmsg7", L"Listing covers to download..."), listWeight * (float)step / (float)nbSteps);
|
||||||
LWP_MutexUnlock(m_mutex);
|
LWP_MutexUnlock(m_mutex);
|
||||||
++step;
|
++step;
|
||||||
string id;
|
char *path = NULL;
|
||||||
|
const char *id = NULL;
|
||||||
if(m_gameList[i].type == TYPE_PLUGIN)
|
if(m_gameList[i].type == TYPE_PLUGIN)
|
||||||
{
|
{
|
||||||
char gamePath[256];
|
char gamePath[256];
|
||||||
if(string(m_gameList[i].path).find_last_of("/") != string::npos)
|
if(strchr(m_gameList[i].path, '/') != NULL)
|
||||||
strncpy(gamePath, &m_gameList[i].path[string(m_gameList[i].path).find_last_of("/")+1], sizeof(gamePath));
|
strncpy(gamePath, strrchr(m_gameList[i].path, '/') + 1, sizeof(gamePath));
|
||||||
else
|
else
|
||||||
strncpy(gamePath, m_gameList[i].path, sizeof(gamePath));
|
strncpy(gamePath, m_gameList[i].path, sizeof(gamePath));
|
||||||
path = fmt("%s/%s.png", m_boxPicDir.c_str(), gamePath);
|
path = fmt_malloc("%s/%s.png", m_boxPicDir.c_str(), gamePath);
|
||||||
id = path;
|
id = path;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
id = (const char *)m_gameList[i].id;
|
path = fmt_malloc("%s/%s.png", m_boxPicDir.c_str(), m_gameList[i].id);
|
||||||
path = fmt("%s/%s.png", m_boxPicDir.c_str(), id.c_str());
|
id = m_gameList[i].id;
|
||||||
}
|
}
|
||||||
if(!missingOnly || (!CoverFlow.fullCoverCached(id.c_str()) && !checkPNGFile(path.c_str())))
|
if(!missingOnly || (id != NULL && !CoverFlow.fullCoverCached(id) && path != NULL && !checkPNGFile(path)))
|
||||||
{
|
{
|
||||||
if(m_gameList[i].type == TYPE_PLUGIN)
|
if(m_gameList[i].type == TYPE_PLUGIN)
|
||||||
pluginCoverList.push_back(m_gameList[i]);
|
pluginCoverList.push_back(m_gameList[i]);
|
||||||
coverList.push_back(id);
|
if(id != NULL)
|
||||||
|
coverList.push_back(id);
|
||||||
}
|
}
|
||||||
|
if(path != NULL)
|
||||||
|
MEM2_free(path);
|
||||||
|
path = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -544,7 +548,7 @@ int CMenu::_coverDownloader(bool missingOnly)
|
|||||||
bool custom = false;
|
bool custom = false;
|
||||||
int c_altCase = 0;
|
int c_altCase = 0;
|
||||||
|
|
||||||
string newID = m_newID.getString(domain, coverList[i], coverList[i]);
|
const string &newID = m_newID.getString(domain, coverList[i], coverList[i]);
|
||||||
|
|
||||||
if(!newID.empty() && strncasecmp(newID.c_str(), coverList[i].c_str(), coverList[i].length()) == 0)
|
if(!newID.empty() && strncasecmp(newID.c_str(), coverList[i].c_str(), coverList[i].length()) == 0)
|
||||||
m_newID.remove(domain, coverList[i]);
|
m_newID.remove(domain, coverList[i]);
|
||||||
@ -578,8 +582,8 @@ int CMenu::_coverDownloader(bool missingOnly)
|
|||||||
original = false;
|
original = false;
|
||||||
if (!success && !m_thrdStop && original)
|
if (!success && !m_thrdStop && original)
|
||||||
{
|
{
|
||||||
path = fmt("%s/%s.png", m_boxPicDir.c_str(), coverList[i].c_str());
|
char *path = fmt_malloc("%s/%s.png", m_boxPicDir.c_str(), coverList[i].c_str());
|
||||||
if (!checkPNGFile(path.c_str()))
|
if(path != NULL && !checkPNGFile(path))
|
||||||
{
|
{
|
||||||
for (u32 j = 0; !success && j < fmtURLBox.size() && !m_thrdStop; ++j)
|
for (u32 j = 0; !success && j < fmtURLBox.size() && !m_thrdStop; ++j)
|
||||||
{
|
{
|
||||||
@ -696,9 +700,9 @@ int CMenu::_coverDownloader(bool missingOnly)
|
|||||||
if (savePNG)
|
if (savePNG)
|
||||||
{
|
{
|
||||||
LWP_MutexLock(m_mutex);
|
LWP_MutexLock(m_mutex);
|
||||||
_setThrdMsg(wfmt(_fmt("dlmsg4", L"Saving %s"), path.c_str()), listWeight + dlWeight * (float)(step + 1) / (float)nbSteps);
|
_setThrdMsg(wfmt(_fmt("dlmsg4", L"Saving %s"), path), listWeight + dlWeight * (float)(step + 1) / (float)nbSteps);
|
||||||
LWP_MutexUnlock(m_mutex);
|
LWP_MutexUnlock(m_mutex);
|
||||||
fsop_WriteFile(path.c_str(), download.data, download.size);
|
fsop_WriteFile(path, download.data, download.size);
|
||||||
}
|
}
|
||||||
LWP_MutexLock(m_mutex);
|
LWP_MutexLock(m_mutex);
|
||||||
_setThrdMsg(wfmt(_fmt("dlmsg10", L"Making %s"), sfmt("%s.wfc", coverList[i].c_str()).c_str()), listWeight + dlWeight * (float)(step + 1) / (float)nbSteps);
|
_setThrdMsg(wfmt(_fmt("dlmsg10", L"Making %s"), sfmt("%s.wfc", coverList[i].c_str()).c_str()), listWeight + dlWeight * (float)(step + 1) / (float)nbSteps);
|
||||||
@ -710,16 +714,19 @@ int CMenu::_coverDownloader(bool missingOnly)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(path != NULL)
|
||||||
|
MEM2_free(path);
|
||||||
|
path = NULL;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CBOX:
|
case CBOX:
|
||||||
if( m_downloadPrioVal&C_TYPE_ONCU )
|
if( m_downloadPrioVal&C_TYPE_ONCU )
|
||||||
custom = true;
|
custom = true;
|
||||||
c_altCase = c_gameTDB.GetCaseVersions( coverList[i].c_str() );
|
c_altCase = c_gameTDB.GetCaseVersions( coverList[i].c_str() );
|
||||||
if (!success && !m_thrdStop && c_gameTDB.IsLoaded() && c_altCase > 1 && custom)
|
if(!success && !m_thrdStop && c_gameTDB.IsLoaded() && c_altCase > 1 && custom)
|
||||||
{
|
{
|
||||||
path = fmt("%s/%s.png", m_boxPicDir.c_str(), coverList[i].c_str());
|
char *path = fmt_malloc("%s/%s.png", m_boxPicDir.c_str(), coverList[i].c_str());
|
||||||
if (!checkPNGFile(path.c_str()))
|
if(path != NULL && !checkPNGFile(path))
|
||||||
{
|
{
|
||||||
for (u32 j = 0; !success && j < fmtURLCBox.size() && !m_thrdStop; ++j)
|
for (u32 j = 0; !success && j < fmtURLCBox.size() && !m_thrdStop; ++j)
|
||||||
{
|
{
|
||||||
@ -838,9 +845,9 @@ int CMenu::_coverDownloader(bool missingOnly)
|
|||||||
if (savePNG)
|
if (savePNG)
|
||||||
{
|
{
|
||||||
LWP_MutexLock(m_mutex);
|
LWP_MutexLock(m_mutex);
|
||||||
_setThrdMsg(wfmt(_fmt("dlmsg4", L"Saving %s"), path.c_str()), listWeight + dlWeight * (float)(step + 1) / (float)nbSteps);
|
_setThrdMsg(wfmt(_fmt("dlmsg4", L"Saving %s"), path), listWeight + dlWeight * (float)(step + 1) / (float)nbSteps);
|
||||||
LWP_MutexUnlock(m_mutex);
|
LWP_MutexUnlock(m_mutex);
|
||||||
fsop_WriteFile(path.c_str(), download.data, download.size);
|
fsop_WriteFile(path, download.data, download.size);
|
||||||
}
|
}
|
||||||
LWP_MutexLock(m_mutex);
|
LWP_MutexLock(m_mutex);
|
||||||
_setThrdMsg(wfmt(_fmt("dlmsg10", L"Making %s"), sfmt("%s.wfc", coverList[i].c_str()).c_str()), listWeight + dlWeight * (float)(step + 1) / (float)nbSteps);
|
_setThrdMsg(wfmt(_fmt("dlmsg10", L"Making %s"), sfmt("%s.wfc", coverList[i].c_str()).c_str()), listWeight + dlWeight * (float)(step + 1) / (float)nbSteps);
|
||||||
@ -852,15 +859,18 @@ int CMenu::_coverDownloader(bool missingOnly)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(path != NULL)
|
||||||
|
MEM2_free(path);
|
||||||
|
path = NULL;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case FLAT:
|
case FLAT:
|
||||||
if( m_downloadPrioVal&C_TYPE_ONOR )
|
if( m_downloadPrioVal&C_TYPE_ONOR )
|
||||||
original = false;
|
original = false;
|
||||||
if (!success && !m_thrdStop && original)
|
if(!success && !m_thrdStop && original)
|
||||||
{
|
{
|
||||||
path = fmt("%s/%s.png", m_picDir.c_str(), coverList[i].c_str());
|
char *path = fmt_malloc("%s/%s.png", m_picDir.c_str(), coverList[i].c_str());
|
||||||
if (!checkPNGFile(path.c_str()))
|
if(path != NULL && !checkPNGFile(path))
|
||||||
{
|
{
|
||||||
// Try to get the front cover
|
// Try to get the front cover
|
||||||
if (m_thrdStop) break;
|
if (m_thrdStop) break;
|
||||||
@ -979,9 +989,9 @@ int CMenu::_coverDownloader(bool missingOnly)
|
|||||||
if (savePNG)
|
if (savePNG)
|
||||||
{
|
{
|
||||||
LWP_MutexLock(m_mutex);
|
LWP_MutexLock(m_mutex);
|
||||||
_setThrdMsg(wfmt(_fmt("dlmsg4", L"Saving %s"), path.c_str()), listWeight + dlWeight * (float)(step + 1) / (float)nbSteps);
|
_setThrdMsg(wfmt(_fmt("dlmsg4", L"Saving %s"), path), listWeight + dlWeight * (float)(step + 1) / (float)nbSteps);
|
||||||
LWP_MutexUnlock(m_mutex);
|
LWP_MutexUnlock(m_mutex);
|
||||||
fsop_WriteFile(path.c_str(), download.data, download.size);
|
fsop_WriteFile(path, download.data, download.size);
|
||||||
}
|
}
|
||||||
LWP_MutexLock(m_mutex);
|
LWP_MutexLock(m_mutex);
|
||||||
_setThrdMsg(wfmt(_fmt("dlmsg10", L"Making %s"), sfmt("%s.wfc", coverList[i].c_str()).c_str()), listWeight + dlWeight * (float)(step + 1) / (float)nbSteps);
|
_setThrdMsg(wfmt(_fmt("dlmsg10", L"Making %s"), sfmt("%s.wfc", coverList[i].c_str()).c_str()), listWeight + dlWeight * (float)(step + 1) / (float)nbSteps);
|
||||||
@ -993,15 +1003,18 @@ int CMenu::_coverDownloader(bool missingOnly)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(path != NULL)
|
||||||
|
MEM2_free(path);
|
||||||
|
path = NULL;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CFLAT:
|
case CFLAT:
|
||||||
if( m_downloadPrioVal&C_TYPE_ONCU )
|
if( m_downloadPrioVal&C_TYPE_ONCU )
|
||||||
custom = true;
|
custom = true;
|
||||||
if (!success && !m_thrdStop && c_gameTDB.IsLoaded() && c_altCase > 1 && custom)
|
if(!success && !m_thrdStop && c_gameTDB.IsLoaded() && c_altCase > 1 && custom)
|
||||||
{
|
{
|
||||||
path = fmt("%s/%s.png", m_picDir.c_str(), coverList[i].c_str());
|
char *path = fmt_malloc("%s/%s.png", m_picDir.c_str(), coverList[i].c_str());
|
||||||
if (!checkPNGFile(path.c_str()))
|
if(path != NULL && !checkPNGFile(path))
|
||||||
{
|
{
|
||||||
// Try to get the front cover
|
// Try to get the front cover
|
||||||
if (m_thrdStop) break;
|
if (m_thrdStop) break;
|
||||||
@ -1116,9 +1129,9 @@ int CMenu::_coverDownloader(bool missingOnly)
|
|||||||
if(savePNG)
|
if(savePNG)
|
||||||
{
|
{
|
||||||
LWP_MutexLock(m_mutex);
|
LWP_MutexLock(m_mutex);
|
||||||
_setThrdMsg(wfmt(_fmt("dlmsg4", L"Saving %s"), path.c_str()), listWeight + dlWeight * (float)(step + 1) / (float)nbSteps);
|
_setThrdMsg(wfmt(_fmt("dlmsg4", L"Saving %s"), path), listWeight + dlWeight * (float)(step + 1) / (float)nbSteps);
|
||||||
LWP_MutexUnlock(m_mutex);
|
LWP_MutexUnlock(m_mutex);
|
||||||
fsop_WriteFile(path.c_str(), download.data, download.size);
|
fsop_WriteFile(path, download.data, download.size);
|
||||||
}
|
}
|
||||||
LWP_MutexLock(m_mutex);
|
LWP_MutexLock(m_mutex);
|
||||||
_setThrdMsg(wfmt(_fmt("dlmsg10", L"Making %s"), sfmt("%s.wfc", coverList[i].c_str()).c_str()), listWeight + dlWeight * (float)(step + 1) / (float)nbSteps);
|
_setThrdMsg(wfmt(_fmt("dlmsg10", L"Making %s"), sfmt("%s.wfc", coverList[i].c_str()).c_str()), listWeight + dlWeight * (float)(step + 1) / (float)nbSteps);
|
||||||
@ -1130,11 +1143,13 @@ int CMenu::_coverDownloader(bool missingOnly)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(path != NULL)
|
||||||
|
MEM2_free(path);
|
||||||
|
path = NULL;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
newID.clear();
|
|
||||||
++step;
|
++step;
|
||||||
}
|
}
|
||||||
if(c_gameTDB.IsLoaded())
|
if(c_gameTDB.IsLoaded())
|
||||||
@ -1172,8 +1187,8 @@ void CMenu::_download(string gameId)
|
|||||||
if(gameId.size() && CoverFlow.getHdr()->type == TYPE_PLUGIN)
|
if(gameId.size() && CoverFlow.getHdr()->type == TYPE_PLUGIN)
|
||||||
{
|
{
|
||||||
char gamePath[256];
|
char gamePath[256];
|
||||||
if(string(CoverFlow.getHdr()->path).find_last_of("/") != string::npos)
|
if(strchr(CoverFlow.getHdr()->path, '/') != NULL)
|
||||||
strncpy(gamePath, &CoverFlow.getHdr()->path[string(CoverFlow.getHdr()->path).find_last_of("/")+1], sizeof(gamePath));
|
strncpy(gamePath, strrchr(CoverFlow.getHdr()->path, '/') + 1, sizeof(gamePath));
|
||||||
else
|
else
|
||||||
strncpy(gamePath, CoverFlow.getHdr()->path, sizeof(gamePath));
|
strncpy(gamePath, CoverFlow.getHdr()->path, sizeof(gamePath));
|
||||||
m_coverDLGameId = gamePath;
|
m_coverDLGameId = gamePath;
|
||||||
@ -1929,8 +1944,6 @@ int CMenu::_gametdbDownloader(CMenu *m)
|
|||||||
|
|
||||||
int CMenu::_gametdbDownloaderAsync()
|
int CMenu::_gametdbDownloaderAsync()
|
||||||
{
|
{
|
||||||
string langCode;
|
|
||||||
|
|
||||||
u32 bufferSize = 0x800000; // 8 MB
|
u32 bufferSize = 0x800000; // 8 MB
|
||||||
u8 *buffer = (u8*)MEM2_alloc(bufferSize);
|
u8 *buffer = (u8*)MEM2_alloc(bufferSize);
|
||||||
if (buffer == NULL)
|
if (buffer == NULL)
|
||||||
@ -1940,7 +1953,7 @@ int CMenu::_gametdbDownloaderAsync()
|
|||||||
LWP_MutexUnlock(m_mutex);
|
LWP_MutexUnlock(m_mutex);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
langCode = m_loc.getString(m_curLanguage, "gametdb_code", "EN");
|
const string &langCode = m_loc.getString(m_curLanguage, "gametdb_code", "EN");
|
||||||
LWP_MutexLock(m_mutex);
|
LWP_MutexLock(m_mutex);
|
||||||
_setThrdMsg(_t("dlmsg1", L"Initializing network..."), 0.f);
|
_setThrdMsg(_t("dlmsg1", L"Initializing network..."), 0.f);
|
||||||
LWP_MutexUnlock(m_mutex);
|
LWP_MutexUnlock(m_mutex);
|
||||||
@ -1966,18 +1979,20 @@ int CMenu::_gametdbDownloaderAsync()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
string zippath = fmt("%s/wiitdb.zip", m_settingsDir.c_str());
|
bool res = false;
|
||||||
|
char *zippath = fmt_malloc("%s/wiitdb.zip", m_settingsDir.c_str());
|
||||||
gprintf("Downloading file to '%s'\n", zippath.c_str());
|
if(zippath != NULL)
|
||||||
|
{
|
||||||
fsop_deleteFile(zippath.c_str());
|
gprintf("Writing file to '%s'\n", zippath);
|
||||||
|
fsop_deleteFile(zippath);
|
||||||
_setThrdMsg(wfmt(_fmt("dlmsg4", L"Saving %s"), "wiitdb.zip"), 1.f);
|
_setThrdMsg(wfmt(_fmt("dlmsg4", L"Saving %s"), "wiitdb.zip"), 1.f);
|
||||||
bool res = fsop_WriteFile(zippath.c_str(), download.data, download.size);
|
res = fsop_WriteFile(zippath, download.data, download.size);
|
||||||
if (res == false)
|
}
|
||||||
|
if(res == false)
|
||||||
{
|
{
|
||||||
gprintf("Can't save zip file\n");
|
gprintf("Can't save zip file\n");
|
||||||
|
if(zippath != NULL)
|
||||||
|
MEM2_free(zippath);
|
||||||
LWP_MutexLock(m_mutex);
|
LWP_MutexLock(m_mutex);
|
||||||
_setThrdMsg(_t("dlmsg15", L"Couldn't save ZIP file"), 1.f);
|
_setThrdMsg(_t("dlmsg15", L"Couldn't save ZIP file"), 1.f);
|
||||||
LWP_MutexUnlock(m_mutex);
|
LWP_MutexUnlock(m_mutex);
|
||||||
@ -1986,12 +2001,13 @@ int CMenu::_gametdbDownloaderAsync()
|
|||||||
{
|
{
|
||||||
gprintf("Extracting zip file: ");
|
gprintf("Extracting zip file: ");
|
||||||
|
|
||||||
ZipFile zFile(zippath.c_str());
|
ZipFile zFile(zippath);
|
||||||
bool zres = zFile.ExtractAll(m_settingsDir.c_str());
|
bool zres = zFile.ExtractAll(m_settingsDir.c_str());
|
||||||
gprintf(zres ? "success\n" : "failed\n");
|
gprintf(zres ? "success\n" : "failed\n");
|
||||||
|
|
||||||
// We don't need the zipfile anymore
|
// We don't need the zipfile anymore
|
||||||
fsop_deleteFile(zippath.c_str());
|
fsop_deleteFile(zippath);
|
||||||
|
MEM2_free(zippath);
|
||||||
|
|
||||||
// We should always remove the offsets file to make sure it's reloaded
|
// We should always remove the offsets file to make sure it's reloaded
|
||||||
fsop_deleteFile(fmt("%s/gametdb_offsets.bin", m_settingsDir.c_str()));
|
fsop_deleteFile(fmt("%s/gametdb_offsets.bin", m_settingsDir.c_str()));
|
||||||
@ -2018,7 +2034,7 @@ int CMenu::_gametdbDownloaderAsync()
|
|||||||
|
|
||||||
const char *banner_url = NULL;
|
const char *banner_url = NULL;
|
||||||
const char *banner_url_id3 = NULL;
|
const char *banner_url_id3 = NULL;
|
||||||
const char *banner_location = NULL;
|
char *banner_location = NULL;
|
||||||
u32 CMenu::_downloadBannerAsync(void *obj)
|
u32 CMenu::_downloadBannerAsync(void *obj)
|
||||||
{
|
{
|
||||||
CMenu *m = (CMenu *)obj;
|
CMenu *m = (CMenu *)obj;
|
||||||
@ -2057,7 +2073,8 @@ u32 CMenu::_downloadBannerAsync(void *obj)
|
|||||||
/* minimum 50kb */
|
/* minimum 50kb */
|
||||||
if (banner.data != NULL && banner.size > 51200 && banner.data[0] != '<')
|
if (banner.data != NULL && banner.size > 51200 && banner.data[0] != '<')
|
||||||
{
|
{
|
||||||
fsop_WriteFile(banner_location, banner.data, banner.size);
|
if(banner_location != NULL)
|
||||||
|
fsop_WriteFile(banner_location, banner.data, banner.size);
|
||||||
LWP_MutexLock(m->m_mutex);
|
LWP_MutexLock(m->m_mutex);
|
||||||
m->_setThrdMsg(m->_t("dlmsg14", L"Done."), 1.f);
|
m->_setThrdMsg(m->_t("dlmsg14", L"Done."), 1.f);
|
||||||
LWP_MutexUnlock(m->m_mutex);
|
LWP_MutexUnlock(m->m_mutex);
|
||||||
@ -2091,7 +2108,9 @@ void CMenu::_downloadBnr(const char *gameID)
|
|||||||
base_url_id3.replace(base_url_id3.find(GAME_BNR_ID), strlen(GAME_BNR_ID), gameID, 3);
|
base_url_id3.replace(base_url_id3.find(GAME_BNR_ID), strlen(GAME_BNR_ID), gameID, 3);
|
||||||
banner_url_id3 = base_url_id3.c_str();
|
banner_url_id3 = base_url_id3.c_str();
|
||||||
|
|
||||||
banner_location = fmt("%s/%s.bnr", m_customBnrDir.c_str(), gameID);
|
banner_location = fmt_malloc("%s/%s.bnr", m_customBnrDir.c_str(), gameID);
|
||||||
|
if(banner_location == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
m_btnMgr.show(m_downloadPBar);
|
m_btnMgr.show(m_downloadPBar);
|
||||||
m_btnMgr.setProgress(m_downloadPBar, 0.f);
|
m_btnMgr.setProgress(m_downloadPBar, 0.f);
|
||||||
@ -2144,7 +2163,13 @@ void CMenu::_downloadBnr(const char *gameID)
|
|||||||
if (m_thrdStop && !m_thrdWorking)
|
if (m_thrdStop && !m_thrdWorking)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
m_btnMgr.setText(m_downloadBtnCancel, _t("gm2", L"Back"));
|
if(banner_location != NULL)
|
||||||
|
{
|
||||||
|
MEM2_free(banner_location);
|
||||||
|
banner_location = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_btnMgr.setText(m_downloadBtnCancel, _t("gm2", L"Back"));
|
||||||
if (thread != LWP_THREAD_NULL)
|
if (thread != LWP_THREAD_NULL)
|
||||||
{
|
{
|
||||||
LWP_JoinThread(thread, NULL);
|
LWP_JoinThread(thread, NULL);
|
||||||
|
@ -428,10 +428,8 @@ void CMenu::_game(bool launch)
|
|||||||
else if(BTN_MINUS_PRESSED)
|
else if(BTN_MINUS_PRESSED)
|
||||||
{
|
{
|
||||||
const char *videoPath = fmt("%s/%.3s.thp", m_videoDir.c_str(), CoverFlow.getId());
|
const char *videoPath = fmt("%s/%.3s.thp", m_videoDir.c_str(), CoverFlow.getId());
|
||||||
FILE *file = fopen(videoPath, "r");
|
if(fsop_FileExist(videoPath))
|
||||||
if(file)
|
|
||||||
{
|
{
|
||||||
fclose(file);
|
|
||||||
MusicPlayer.Stop();
|
MusicPlayer.Stop();
|
||||||
m_gameSound.Stop();
|
m_gameSound.Stop();
|
||||||
m_banner.SetShowBanner(false);
|
m_banner.SetShowBanner(false);
|
||||||
|
@ -77,10 +77,10 @@ bool Plugin::AddPlugin(Config &plugin)
|
|||||||
NewPlugin.DisplayName.fromUTF8(PluginName.c_str());
|
NewPlugin.DisplayName.fromUTF8(PluginName.c_str());
|
||||||
NewPlugin.consoleCoverID = plugin.getString(PLUGIN_INI_DEF,"consoleCoverID");
|
NewPlugin.consoleCoverID = plugin.getString(PLUGIN_INI_DEF,"consoleCoverID");
|
||||||
|
|
||||||
const char *bannerfilepath = fmt("%s/%s", pluginsDir.c_str(), plugin.getString(PLUGIN_INI_DEF,"bannerSound").c_str());
|
const string &bannerfilepath = sfmt("%s/%s", pluginsDir.c_str(), plugin.getString(PLUGIN_INI_DEF,"bannerSound").c_str());
|
||||||
fsop_GetFileSizeBytes(bannerfilepath, &NewPlugin.BannerSoundSize);
|
fsop_GetFileSizeBytes(bannerfilepath.c_str(), &NewPlugin.BannerSoundSize);
|
||||||
if(NewPlugin.BannerSoundSize > 0)
|
if(NewPlugin.BannerSoundSize > 0)
|
||||||
NewPlugin.BannerSound = string(bannerfilepath);
|
NewPlugin.BannerSound = bannerfilepath;
|
||||||
Plugins.push_back(NewPlugin);
|
Plugins.push_back(NewPlugin);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user