From 05ad5b9da1a9d9eb23e56533dd3f6a673dbdae08 Mon Sep 17 00:00:00 2001 From: Ilari Liusvaara Date: Fri, 1 Jan 2016 07:57:48 +0200 Subject: [PATCH] Fix "empty path points to root" bug Unset paths are supposed to point to the current directory, not the root. --- include/core/project.hpp | 4 ++-- include/core/settings.hpp | 6 ++++++ src/core/instance.cpp | 2 +- src/core/mainloop.cpp | 2 +- src/core/moviedata.cpp | 2 +- src/core/project.cpp | 6 +++--- src/core/romguess.cpp | 4 ++-- src/core/romimage.cpp | 6 +++--- src/core/romloader.cpp | 10 +++++----- src/core/settings.cpp | 25 +++++++++++-------------- src/platform/wxwidgets/requestrom.cpp | 18 +++++++++--------- 11 files changed, 44 insertions(+), 41 deletions(-) rewrite src/core/settings.cpp (88%) diff --git a/include/core/project.hpp b/include/core/project.hpp index 916ab8fc..82ce90aa 100644 --- a/include/core/project.hpp +++ b/include/core/project.hpp @@ -164,7 +164,7 @@ class project_state { public: project_state(voice_commentary& _commentary, memwatch_set& _mwatch, command::group& _command, - controller_state& _controls, settingvar::cache& _setcache, button_mapping& _buttons, + controller_state& _controls, settingvar::group& _setgroup, button_mapping& _buttons, emulator_dispatch& _edispatch, input_queue& _iqueue, loaded_rom& _rom, status_updater& _supdater); ~project_state(); /** @@ -232,7 +232,7 @@ private: memwatch_set& mwatch; command::group& command; controller_state& controls; - settingvar::cache& setcache; + settingvar::group& setgroup; button_mapping& buttons; emulator_dispatch& edispatch; input_queue& iqueue; diff --git a/include/core/settings.hpp b/include/core/settings.hpp index 0cbc1dd8..261106c6 100644 --- a/include/core/settings.hpp +++ b/include/core/settings.hpp @@ -5,4 +5,10 @@ extern settingvar::set lsnes_setgrp; +extern settingvar::supervariable SET_rompath; +extern settingvar::supervariable SET_moviepath; +extern settingvar::supervariable SET_firmwarepath; +extern settingvar::supervariable SET_slotpath; + + #endif diff --git a/src/core/instance.cpp b/src/core/instance.cpp index 6335a48a..0d1db414 100644 --- a/src/core/instance.cpp +++ b/src/core/instance.cpp @@ -108,7 +108,7 @@ emulator_instance::emulator_instance() D.init(abindmanager, *mapper, *command); D.init(nrrdata); D.init(cmapper, *memory, *mlogic, *rom); - D.init(project, *commentary, *mwatch, *command, *controls, *setcache, *buttons, *dispatch, *iqueue, *rom, + D.init(project, *commentary, *mwatch, *command, *controls, *settings, *buttons, *dispatch, *iqueue, *rom, *supdater); D.init(dbg, *dispatch, *rom, *memory, *command); D.init(framerate, *command); diff --git a/src/core/mainloop.cpp b/src/core/mainloop.cpp index c8af2946..fe3db0e1 100644 --- a/src/core/mainloop.cpp +++ b/src/core/mainloop.cpp @@ -258,7 +258,7 @@ public: std::string get_firmware_path() { - return CORE().setcache->get("firmwarepath"); + return SET_firmwarepath(*CORE().settings); } std::string get_base_path() diff --git a/src/core/moviedata.cpp b/src/core/moviedata.cpp index dfbb3290..913dbcb9 100644 --- a/src/core/moviedata.cpp +++ b/src/core/moviedata.cpp @@ -175,7 +175,7 @@ std::string translate_name_mprefix(std::string original, int& binary, int save) } return filename; } else { - std::string pprf = core.setcache->get("slotpath") + "/"; + std::string pprf = SET_slotpath(*core.settings) + "/"; return pprf + get_mprefix() + r[1] + ".lsmv"; } } else { diff --git a/src/core/project.cpp b/src/core/project.cpp index 6e9e3e9b..a9be77d9 100644 --- a/src/core/project.cpp +++ b/src/core/project.cpp @@ -191,9 +191,9 @@ namespace } project_state::project_state(voice_commentary& _commentary, memwatch_set& _mwatch, command::group& _command, - controller_state& _controls, settingvar::cache& _setcache, button_mapping& _buttons, + controller_state& _controls, settingvar::group& _setgroup, button_mapping& _buttons, emulator_dispatch& _edispatch, input_queue& _iqueue, loaded_rom& _rom, status_updater& _supdater) - : commentary(_commentary), mwatch(_mwatch), command(_command), controls(_controls), setcache(_setcache), + : commentary(_commentary), mwatch(_mwatch), command(_command), controls(_controls), setgroup(_setgroup), buttons(_buttons), edispatch(_edispatch), iqueue(_iqueue), rom(_rom), supdater(_supdater), branch_ls(command, CPROJECT::bls, [this]() { this->do_branch_ls(); }), branch_mk(command, CPROJECT::bmk, [this](const std::string& a) { this->do_branch_mk(a); }), @@ -460,7 +460,7 @@ std::string project_state::moviepath() if(active_project) return active_project->directory; else - return setcache.get("moviepath"); + return SET_moviepath(setgroup); } std::string project_state::otherpath() diff --git a/src/core/romguess.cpp b/src/core/romguess.cpp index 6ee731ef..1c69543c 100644 --- a/src/core/romguess.cpp +++ b/src/core/romguess.cpp @@ -139,8 +139,8 @@ namespace { auto& core = CORE(); std::string x; - std::string romdir = core.setcache->get("rompath"); - std::string biosdir = core.setcache->get("firmwarepath"); + std::string romdir = SET_rompath(*core.settings); + std::string biosdir = SET_firmwarepath(*core.settings); if((x = try_scan_hint_dir(hint, hash, xhash, romdir, extensions, headersize)) != "") return x; if(bios && (x = try_scan_hint_dir(hint, hash, xhash, biosdir, extensions, headersize)) != "") return x; diff --git a/src/core/romimage.cpp b/src/core/romimage.cpp index 0c5861b0..10e81f86 100644 --- a/src/core/romimage.cpp +++ b/src/core/romimage.cpp @@ -197,7 +197,7 @@ rom_image::rom_image(const std::string& file, core_type& ctype) throw(std::bad_a if((bios = ctype.get_biosname()) != "") { //This thing has a BIOS. romidx = 1; - std::string basename = CORE().setcache->get("firmwarepath") + "/" + bios; + std::string basename = SET_firmwarepath(*CORE().settings) + "/" + bios; romimg[0] = fileimage::image(lsnes_image_hasher, basename, "", xlate_info(ctype.get_image_info(0))); if(zip::file_exists(basename + ".xml")) romxml[0] = fileimage::image(lsnes_image_hasher, basename + ".xml", "", get_xml_info()); @@ -241,7 +241,7 @@ rom_image::rom_image(const std::string& file, const std::string& tmpprefer) thro if((bios = coretype->get_biosname()) != "") { //This thing has a BIOS. romidx = 1; - std::string basename = CORE().setcache->get("firmwarepath") + "/" + bios; + std::string basename = SET_firmwarepath(*CORE().settings) + "/" + bios; romimg[0] = fileimage::image(lsnes_image_hasher, basename, "", xlate_info(coretype->get_image_info(0))); if(zip::file_exists(basename + ".xml")) @@ -395,7 +395,7 @@ rom_image::rom_image(const std::string& file, const std::string& core, const std std::string bios = t->get_biosname(); unsigned romidx = (bios != "") ? 1 : 0; if(bios != "") { - std::string basename = CORE().setcache->get("firmwarepath") + "/" + bios; + std::string basename = SET_firmwarepath(*CORE().settings) + "/" + bios; romimg[0] = fileimage::image(lsnes_image_hasher, basename, "", xlate_info(t->get_image_info(0))); if(zip::file_exists(basename + ".xml")) romxml[0] = fileimage::image(lsnes_image_hasher, basename + ".xml", "", get_xml_info()); diff --git a/src/core/romloader.cpp b/src/core/romloader.cpp index a6e971d5..7010ec38 100644 --- a/src/core/romloader.cpp +++ b/src/core/romloader.cpp @@ -173,12 +173,12 @@ rom_image_handle construct_rom_multifile(core_type* ctype, const moviefile::brie for(unsigned i = 0; i < ROM_SLOT_COUNT; i++) { std::string optregex; bool isbios = false; - std::string psetting; + auto psetting = &SET_firmwarepath; std::string romid; if(bios != "" && i == 0) { optregex = "--bios=(.*)"; isbios = true; - psetting = "firmwarepath"; + psetting = &SET_firmwarepath; romid = "BIOS"; } else { char j[2] = {0, 0}; @@ -186,7 +186,7 @@ rom_image_handle construct_rom_multifile(core_type* ctype, const moviefile::brie if(j[0] == 'a' + 26) j[0] = '@'; optregex = std::string("--rom-") + j + "=(.*)"; - psetting = "rompath"; + psetting = &SET_rompath; j[0] = i - ((bios != "") ? 1 : 0) + 'A'; if(j[0] == 'A' + 26) j[0] = '@'; @@ -211,7 +211,7 @@ rom_image_handle construct_rom_multifile(core_type* ctype, const moviefile::brie //Try to use hint. std::set exts = img.extensions; for(auto j : exts) { - std::string candidate = core.setcache->get(psetting) + "/" + info.hint[i] + + std::string candidate = (*psetting)(*core.settings) + "/" + info.hint[i] + "." + j; if(zip::file_exists(candidate)) { roms[i] = candidate; @@ -221,7 +221,7 @@ rom_image_handle construct_rom_multifile(core_type* ctype, const moviefile::brie } if(isbios && roms[i] == "" && i == 0) { //Fallback default. - roms[0] = core.setcache->get("firmwarepath") + "/" + bios; + roms[0] = SET_firmwarepath(*core.settings) + "/" + bios; } if(roms[i] == "" && info.hash[i] != "") roms[i] = try_to_guess_rom(info.hint[i], info.hash[i], info.hashxml[i], *ctype, i); diff --git a/src/core/settings.cpp b/src/core/settings.cpp dissimilarity index 88% index 05960015..f41867c4 100644 --- a/src/core/settings.cpp +++ b/src/core/settings.cpp @@ -1,14 +1,11 @@ -#include "core/settings.hpp" - -settingvar::set lsnes_setgrp; - -namespace -{ - settingvar::supervariable SET_rompath(lsnes_setgrp, "rompath", "Paths‣ROMs", ""); - settingvar::supervariable SET_moviepath(lsnes_setgrp, "moviepath", "Paths‣Movies", - ""); - settingvar::supervariable SET_firmwarepath(lsnes_setgrp, "firmwarepath", - "Paths‣Firmware", ""); - settingvar::supervariable SET_slotpath(lsnes_setgrp, "slotpath", "Paths‣Save slots", - ""); -} +#include "core/settings.hpp" + +settingvar::set lsnes_setgrp; + +settingvar::supervariable SET_rompath(lsnes_setgrp, "rompath", "Paths‣ROMs", ""); +settingvar::supervariable SET_moviepath(lsnes_setgrp, "moviepath", "Paths‣Movies", + ""); +settingvar::supervariable SET_firmwarepath(lsnes_setgrp, "firmwarepath", + "Paths‣Firmware", ""); +settingvar::supervariable SET_slotpath(lsnes_setgrp, "slotpath", "Paths‣Save slots", + ""); diff --git a/src/platform/wxwidgets/requestrom.cpp b/src/platform/wxwidgets/requestrom.cpp index bc625f72..06849528 100644 --- a/src/platform/wxwidgets/requestrom.cpp +++ b/src/platform/wxwidgets/requestrom.cpp @@ -119,7 +119,7 @@ namespace coreid[++corecount] = i.second; } filter += "|All files|*"; - std::string directory = inst.setcache->get("rompath"); + std::string directory = SET_rompath(*inst.settings); wxFileDialog* d = new wxFileDialog(parent, towxstring("Choose ROM to load"), towxstring(directory), wxT(""), towxstring(filter), wxFD_OPEN); if(d->ShowModal() == wxID_CANCEL) { @@ -302,12 +302,12 @@ namespace for(auto j : t.get_image_info(i).extensions) exts.insert(j); filter = "Known file types|" + implode_set(exts) + "|All files|*"; - std::string directory; + auto _directory = &SET_firmwarepath; if(t.get_biosname() != "" && i == 0) - directory = "firmwarepath"; + _directory = &SET_firmwarepath; else - directory = "rompath"; - directory = inst.setcache->get(directory); + _directory = &SET_rompath; + std::string directory = (*_directory)(*inst.settings); core_romimage_info iinfo = t.get_image_info(i); wxFileDialog* d = new wxFileDialog(this, towxstring("Load " + iinfo.hname), towxstring(directory), wxT(""), towxstring(filter), wxFD_OPEN); @@ -439,12 +439,12 @@ void wxwin_mainwindow::request_rom(rom_request& req) continue; //Shouldn't happen. } core_romimage_info iinfo = type.get_image_info(i); - std::string directory; + auto _directory = &SET_rompath; if(i == 0 && has_bios) - directory = "firmwarepath"; + _directory = &SET_firmwarepath; else - directory = "rompath"; - directory = inst.setcache->get(directory); + _directory = &SET_rompath; + std::string directory = (*_directory)(*inst.settings); std::string _title = "Select " + iinfo.hname; std::string filespec = "Known ROMs|"; std::string exts = ""; -- 2.11.4.GIT