-added some security checks to list generator

(should fix wbfs partitions)
-removed some other unneeded stuff
-fixed some wrong code in return to
This commit is contained in:
fix94.1 2012-10-04 15:16:04 +00:00
parent f365b1080c
commit cbdd8d7ec8
7 changed files with 47 additions and 45 deletions

View File

@ -44,6 +44,8 @@
#define RF_NEWS_CHANNEL 0x48414741 #define RF_NEWS_CHANNEL 0x48414741
#define RF_FORECAST_CHANNEL 0x48414641 #define RF_FORECAST_CHANNEL 0x48414641
Channels ChannelHandle;
Channels::Channels() Channels::Channels()
{ {
} }

View File

@ -80,4 +80,6 @@ class Channels
}; };
extern Channels ChannelHandle;
#endif #endif

View File

@ -27,14 +27,18 @@ ListGenerator m_gameList;
void ListGenerator::Init(const char *settingsDir, const char *Language) void ListGenerator::Init(const char *settingsDir, const char *Language)
{ {
gameTDB_Path = fmt("%s/wiitdb.xml", settingsDir); if(settingsDir != NULL)
CustomTitlesPath = fmt("%s/" CTITLES_FILENAME, settingsDir); {
gameTDB_Language = Language; gameTDB_Path = fmt("%s/wiitdb.xml", settingsDir);
CustomTitlesPath = fmt("%s/" CTITLES_FILENAME, settingsDir);
}
if(Language != NULL) gameTDB_Language = Language;
} }
void ListGenerator::Cleanup() void ListGenerator::Cleanup()
{ {
this->clear(); //clear gamelist this->clear(); //clear gamelist
InternalList.clear(); //clear pathlist
} }
void ListGenerator::OpenConfigs() void ListGenerator::OpenConfigs()
@ -53,21 +57,21 @@ void ListGenerator::CloseConfigs()
CustomTitles.unload(); CustomTitles.unload();
} }
void ListGenerator::CreateList(u32 Flow, u32 Device, const string& Path, void ListGenerator::CreateList(u32 Flow, u32 Device, const string& Path, const vector<string>& FileTypes,
const vector<string>& FileTypes, const string& DBName, bool UpdateCache, u32 Color, u32 Magic) const string& DBName, bool UpdateCache, u32 Color, u32 Magic)
{ {
Cleanup(); Cleanup();
if(UpdateCache) if(!DBName.empty())
{ {
gprintf("Force Update Cache\n"); if(UpdateCache)
fsop_deleteFile(DBName.c_str()); fsop_deleteFile(DBName.c_str());
} else
else {
{ CCache(*this, DBName, LOAD);
CCache(*this, DBName, LOAD); if(!this->empty())
if(!this->empty()) return;
return; fsop_deleteFile(DBName.c_str());
fsop_deleteFile(DBName.c_str()); }
} }
OpenConfigs(); OpenConfigs();
if(Flow == COVERFLOW_USB) if(Flow == COVERFLOW_USB)
@ -78,7 +82,7 @@ const vector<string>& FileTypes, const string& DBName, bool UpdateCache, u32 Col
Create_Wii_EXT_List(Path, FileTypes); Create_Wii_EXT_List(Path, FileTypes);
} }
else if(Flow == COVERFLOW_CHANNEL) else if(Flow == COVERFLOW_CHANNEL)
CreateChannelList(); Create_Channel_List();
else if(DeviceHandle.GetFSType(Device) != PART_FS_WBFS) else if(DeviceHandle.GetFSType(Device) != PART_FS_WBFS)
{ {
if(Flow == COVERFLOW_DML) if(Flow == COVERFLOW_DML)
@ -89,7 +93,7 @@ const vector<string>& FileTypes, const string& DBName, bool UpdateCache, u32 Col
Create_Homebrew_List(Path, FileTypes); Create_Homebrew_List(Path, FileTypes);
} }
CloseConfigs(); CloseConfigs();
if(!this->empty()) /* Write a new Cache */ if(!this->empty() && !DBName.empty()) /* Write a new Cache */
CCache(*this, DBName, SAVE); CCache(*this, DBName, SAVE);
} }
@ -136,7 +140,6 @@ void ListGenerator::Create_GC_List(const string& Path, const vector<string>& Fil
{ {
Name->erase(Name->begin() + Name->find("root"), Name->end()); Name->erase(Name->begin() + Name->find("root"), Name->end());
Name->append("sys/boot.bin"); Name->append("sys/boot.bin");
gprintf("FST Name: %s\n", Name->c_str());
fp = fopen(Name->c_str(), "rb"); fp = fopen(Name->c_str(), "rb");
} }
if(fp) if(fp)
@ -178,7 +181,7 @@ void ListGenerator::Create_Plugin_List(const string& Path, const vector<string>&
void ListGenerator::Create_Homebrew_List(const string& Path, const vector<string>& FileTypes) void ListGenerator::Create_Homebrew_List(const string& Path, const vector<string>& FileTypes)
{ {
dir_discHdr ListElement; dir_discHdr ListElement;
GetFiles(Path.c_str(), FileTypes, InternalList, false, 4); GetFiles(Path.c_str(), FileTypes, InternalList, false);
for(vector<string>::iterator Name = InternalList.begin(); Name != InternalList.end(); Name++) for(vector<string>::iterator Name = InternalList.begin(); Name != InternalList.end(); Name++)
{ {
if(Name->find("boot.") == string::npos) if(Name->find("boot.") == string::npos)
@ -202,12 +205,12 @@ void ListGenerator::Create_Homebrew_List(const string& Path, const vector<string
this->push_back(ListElement); this->push_back(ListElement);
continue; continue;
} }
InternalList.clear();
} }
void ListGenerator::CreateChannelList() void ListGenerator::Create_Channel_List()
{ {
u32 GameColor = 1; u32 GameColor = 1;
Channels ChannelHandle;
dir_discHdr ListElement; dir_discHdr ListElement;
ChannelHandle.Init(0, gameTDB_Language, true); ChannelHandle.Init(0, gameTDB_Language, true);
for(int i = 0; i < ChannelHandle.Count(); i++) for(int i = 0; i < ChannelHandle.Count(); i++)
@ -238,6 +241,7 @@ void ListGenerator::CreateChannelList()
ListElement.type = TYPE_CHANNEL; ListElement.type = TYPE_CHANNEL;
this->push_back(ListElement); this->push_back(ListElement);
} }
InternalList.clear();
} }
void ListGenerator::AddISO(const char *GameID, const char *GameTitle, const char *GamePath, u32 GameColor, u8 Type) void ListGenerator::AddISO(const char *GameID, const char *GameTitle, const char *GamePath, u32 GameColor, u8 Type)
@ -245,8 +249,8 @@ void ListGenerator::AddISO(const char *GameID, const char *GameTitle, const char
dir_discHdr ListElement; dir_discHdr ListElement;
memset((void*)&ListElement, 0, sizeof(dir_discHdr)); memset((void*)&ListElement, 0, sizeof(dir_discHdr));
ListElement.index = this->size(); ListElement.index = this->size();
strncpy(ListElement.id, GameID, 6); if(GameID != NULL) strncpy(ListElement.id, GameID, 6);
strncpy(ListElement.path, GamePath, sizeof(ListElement.path)); if(GamePath != NULL) strncpy(ListElement.path, GamePath, sizeof(ListElement.path));
ListElement.casecolor = CustomTitles.getColor("COVERS", ListElement.id, GameColor).intVal(); ListElement.casecolor = CustomTitles.getColor("COVERS", ListElement.id, GameColor).intVal();
string CustomTitle = CustomTitles.getString("TITLES", ListElement.id); string CustomTitle = CustomTitles.getString("TITLES", ListElement.id);
if(gameTDB.IsLoaded()) if(gameTDB.IsLoaded())
@ -260,7 +264,7 @@ void ListGenerator::AddISO(const char *GameID, const char *GameTitle, const char
} }
if(CustomTitle.size() > 0) if(CustomTitle.size() > 0)
mbstowcs(ListElement.title, CustomTitle.c_str(), 63); mbstowcs(ListElement.title, CustomTitle.c_str(), 63);
else else if(GameTitle != NULL)
mbstowcs(ListElement.title, GameTitle, 63); mbstowcs(ListElement.title, GameTitle, 63);
Asciify(ListElement.title); Asciify(ListElement.title);

View File

@ -45,7 +45,7 @@ private:
void Create_Plugin_List(const string& Path, const vector<string>& FileTypes, void Create_Plugin_List(const string& Path, const vector<string>& FileTypes,
u32 Color, u32 Magic); u32 Color, u32 Magic);
void Create_Homebrew_List(const string& Path, const vector<string>& FileTypes); void Create_Homebrew_List(const string& Path, const vector<string>& FileTypes);
void CreateChannelList(); void Create_Channel_List();
void AddISO(const char *GameID, const char *GameTitle, const char *GamePath, u32 GameColor, u8 Type); void AddISO(const char *GameID, const char *GameTitle, const char *GamePath, u32 GameColor, u8 Type);
bool IsFileSupported(const char *File, const vector<string>& FileTypes); bool IsFileSupported(const char *File, const vector<string>& FileTypes);
void OpenConfigs(); void OpenConfigs();

View File

@ -2169,8 +2169,10 @@ bool CMenu::_loadChannelList(void)
if(Nand::Instance()->EmulationEnabled() || disable_emu) if(Nand::Instance()->EmulationEnabled() || disable_emu)
{ {
string cacheDir(fmt("%s/%s_channels.db", m_cacheDir.c_str(), disable_emu ? "nand" : DeviceName[currentPartition])); string cacheDir;
bool updateCache = disable_emu ? true : m_cfg.getBool(_domainFromView(), "update_cache"); if(!disable_emu)
cacheDir = fmt("%s/%s_channels.db", m_cacheDir.c_str(), DeviceName[currentPartition]);
bool updateCache = m_cfg.getBool(_domainFromView(), "update_cache");
vector<string> NullVector; vector<string> NullVector;
m_gameList.CreateList(m_current_view, currentPartition, std::string(), m_gameList.CreateList(m_current_view, currentPartition, std::string(),
NullVector, cacheDir, updateCache); NullVector, cacheDir, updateCache);

View File

@ -18,8 +18,6 @@ static inline int loopNum(int i, int s)
int currentChannelIndex = -1; int currentChannelIndex = -1;
int amountOfChannels = -1; int amountOfChannels = -1;
Channels m_channels;
const CMenu::SOption CMenu::_exitTo[5] = { const CMenu::SOption CMenu::_exitTo[5] = {
{ "def", L"Default" }, { "def", L"Default" },
{ "menu", L"System Menu" }, { "menu", L"System Menu" },
@ -78,29 +76,22 @@ void CMenu::_showConfig4(void)
wstringEx channelName = m_loc.getWString(m_curLanguage, "disabled", L"Disabled"); wstringEx channelName = m_loc.getWString(m_curLanguage, "disabled", L"Disabled");
string langCode = m_loc.getString(m_curLanguage, "gametdb_code", "EN");
Nand::Instance()->Disable_Emu(); Nand::Instance()->Disable_Emu();
ChannelHandle.Init(0, m_loc.getString(m_curLanguage, "gametdb_code", "EN"), true);
m_channels.Init(0x00010001, langCode, true); amountOfChannels = ChannelHandle.Count();
amountOfChannels = m_channels.Count();
string currentChanId = m_cfg.getString("GENERAL", "returnto" ); string currentChanId = m_cfg.getString("GENERAL", "returnto" );
if (currentChanId.size() > 0) if (currentChanId.size() > 0)
{ {
for (int i = 0; i < amountOfChannels; i++) for (int i = 0; i < amountOfChannels; i++)
{ {
if (currentChanId == m_channels.GetId(i)) if (currentChanId == ChannelHandle.GetId(i))
{ {
channelName = custom_titles.getWString("TITLES", currentChanId, titles.getWString("TITLES", currentChanId, m_channels.GetName(i))); channelName = custom_titles.getWString("TITLES", currentChanId, titles.getWString("TITLES", currentChanId, ChannelHandle.GetName(i)));
break; break;
} }
} }
} }
if(!neek2o() && m_current_view == COVERFLOW_CHANNEL && m_cfg.getInt("NAND", "emulation", 0) > 0)
Nand::Instance()->Enable_Emu();
m_btnMgr.setText(m_config4LblReturnToVal, channelName); m_btnMgr.setText(m_config4LblReturnToVal, channelName);
} }
@ -139,7 +130,7 @@ int CMenu::_config4(void)
if (currentChannelIndex == -1) if (currentChannelIndex == -1)
m_cfg.remove("GENERAL", "returnto"); m_cfg.remove("GENERAL", "returnto");
else else
m_cfg.setString("GENERAL", "returnto", m_channels.GetId(currentChannelIndex)); m_cfg.setString("GENERAL", "returnto", ChannelHandle.GetId(currentChannelIndex));
_showConfig4(); _showConfig4();
} }
else if (m_btnMgr.selected(m_config4BtnReturnToM)) else if (m_btnMgr.selected(m_config4BtnReturnToM))
@ -149,11 +140,13 @@ int CMenu::_config4(void)
if (currentChannelIndex == -1) if (currentChannelIndex == -1)
m_cfg.remove("GENERAL", "returnto"); m_cfg.remove("GENERAL", "returnto");
else else
m_cfg.setString("GENERAL", "returnto", m_channels.GetId(currentChannelIndex)); m_cfg.setString("GENERAL", "returnto", ChannelHandle.GetId(currentChannelIndex));
_showConfig4(); _showConfig4();
} }
} }
} }
if(!neek2o() && m_current_view == COVERFLOW_CHANNEL && m_cfg.getBool("NAND", "disable", true) == false)
Nand::Instance()->Enable_Emu();
_hideConfig4(); _hideConfig4();
return change; return change;
} }

View File

@ -258,7 +258,7 @@ static void _extractBannerTitle(Banner *bnr, int language)
static Banner *_extractChannelBnr(const u64 chantitle) static Banner *_extractChannelBnr(const u64 chantitle)
{ {
return Channels::GetBanner(chantitle); return ChannelHandle.GetBanner(chantitle);
} }
static Banner *_extractBnr(dir_discHdr *hdr) static Banner *_extractBnr(dir_discHdr *hdr)
@ -1027,7 +1027,6 @@ static const char systems[11] = { 'C', 'E', 'F', 'J', 'L', 'M', 'N', 'P', 'Q', '
void CMenu::_launchChannel(dir_discHdr *hdr) void CMenu::_launchChannel(dir_discHdr *hdr)
{ {
Channels channel;
u32 gameIOS = 0; u32 gameIOS = 0;
string id = string(hdr->id); string id = string(hdr->id);
@ -1122,7 +1121,7 @@ void CMenu::_launchChannel(dir_discHdr *hdr)
Nand::Instance()->Init(emuPath.c_str(), emuPartition, false); Nand::Instance()->Init(emuPath.c_str(), emuPartition, false);
Nand::Instance()->Enable_Emu(); Nand::Instance()->Enable_Emu();
} }
gameIOS = channel.GetRequestedIOS(gameTitle); gameIOS = ChannelHandle.GetRequestedIOS(gameTitle);
if(!emu_disabled) if(!emu_disabled)
Nand::Instance()->Disable_Emu(); Nand::Instance()->Disable_Emu();
if(_loadIOS(gameIOS, userIOS, id) == LOAD_IOS_FAILED) if(_loadIOS(gameIOS, userIOS, id) == LOAD_IOS_FAILED)