Fix "empty path points to root" bug

Unset paths are supposed to point to the current directory, not the
root.
This commit is contained in:
Ilari Liusvaara 2016-01-01 07:57:48 +02:00
parent 019fbc2646
commit 05ad5b9da1
11 changed files with 40 additions and 37 deletions

View file

@ -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;

View file

@ -5,4 +5,10 @@
extern settingvar::set lsnes_setgrp;
extern settingvar::supervariable<settingvar::model_path> SET_rompath;
extern settingvar::supervariable<settingvar::model_path> SET_moviepath;
extern settingvar::supervariable<settingvar::model_path> SET_firmwarepath;
extern settingvar::supervariable<settingvar::model_path> SET_slotpath;
#endif

View file

@ -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);

View file

@ -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()

View file

@ -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 {

View file

@ -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()

View file

@ -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;

View file

@ -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());

View file

@ -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<std::string> 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);

View file

@ -2,13 +2,10 @@
settingvar::set lsnes_setgrp;
namespace
{
settingvar::supervariable<settingvar::model_path> SET_rompath(lsnes_setgrp, "rompath", "Paths‣ROMs", "");
settingvar::supervariable<settingvar::model_path> SET_moviepath(lsnes_setgrp, "moviepath", "Paths‣Movies",
"");
settingvar::supervariable<settingvar::model_path> SET_firmwarepath(lsnes_setgrp, "firmwarepath",
"Paths‣Firmware", "");
settingvar::supervariable<settingvar::model_path> SET_slotpath(lsnes_setgrp, "slotpath", "Paths‣Save slots",
"");
}
settingvar::supervariable<settingvar::model_path> SET_rompath(lsnes_setgrp, "rompath", "Paths‣ROMs", "");
settingvar::supervariable<settingvar::model_path> SET_moviepath(lsnes_setgrp, "moviepath", "Paths‣Movies",
"");
settingvar::supervariable<settingvar::model_path> SET_firmwarepath(lsnes_setgrp, "firmwarepath",
"Paths‣Firmware", "");
settingvar::supervariable<settingvar::model_path> SET_slotpath(lsnes_setgrp, "slotpath", "Paths‣Save slots",
"");

View file

@ -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 = "";