diff --git a/source/config/config.cpp b/source/config/config.cpp index fddaa3f2..2fff3af5 100644 --- a/source/config/config.cpp +++ b/source/config/config.cpp @@ -319,9 +319,10 @@ wstringEx Config::getWString(const string &domain, const string &key, const wstr string Config::getString(const string &domain, const string &key, const string &defVal) { - if (domain.empty() || key.empty()) return defVal; + if(domain.empty() || key.empty()) + return defVal; string &data = m_domains[upperCase(domain)][lowerCase(key)]; - if (data.empty() || strncasecmp(data.c_str(), "usb:", 4) == 0) + if(data.empty()) { data = defVal; m_changed = true; diff --git a/source/menu/menu.cpp b/source/menu/menu.cpp index 43f85948..c42ff6c0 100644 --- a/source/menu/menu.cpp +++ b/source/menu/menu.cpp @@ -1520,7 +1520,7 @@ void CMenu::_initCF(void) m_cf.clear(); m_cf.reserve(m_gameList.size()); - vector EnabledPlugins; + const vector *EnabledPlugins; if(m_current_view == COVERFLOW_PLUGIN) EnabledPlugins = m_plugin.GetEnabledPlugins(m_cfg); @@ -1546,10 +1546,10 @@ void CMenu::_initCF(void) // check for single plugin selected u8 pos = 0; u8 enabledPluginsCount = 0; - if(m_current_view == COVERFLOW_PLUGIN && EnabledPlugins.size() != 0) + if(m_current_view == COVERFLOW_PLUGIN && EnabledPlugins->size() != 0) { char PluginMagicWord[9]; - for(u8 i = 0; i < EnabledPlugins.size(); i++) + for(u8 i = 0; i < EnabledPlugins->size(); i++) { snprintf(PluginMagicWord, sizeof(PluginMagicWord), "%08x", m_plugin.getPluginMagic(i)); if(m_cfg.getBool("PLUGIN", PluginMagicWord, true)) @@ -1785,7 +1785,7 @@ void CMenu::_initCF(void) if(tempname.find_last_of("/") != string::npos) tempname.assign(&tempname[tempname.find_last_of("/") + 1]); string coverFolder(m_plugin.GetCoverFolderName(m_gameList[i].settings[0])); - if(EnabledPlugins.size() == 0) //all plugins + if(EnabledPlugins->size() == 0) //all plugins { if(coverFolder.size() > 0) m_cf.addItem(&m_gameList[i], fmt("%s/%s/%s.png", m_picDir.c_str(), coverFolder.c_str(), tempname.c_str()), fmt("%s/%s/%s.png", m_boxPicDir.c_str(), coverFolder.c_str(), tempname.c_str()), playcount, lastPlayed); @@ -1794,9 +1794,9 @@ void CMenu::_initCF(void) } else { - for(u8 j = 0; j < EnabledPlugins.size(); j++) + for(u8 j = 0; j < EnabledPlugins->size(); j++) { - if(EnabledPlugins[j] == true && m_gameList[i].settings[0] == m_plugin.getPluginMagic(j)) + if(EnabledPlugins->at(j) == true && m_gameList[i].settings[0] == m_plugin.getPluginMagic(j)) { if(coverFolder.size() > 0) m_cf.addItem(&m_gameList[i], fmt("%s/%s/%s.png", m_picDir.c_str(), coverFolder.c_str(), tempname.c_str()), fmt("%s/%s/%s.png", m_boxPicDir.c_str(), coverFolder.c_str(), tempname.c_str()), playcount, lastPlayed); @@ -2302,7 +2302,7 @@ bool CMenu::_loadEmuList() Config scummvm; vector scummvmList; scummvm.load(fmt("%s/%s", m_pluginsDir.c_str(), "scummvm.ini")); - scummvmList = m_plugin.ParseScummvmINI(scummvm, string(DeviceName[currentPartition])); + scummvmList = m_plugin.ParseScummvmINI(scummvm, DeviceName[currentPartition]); for(vector::iterator tmp_itr = scummvmList.begin(); tmp_itr != scummvmList.end(); tmp_itr++) emuList.push_back(*tmp_itr); } diff --git a/source/menu/menu.hpp b/source/menu/menu.hpp index c5b881a3..a1a3766a 100644 --- a/source/menu/menu.hpp +++ b/source/menu/menu.hpp @@ -922,6 +922,7 @@ private: void _showHome(void); void _showExitTo(void); void _updateSourceBtns(void); + void _updatePluginText(void); void _updatePluginCheckboxes(void); void _updateCheckboxes(void); void _getIDCats(void); diff --git a/source/menu/menu_categories.cpp b/source/menu/menu_categories.cpp index 230791e4..52e6b7bb 100644 --- a/source/menu/menu_categories.cpp +++ b/source/menu/menu_categories.cpp @@ -149,15 +149,14 @@ void CMenu::_CategorySettings(bool fromGameSet) catDomain = _domainFromView(); u8 pos = 0; - vector EnabledPlugins; if(m_current_view == COVERFLOW_PLUGIN) { - EnabledPlugins = m_plugin.GetEnabledPlugins(m_cfg); - if(EnabledPlugins.size() != 0) + const vector *EnabledPlugins = m_plugin.GetEnabledPlugins(m_cfg); + if(EnabledPlugins->size() != 0) { char PluginMagicWord[9]; u8 enabledPluginsCount = 0; - for(u8 i = 0; i < EnabledPlugins.size(); i++) + for(u8 i = 0; i < EnabledPlugins->size(); i++) { snprintf(PluginMagicWord, sizeof(PluginMagicWord), "%08x", m_plugin.getPluginMagic(i)); if(m_cfg.getBool("PLUGIN", PluginMagicWord, true)) diff --git a/source/menu/menu_plugin.cpp b/source/menu/menu_plugin.cpp index 9a5721f7..47ee7614 100644 --- a/source/menu/menu_plugin.cpp +++ b/source/menu/menu_plugin.cpp @@ -3,7 +3,8 @@ #include #include -u32 Plugin_curPage; +u8 Plugin_curPage; +u8 Plugin_Pages; u8 Plugin_lastBtn; // Plugin menu @@ -12,10 +13,10 @@ s16 m_pluginBtnPageM; s16 m_pluginBtnPageP; s16 m_pluginBtnBack; s16 m_pluginLblTitle; -s16 m_pluginLblCat[21]; -s16 m_pluginBtn[21]; -s16 m_pluginBtnCat[21]; -s16 m_pluginBtnCats[21]; +s16 m_pluginLblCat[11]; +s16 m_pluginBtn[11]; +s16 m_pluginBtnCat[11]; +s16 m_pluginBtnCats[11]; s16 m_pluginLblUser[4]; u8 m_max_plugins; STexture m_pluginBg; @@ -32,8 +33,7 @@ void CMenu::_hidePluginSettings(bool instant) if(m_pluginLblUser[i] != -1) m_btnMgr.hide(m_pluginLblUser[i], instant); } - - for(int i = 0; i < 21; ++i) + for(u8 i = 0; i < 11; ++i) { m_btnMgr.hide(m_pluginLblCat[i]); m_btnMgr.hide(m_pluginBtn[i]); @@ -53,54 +53,56 @@ void CMenu::_showPluginSettings(void) _updatePluginCheckboxes(); } +void CMenu::_updatePluginText(void) +{ + u32 IteratorHelp = (Plugin_curPage - 1) * 10; + for(u8 i = 1; i < min(IteratorHelp+10, (u32)m_max_plugins)-IteratorHelp+1; i++) + m_btnMgr.setText(m_pluginLblCat[i], m_plugin.GetPluginName(i+IteratorHelp-1)); +} + void CMenu::_updatePluginCheckboxes(void) { if(m_max_plugins > 10) { - m_btnMgr.setText(m_pluginLblPage, wfmt(L"%i / 2", Plugin_curPage)); + m_btnMgr.setText(m_pluginLblPage, wfmt(L"%i / %i", Plugin_curPage, Plugin_Pages)); m_btnMgr.show(m_pluginLblPage); m_btnMgr.show(m_pluginBtnPageM); m_btnMgr.show(m_pluginBtnPageP); } - for(int i = 0; i < 21; ++i) + for(int i = 0; i < 11; ++i) { m_btnMgr.hide(m_pluginBtn[i]); m_btnMgr.hide(m_pluginLblCat[i]); } - - vector EnabledPlugins = m_plugin.GetEnabledPlugins(m_cfg); - if(Plugin_curPage == 1) - { - int j = 11; - if(m_max_plugins < 11) - j = m_max_plugins; - for(u8 i = 0; i < j; ++i) - { - if((EnabledPlugins.size() == 0) || (i != 0 && EnabledPlugins.size() >= i && EnabledPlugins[i - 1] == true)) - m_pluginBtn[i] = m_pluginBtnCats[i]; - else - m_pluginBtn[i] = m_pluginBtnCat[i]; - m_btnMgr.show(m_pluginBtn[i]); - m_btnMgr.show(m_pluginLblCat[i]); - } - } + const vector *EnabledPlugins = m_plugin.GetEnabledPlugins(m_cfg); + /* ALL Button */ + if(EnabledPlugins->size() == 0) + m_pluginBtn[0] = m_pluginBtnCats[0]; else + m_pluginBtn[0] = m_pluginBtnCat[0]; + m_btnMgr.show(m_pluginBtn[0]); + m_btnMgr.show(m_pluginLblCat[0]); + /* Single Plugins */ + u32 IteratorHelp = (Plugin_curPage - 1) * 10; + for(u8 i = 1; i < min(IteratorHelp+10, (u32)m_max_plugins)-IteratorHelp+1; ++i) { - for(int i = 11; i < m_max_plugins; ++i) - { + if(EnabledPlugins->size() == 0 || EnabledPlugins->at(i+IteratorHelp-1) == true) + m_pluginBtn[i] = m_pluginBtnCats[i]; + else m_pluginBtn[i] = m_pluginBtnCat[i]; - m_btnMgr.show(m_pluginBtn[i]); - m_btnMgr.show(m_pluginLblCat[i]); - } + m_btnMgr.show(m_pluginBtn[i]); + m_btnMgr.show(m_pluginLblCat[i]); } } void CMenu::_PluginSettings() { SetupInput(); + Plugin_Pages = 1; Plugin_curPage = 1; _textPluginSettings(); _showPluginSettings(); + _updatePluginText(); while(!m_exit) { _mainLoopCommon(); @@ -119,19 +121,23 @@ void CMenu::_PluginSettings() { Plugin_lastBtn = m_pluginBtnPageM; m_btnMgr.noHover(true); - Plugin_curPage = Plugin_curPage == 1 ? 2 : 1; + Plugin_curPage--; + if(Plugin_curPage == 0) Plugin_curPage = Plugin_Pages; if(BTN_LEFT_PRESSED || BTN_MINUS_PRESSED) m_btnMgr.click(m_pluginBtnPageM); _updatePluginCheckboxes(); + _updatePluginText(); } else if(((BTN_PLUS_PRESSED || BTN_RIGHT_PRESSED)) || (BTN_A_PRESSED && m_btnMgr.selected(m_pluginBtnPageP))) { Plugin_lastBtn = m_pluginBtnPageP; m_btnMgr.noHover(true); - Plugin_curPage = Plugin_curPage == 1 ? 2 : 1; + Plugin_curPage++; + if(Plugin_curPage > Plugin_Pages) Plugin_curPage = 1; if(BTN_RIGHT_PRESSED || BTN_PLUS_PRESSED) m_btnMgr.click(m_pluginBtnPageP); _updatePluginCheckboxes(); + _updatePluginText(); } if(BTN_A_PRESSED) { @@ -140,7 +146,8 @@ void CMenu::_PluginSettings() m_cfg.save(); break; } - for(int i = 0; i < 21; ++i) + u32 IteratorHelp = (Plugin_curPage - 1) * 10; + for(u8 i = 1; i < min(IteratorHelp+10, (u32)m_max_plugins)-IteratorHelp+1; ++i) { if(m_btnMgr.selected(m_pluginBtn[i])) { @@ -149,18 +156,18 @@ void CMenu::_PluginSettings() if(i == 0) { int j = 0; - bool EnableAll = (m_plugin.GetEnabledPlugins(m_cfg).size()); + bool EnableAll = (m_plugin.GetEnabledPlugins(m_cfg)->size()); while(true) { - if(m_plugin.PluginExist(j)) - m_plugin.SetEnablePlugin(m_cfg, j, EnableAll ? 2 : 1); + if(m_plugin.PluginExist(j+IteratorHelp-1)) + m_plugin.SetEnablePlugin(m_cfg, j+IteratorHelp-1, EnableAll ? 2 : 1); else break; j++; } } else - m_plugin.SetEnablePlugin(m_cfg, i - 1); + m_plugin.SetEnablePlugin(m_cfg, i+IteratorHelp-1); _updatePluginCheckboxes(); break; } @@ -191,27 +198,21 @@ void CMenu::_initPluginSettingsMenu(CMenu::SThemeData &theme) m_pluginBtnCat[i+5] = _addPicButton(theme, fmt("PLUGIN/PLUGIN_%i_BTN", i+5), theme.checkboxoff, theme.checkboxoffs, 325, (42+i*58), 44, 48); m_pluginBtnCats[i+5] = _addPicButton(theme, fmt("PLUGIN/PLUGIN_%i_BTNS", i+5), theme.checkboxon, theme.checkboxons, 325, (42+i*58), 44, 48); m_pluginLblCat[i+5] = _addLabel(theme, fmt("PLUGIN/PLUGIN_%i", i+5), theme.txtFont, L"", 380, (42+i*58), 230, 48, theme.lblFontColor, FTGX_JUSTIFY_LEFT | FTGX_ALIGN_MIDDLE); - // Page 2 - m_pluginBtnCat[i+10] = _addPicButton(theme, fmt("PLUGIN/PLUGIN_%i_BTN", i+10), theme.checkboxoff, theme.checkboxoffs, 30, (42+i*58), 44, 48); - m_pluginBtnCats[i+10] = _addPicButton(theme, fmt("PLUGIN/PLUGIN_%i_BTNS", i+10), theme.checkboxon, theme.checkboxons, 30, (42+i*58), 44, 48); - m_pluginLblCat[i+10] = _addLabel(theme, fmt("PLUGIN/PLUGIN_%i", i+10), theme.lblFont, L"", 85, (42+i*58), 230, 48, theme.lblFontColor, FTGX_JUSTIFY_LEFT | FTGX_ALIGN_MIDDLE); - // right half - m_pluginBtnCat[i+15] = _addPicButton(theme, fmt("PLUGIN/PLUGIN_%i_BTN", i+15), theme.checkboxoff, theme.checkboxoffs, 325, (42+i*58), 44, 48); - m_pluginBtnCats[i+15] = _addPicButton(theme, fmt("PLUGIN/PLUGIN_%i_BTNS", i+15), theme.checkboxon, theme.checkboxons, 325, (42+i*58), 44, 48); - m_pluginLblCat[i+15] = _addLabel(theme, fmt("PLUGIN/PLUGIN_%i", i+15), theme.txtFont, L"", 380, (42+i*58), 230, 48, theme.lblFontColor, FTGX_JUSTIFY_LEFT | FTGX_ALIGN_MIDDLE); } _setHideAnim(m_pluginLblTitle, "PLUGIN/TITLE", 0, 0, -2.f, 0.f); _setHideAnim(m_pluginLblPage, "PLUGIN/PAGE_BTN", 0, 0, 1.f, -1.f); _setHideAnim(m_pluginBtnPageM, "PLUGIN/PAGE_MINUS", 0, 0, 1.f, -1.f); _setHideAnim(m_pluginBtnPageP, "PLUGIN/PAGE_PLUS", 0, 0, 1.f, -1.f); _setHideAnim(m_pluginBtnBack, "PLUGIN/BACK_BTN", 0, 0, 1.f, -1.f); - for(u8 i = 0; i < 21; ++i) + for(u8 i = 0; i < 11; ++i) { _setHideAnim(m_pluginBtnCat[i], fmt("PLUGIN/PLUGIN_%i_BTN", i), 0, 0, 1.f, 0.f); _setHideAnim(m_pluginBtnCats[i], fmt("PLUGIN/PLUGIN_%i_BTNS", i), 0, 0, 1.f, 0.f); _setHideAnim(m_pluginLblCat[i], fmt("PLUGIN/PLUGIN_%i", i), 0, 0, 1.f, 0.f); m_pluginBtn[i] = m_pluginBtnCat[i]; } + Plugin_curPage = 1; + Plugin_Pages = 1; m_max_plugins = 0; _hidePluginSettings(true); _textPluginSettings(); @@ -228,10 +229,9 @@ void CMenu::_textPluginSettings(void) m_btnMgr.setText(m_pluginLblCat[i], _t("dl25", L"All")); else { - if(m_plugin.PluginExist(i - 1)) - m_btnMgr.setText(m_pluginLblCat[i], m_plugin.GetPluginName(i - 1)); - else + if(!m_plugin.PluginExist(i - 1)) { + Plugin_Pages = (i-1)/10; m_max_plugins = i; break; } diff --git a/source/plugin/plugin.cpp b/source/plugin/plugin.cpp index a9513e3d..f5e1c452 100644 --- a/source/plugin/plugin.cpp +++ b/source/plugin/plugin.cpp @@ -28,11 +28,7 @@ #include "types.h" #include "crc32.h" -static const string emptyString; -static const string emptyString2("/"); -static char* emptyChar = (char*)" "; - -void Plugin::init(string m_pluginsDir) +void Plugin::init(const string& m_pluginsDir) { pluginsDir = m_pluginsDir; //Ready to add plugins @@ -56,21 +52,21 @@ bool Plugin::AddPlugin(Config &plugin) return false; PluginOptions NewPlugin; - NewPlugin.DolName = plugin.getString(PLUGIN_DOMAIN, "dolFile",emptyChar); - NewPlugin.coverFolder = plugin.getString(PLUGIN_DOMAIN, "coverFolder",emptyChar); - NewPlugin.magicWord = strtoul(plugin.getString(PLUGIN_DOMAIN, "magic",emptyChar).c_str(), NULL, 16); - NewPlugin.caseColor = strtoul(plugin.getString(PLUGIN_DOMAIN, "coverColor",emptyChar).c_str(), NULL, 16); + NewPlugin.DolName = plugin.getString(PLUGIN_DOMAIN, "dolFile"); + NewPlugin.coverFolder = plugin.getString(PLUGIN_DOMAIN, "coverFolder"); + NewPlugin.magicWord = strtoul(plugin.getString(PLUGIN_DOMAIN, "magic").c_str(), NULL, 16); + NewPlugin.caseColor = strtoul(plugin.getString(PLUGIN_DOMAIN, "coverColor").c_str(), NULL, 16); NewPlugin.Args = plugin.getStrings(PLUGIN_DOMAIN, "arguments", '|'); - string PluginName = plugin.getString(PLUGIN_DOMAIN, "displayname",emptyChar); - if(PluginName == emptyString || PluginName == emptyString2) + string PluginName = plugin.getString(PLUGIN_DOMAIN, "displayname"); + if(PluginName.size() < 2) { PluginName = NewPlugin.DolName; PluginName.erase(PluginName.end() - 4, PluginName.end()); } NewPlugin.DisplayName.fromUTF8(PluginName.c_str()); - NewPlugin.consoleCoverID = plugin.getString(PLUGIN_DOMAIN,"consoleCoverID",emptyChar); + NewPlugin.consoleCoverID = plugin.getString(PLUGIN_DOMAIN,"consoleCoverID"); - const char *bannerfilepath = fmt("%s/%s", pluginsDir.c_str(), plugin.getString(PLUGIN_DOMAIN,"bannerSound",emptyChar).c_str()); + const char *bannerfilepath = fmt("%s/%s", pluginsDir.c_str(), plugin.getString(PLUGIN_DOMAIN,"bannerSound").c_str()); FILE *fp = fopen(bannerfilepath, "rb"); if(fp != NULL) { @@ -128,14 +124,14 @@ char* Plugin::GetDolName(u32 magic) { if((Plugin_Pos = GetPluginPosition(magic)) >= 0) return (char*)Plugins[Plugin_Pos].DolName.c_str(); - return emptyChar; + return NULL; } char* Plugin::GetCoverFolderName(u32 magic) { if((Plugin_Pos = GetPluginPosition(magic)) >= 0) return (char*)Plugins[Plugin_Pos].coverFolder.c_str(); - return emptyChar; + return NULL; } bool Plugin::PluginExist(u8 pos) @@ -155,7 +151,8 @@ void Plugin::SetEnablePlugin(Config &cfg, u8 pos, u8 ForceMode) if(pos < Plugins.size()) { char PluginMagicWord[9]; - snprintf(PluginMagicWord, sizeof(PluginMagicWord), "%08x", Plugins[pos].magicWord); + memset(PluginMagicWord, 0, sizeof(PluginMagicWord)); + strncpy(PluginMagicWord, fmt("%08x", Plugins[pos].magicWord), 8); if(ForceMode == 1) cfg.setBool(PLUGIN_DOMAIN, PluginMagicWord, false); else if(ForceMode == 2) @@ -165,14 +162,15 @@ void Plugin::SetEnablePlugin(Config &cfg, u8 pos, u8 ForceMode) } } -vector Plugin::GetEnabledPlugins(Config &cfg) +const vector *Plugin::GetEnabledPlugins(Config &cfg) { - vector enabledPlugins; + enabledPlugins.clear(); char PluginMagicWord[9]; u8 enabledPluginsNumber = 0; for(u8 i = 0; i < Plugins.size(); i++) { - snprintf(PluginMagicWord, sizeof(PluginMagicWord), "%08x", Plugins[i].magicWord); + memset(PluginMagicWord, 0, sizeof(PluginMagicWord)); + strncpy(PluginMagicWord, fmt("%08x", Plugins[i].magicWord), 8); if(cfg.getBool(PLUGIN_DOMAIN, PluginMagicWord, true)) { enabledPluginsNumber++; @@ -183,7 +181,7 @@ vector Plugin::GetEnabledPlugins(Config &cfg) } if(enabledPluginsNumber == Plugins.size()) enabledPlugins.clear(); - return enabledPlugins; + return &enabledPlugins; } u32 Plugin::getPluginMagic(u8 pos) @@ -191,51 +189,48 @@ u32 Plugin::getPluginMagic(u8 pos) return Plugins[pos].magicWord; } -vector Plugin::ParseScummvmINI(Config &ini, string Device) +vector Plugin::ParseScummvmINI(Config &ini, const char *Device) { gprintf("Parsing scummvm.ini\n"); vector gameHeader; if(!ini.loaded()) return gameHeader; - string game(ini.firstDomain()); - string GameName; - dir_discHdr tmp; + const string *GameDomain = &ini.firstDomain(); + dir_discHdr ListElement; while(1) { - if(game == emptyString || game == emptyString2) + if(GameDomain->size() < 2) break; - GameName = ini.getString(game, "description"); - if(GameName == emptyString || GameName == emptyString2 || - strncasecmp(ini.getWString(game, "path").toUTF8().c_str(), Device.c_str(), 2) != 0) + const string &GameName = ini.getString(*GameDomain, "description"); + if(GameName.size() < 2 || ini.getString(*GameDomain, "path").find(Device) == string::npos) { - game = ini.nextDomain(); + GameDomain = &ini.nextDomain(); continue; } - memset(&tmp, 0, sizeof(dir_discHdr)); - strncpy((char*)tmp.id, PLUGIN_DOMAIN, sizeof(tmp.id)); - tmp.casecolor = Plugins.back().caseColor; - wstringEx tmpString; - tmpString.fromUTF8(GameName.c_str()); - wcsncpy(tmp.title, tmpString.c_str(), 64); - strncpy(tmp.path, game.c_str(), sizeof(tmp.path)); - gprintf("Found: %ls\n", tmp.title); - tmp.settings[0] = Plugins.back().magicWord; - tmp.type = TYPE_PLUGIN; - gameHeader.push_back(tmp); - game = ini.nextDomain(); + memset((void*)&ListElement, 0, sizeof(dir_discHdr)); + strncpy((char*)ListElement.id, PLUGIN_DOMAIN, 6); + ListElement.casecolor = Plugins.back().caseColor; + mbstowcs(ListElement.title, GameName.c_str(), 63); + strncpy(ListElement.path, GameDomain->c_str(), sizeof(ListElement.path)); + gprintf("Found: %s\n", GameDomain->c_str()); + ListElement.settings[0] = Plugins.back().magicWord; + ListElement.type = TYPE_PLUGIN; + gameHeader.push_back(ListElement); + GameDomain = &ini.nextDomain(); } return gameHeader; } -vector Plugin::CreateArgs(string device, string path, string title, string loader, u32 magic) +vector Plugin::CreateArgs(const string& device, const string& path, + const string& title, const string& loader, u32 magic) { vector args; Plugin_Pos = GetPluginPosition(magic); if(Plugin_Pos < 0) return args; - for(vector::iterator arg = Plugins[Plugin_Pos].Args.begin(); - arg != Plugins[Plugin_Pos].Args.end(); arg++) + for(vector::const_iterator arg = Plugins[Plugin_Pos].Args.begin(); + arg != Plugins[Plugin_Pos].Args.end(); ++arg) { string Argument(*arg); if(Argument.find(PLUGIN_DEV) != string::npos) @@ -251,8 +246,9 @@ vector Plugin::CreateArgs(string device, string path, string title, stri return args; } -string Plugin::GenerateCoverLink(dir_discHdr gameHeader, string url, Config &Checksums) +string Plugin::GenerateCoverLink(dir_discHdr gameHeader, const string& constURL, Config &Checksums) { + string url(constURL); Plugin_Pos = GetPluginPosition(gameHeader.settings[0]); if(url.find(TAG_LOC) != url.npos) @@ -266,12 +262,13 @@ string Plugin::GenerateCoverLink(dir_discHdr gameHeader, string url, Config &Che strncpy(gamePath, &gameHeader.path[string(gameHeader.path).find_last_of("/")+1], sizeof(gamePath)); else strncpy(gamePath, gameHeader.path, sizeof(gamePath)); - string cachedCRC = Checksums.getString("CHECKSUMS", gamePath, emptyString); + const string& cachedCRC = Checksums.getString("CHECKSUMS", gamePath); char crc_string[9]; - if(cachedCRC != emptyString) + memset(crc_string, 0, sizeof(crc_string)); + if(cachedCRC.size() > 1) { gprintf("CRC32 of %s is cached\n", gamePath); - snprintf(crc_string, sizeof(crc_string), "%s", cachedCRC.c_str()); + strncpy(crc_string, cachedCRC.c_str(), 8); } else { @@ -284,7 +281,7 @@ string Plugin::GenerateCoverLink(dir_discHdr gameHeader, string url, Config &Che infile.seekg(0x0e, ios::beg); infile.read((char*)&buffer, 8); infile.close(); - snprintf(crc_string, sizeof(crc_string), "%08x", (u32)__builtin_bswap32(buffer)); + strncpy(crc_string, fmt("%08x", (u32)__builtin_bswap32(buffer)), 8); } else if(strstr(gameHeader.path, ".7z") != NULL) { @@ -300,10 +297,10 @@ string Plugin::GenerateCoverLink(dir_discHdr gameHeader, string url, Config &Che infile.seekg(-13, ios::cur); infile.read((char*)&buffer, 8); infile.close(); - snprintf(crc_string, sizeof(crc_string), "%08x", (u32)__builtin_bswap32(buffer)); + strncpy(crc_string, fmt("%08x", (u32)__builtin_bswap32(buffer)), 8); } else - snprintf(crc_string, sizeof(crc_string), "%08x", crc32file(gameHeader.path)); + strncpy(crc_string, fmt("%08x", crc32file(gameHeader.path)), 8); Checksums.setString("CHECKSUMS", gamePath, crc_string); Checksums.save(); } diff --git a/source/plugin/plugin.hpp b/source/plugin/plugin.hpp index 84c7a737..757afac0 100644 --- a/source/plugin/plugin.hpp +++ b/source/plugin/plugin.hpp @@ -58,20 +58,22 @@ public: u32 GetBannerSoundSize(); char* GetDolName(u32 magic); char* GetCoverFolderName(u32 magic); - string GenerateCoverLink(dir_discHdr gameHeader, string url, Config &Checksums); + string GenerateCoverLink(dir_discHdr gameHeader, const string& constURL, Config &Checksums); wstringEx GetPluginName(u8 pos); u32 getPluginMagic(u8 pos); bool PluginExist(u8 pos); void SetEnablePlugin(Config &cfg, u8 pos, u8 ForceMode = 0); - vector GetEnabledPlugins(Config &cfg); - vector CreateArgs(string device, string path, string title, string loader, u32 magic); - void init(string); + const vector *GetEnabledPlugins(Config &cfg); + vector CreateArgs(const string& device, const string& path, + const string& title, const string& loader, u32 magic); + void init(const string& m_pluginsDir); void Cleanup(); void EndAdd(); - vector ParseScummvmINI(Config &ini, string Device); + vector ParseScummvmINI(Config &ini, const char *Device); private: s8 GetPluginPosition(u32 magic); vector Plugins; + vector enabledPlugins; s8 Plugin_Pos; string pluginsDir; bool adding;