summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/emu/diimage.cpp8
-rw-r--r--src/emu/softlist.cpp26
-rw-r--r--src/emu/softlist.h6
-rw-r--r--src/emu/softlist_dev.cpp12
-rw-r--r--src/emu/softlist_dev.h2
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;