mirror of
https://github.com/holub/mame
synced 2025-04-16 05:24:54 +03:00
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
This commit is contained in:
parent
a768dd3a26
commit
e7528a445b
@ -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)
|
||||
|
@ -211,7 +211,7 @@ std::error_condition zippath_resolve(std::string_view path, osd::directory::entr
|
||||
auto i = apath.find_last_not_of(PATH_SEPARATOR);
|
||||
if (i == std::string::npos)
|
||||
break;
|
||||
apath = apath.erase(std::min<decltype(i)>(i + 1, 2));
|
||||
apath = apath.erase(std::max<decltype(i)>(i + 1, 2)); // don't erase drive letter
|
||||
|
||||
apath_trimmed = apath;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user