diff options
-rw-r--r-- | src/emu/diimage.cpp | 8 | ||||
-rw-r--r-- | src/emu/softlist.cpp | 26 | ||||
-rw-r--r-- | src/emu/softlist.h | 6 | ||||
-rw-r--r-- | src/emu/softlist_dev.cpp | 12 | ||||
-rw-r--r-- | src/emu/softlist_dev.h | 2 |
5 files changed, 23 insertions, 31 deletions
diff --git a/src/emu/diimage.cpp b/src/emu/diimage.cpp index 935d1df52b9..97c9559e9a9 100644 --- a/src/emu/diimage.cpp +++ b/src/emu/diimage.cpp @@ -1321,10 +1321,10 @@ const software_part *device_image_interface::find_software_item(const std::strin { if (swlist_name.compare(swlistdev.list_name())==0 || !(swlist_name.length() > 0)) { - const software_info *info = swlistdev.find(swinfo_name.c_str()); + const software_info *info = swlistdev.find(swinfo_name); if (info != nullptr) { - const software_part *part = info->find_part(swpart_name.c_str(), interface); + const software_part *part = info->find_part(swpart_name, interface); if (part != nullptr) { if (dev != nullptr) @@ -1340,10 +1340,10 @@ const software_part *device_image_interface::find_software_item(const std::strin // gameboy:sml) which is not handled properly by software_name_split // since the function cannot distinguish between this and the case // path = swinfo_name:swpart_name - const software_info *info = swlistdev.find(swpart_name.c_str()); + const software_info *info = swlistdev.find(swpart_name); if (info != nullptr) { - const software_part *part = info->find_part(nullptr, interface); + const software_part *part = info->find_part("", interface); if (part != nullptr) { if (dev != nullptr) diff --git a/src/emu/softlist.cpp b/src/emu/softlist.cpp index 67178a1b4bb..8f6b12fe914 100644 --- a/src/emu/softlist.cpp +++ b/src/emu/softlist.cpp @@ -101,20 +101,16 @@ bool software_part::matches_interface(const char *interface_list) const // software_info - constructor //------------------------------------------------- -software_info::software_info(std::string &&name, std::string &&parent, const char *supported) - : m_next(nullptr), - m_supported(SOFTWARE_SUPPORTED_YES), +software_info::software_info(std::string &&name, std::string &&parent, const std::string &supported) + : m_supported(SOFTWARE_SUPPORTED_YES), m_shortname(std::move(name)), m_parentname(std::move(parent)) { // handle the supported flag if provided - if (supported != nullptr) - { - if (strcmp(supported, "partial") == 0) - m_supported = SOFTWARE_SUPPORTED_PARTIAL; - else if (strcmp(supported, "no") == 0) - m_supported = SOFTWARE_SUPPORTED_NO; - } + if (supported == "partial") + m_supported = SOFTWARE_SUPPORTED_PARTIAL; + else if (supported == "no") + m_supported = SOFTWARE_SUPPORTED_NO; } @@ -123,22 +119,20 @@ software_info::software_info(std::string &&name, std::string &&parent, const cha // optional interface match //------------------------------------------------- -const software_part *software_info::find_part(const char *partname, const char *interface) const +const software_part *software_info::find_part(const std::string &partname, const char *interface) const { // if neither partname nor interface supplied, then we just return the first entry - if (partname != nullptr && strlen(partname)==0) partname = nullptr; - - if (partname == nullptr && interface == nullptr) + if (partname.empty() && interface == nullptr) return &m_partdata.front(); // look for the part by name and match against the interface if provided for (const software_part &part : m_partdata) - if (partname != nullptr && (partname == part.name())) + if (!partname.empty() && (partname == part.name())) { if (interface == nullptr || part.matches_interface(interface)) return ∂ } - else if (partname == nullptr && part.matches_interface(interface)) + else if (partname.empty() && part.matches_interface(interface)) return ∂ return nullptr; } diff --git a/src/emu/softlist.h b/src/emu/softlist.h index 19ebc73e973..cd50824b50f 100644 --- a/src/emu/softlist.h +++ b/src/emu/softlist.h @@ -106,14 +106,13 @@ class software_info public: // construction/destruction - software_info(std::string &&name, std::string &&parent, const char *supported); + software_info(std::string &&name, std::string &&parent, const std::string &supported); software_info(software_info const &) = delete; software_info(software_info &&) = delete; software_info& operator=(software_info const &) = delete; software_info& operator=(software_info &&) = delete; // getters - software_info *next() const { return m_next; } const std::string &shortname() const { return m_shortname; } const std::string &longname() const { return m_longname; } const std::string &parentname() const { return m_parentname; } @@ -125,12 +124,11 @@ public: const std::list<software_part> &parts() const { return m_partdata; } // additional operations - const software_part *find_part(const char *partname, const char *interface = nullptr) const; + const software_part *find_part(const std::string &partname, const char *interface = nullptr) const; bool has_multiple_parts(const char *interface) const; private: // internal state - software_info * m_next; UINT32 m_supported; std::string m_shortname; std::string m_longname; diff --git a/src/emu/softlist_dev.cpp b/src/emu/softlist_dev.cpp index a7ad66fb3a2..013f90c779c 100644 --- a/src/emu/softlist_dev.cpp +++ b/src/emu/softlist_dev.cpp @@ -252,13 +252,13 @@ void software_list_device::display_matches(const machine_config &config, const c // from an intermediate point //------------------------------------------------- -const software_info *software_list_device::find(const char *look_for) +const software_info *software_list_device::find(const std::string &look_for) { - // nullptr search returns nothing - if (look_for == nullptr) + // empty search returns nothing + if (look_for.empty()) return nullptr; - bool iswild = strchr(look_for, '*') != nullptr || strchr(look_for, '?'); + const bool iswild = look_for.find_first_of("*?") != std::string::npos; // find a match (will cause a parse if needed when calling get_info) const auto &info_list = get_info(); @@ -268,8 +268,8 @@ const software_info *software_list_device::find(const char *look_for) [&](const software_info &info) { const char *shortname = info.shortname().c_str(); - return (iswild && core_strwildcmp(look_for, shortname) == 0) - || core_stricmp(look_for, shortname) == 0; + return (iswild && core_strwildcmp(look_for.c_str(), shortname) == 0) + || core_stricmp(look_for.c_str(), shortname) == 0; }); return iter != info_list.end() diff --git a/src/emu/softlist_dev.h b/src/emu/softlist_dev.h index dd3b92940ae..bc72960105d 100644 --- a/src/emu/softlist_dev.h +++ b/src/emu/softlist_dev.h @@ -151,7 +151,7 @@ public: const std::list<software_info> &get_info() { if (!m_parsed) parse(); return m_infolist; } // operations - const software_info *find(const char *look_for); + const software_info *find(const std::string &look_for); void find_approx_matches(const std::string &name, int matches, const software_info **list, const char *interface); void release(); software_compatibility is_compatible(const software_part &part) const; |