summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/diimage.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/diimage.cpp')
-rw-r--r--src/emu/diimage.cpp26
1 files changed, 22 insertions, 4 deletions
diff --git a/src/emu/diimage.cpp b/src/emu/diimage.cpp
index 72dd9b01d6a..50072d95995 100644
--- a/src/emu/diimage.cpp
+++ b/src/emu/diimage.cpp
@@ -377,11 +377,29 @@ bool device_image_interface::try_change_working_directory(const std::string &sub
void device_image_interface::setup_working_directory()
{
- // first set up the working directory to be the starting directory
- osd_get_full_path(m_working_directory, ".");
+ bool success = false;
+ // get user-specified directory and make sure it exists
+ m_working_directory = device().mconfig().options().sw_path();
+ // if multipath, get first
+ size_t i = m_working_directory.find_first_of(";");
+ if (i != std::string::npos)
+ m_working_directory.resize(i);
+ // validate directory
+ if (!m_working_directory.empty())
+ if (osd::directory::open(m_working_directory))
+ success = true;
+
+ // if not exist, use previous method
+ if (!success)
+ {
+ // first set up the working directory to be the starting directory
+ osd_get_full_path(m_working_directory, ".");
+ // now try browsing down to "software"
+ if (try_change_working_directory("software"))
+ success = true;
+ }
- // now try browsing down to "software"
- if (try_change_working_directory("software"))
+ if (success)
{
// now down to a directory for this computer
int gamedrv = driver_list::find(device().machine().system());