diff options
author | AJR <ajrhacker@users.noreply.github.com> | 2021-09-08 14:05:51 -0400 |
---|---|---|
committer | AJR <ajrhacker@users.noreply.github.com> | 2021-09-08 14:05:51 -0400 |
commit | e7528a445bb0c0d8594f79c5aceabd26077001a5 (patch) | |
tree | f8b3279ee1b5e3800726eeb116b384033def45d2 /src/frontend/mame | |
parent | a768dd3a26a5f3838d522a2cd9449fa70e68464c (diff) |
Filesystem-related bug fixes
- Fix recently-introduced path-trashing bug in zippath_resolve
- Prevent UI file select menu from crashing in error cases where no files can be found
Diffstat (limited to 'src/frontend/mame')
-rw-r--r-- | src/frontend/mame/ui/filesel.cpp | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/src/frontend/mame/ui/filesel.cpp b/src/frontend/mame/ui/filesel.cpp index bc5c5abbd12..41ecac49c16 100644 --- a/src/frontend/mame/ui/filesel.cpp +++ b/src/frontend/mame/ui/filesel.cpp @@ -393,7 +393,6 @@ void menu_file_selector::populate(float &customtop, float &custombottom) { const file_selector_entry *selected_entry = nullptr; - // clear out the menu entries m_entrylist.clear(); @@ -406,7 +405,7 @@ void menu_file_selector::populate(float &customtop, float &custombottom) append_entry(SELECTOR_ENTRY_TYPE_EMPTY, "", ""); // add the "[create]" entry - if (m_has_create && !directory->is_archive()) + if (m_has_create && directory && !directory->is_archive()) append_entry(SELECTOR_ENTRY_TYPE_CREATE, "", ""); // add and select the "[software list]" entry if available @@ -447,17 +446,20 @@ void menu_file_selector::populate(float &customtop, float &custombottom) } directory.reset(); - // sort the menu entries - const std::collate<wchar_t> &coll = std::use_facet<std::collate<wchar_t>>(std::locale()); - std::sort( - m_entrylist.begin() + first, - m_entrylist.end(), - [&coll] (file_selector_entry const &x, file_selector_entry const &y) - { - std::wstring const xstr = wstring_from_utf8(x.basename); - std::wstring const ystr = wstring_from_utf8(y.basename); - return coll.compare(xstr.data(), xstr.data()+xstr.size(), ystr.data(), ystr.data()+ystr.size()) < 0; - }); + if (m_entrylist.size() > first) + { + // sort the menu entries + const std::collate<wchar_t> &coll = std::use_facet<std::collate<wchar_t>>(std::locale()); + std::sort( + m_entrylist.begin() + first, + m_entrylist.end(), + [&coll] (file_selector_entry const &x, file_selector_entry const &y) + { + std::wstring const xstr = wstring_from_utf8(x.basename); + std::wstring const ystr = wstring_from_utf8(y.basename); + return coll.compare(xstr.data(), xstr.data()+xstr.size(), ystr.data(), ystr.data()+ystr.size()) < 0; + }); + } // append all of the menu entries for (file_selector_entry const &entry : m_entrylist) |