summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2017-07-15 00:04:15 +1000
committer Vas Crabb <vas@vastheman.com>2017-07-15 00:04:15 +1000
commit7aa87af1c8aea45a3b504af6404773634602829b (patch)
tree740dcab27251db5b19097544cc344d49e5865f18
parent7892bf71f943a4deda5883083208acae3ac7b977 (diff)
remove this check - it causes MSVC release builds to crash, and the things it flags usually get detected elsewhere (nw)
-rw-r--r--src/emu/validity.cpp121
1 files changed, 56 insertions, 65 deletions
diff --git a/src/emu/validity.cpp b/src/emu/validity.cpp
index 1bb6060550d..6322ac69738 100644
--- a/src/emu/validity.cpp
+++ b/src/emu/validity.cpp
@@ -16,7 +16,6 @@
#include <ctype.h>
#include <type_traits>
-#include <typeindex>
#include <typeinfo>
@@ -1903,91 +1902,83 @@ void validity_checker::validate_device_types()
m_verbose_text.clear();
std::unordered_map<std::string, std::add_pointer_t<device_type> > device_name_map, device_shortname_map;
- std::unordered_set<std::type_index> device_types;
machine_config config(GAME_NAME(___empty), m_drivlist.options());
for (device_type type : registered_device_types)
{
- if (!device_types.emplace(type.type()).second)
+ device_t *const dev = config.device_add(&config.root_device(), "_tmp", type, 0);
+
+ char const *name((dev->shortname() && *dev->shortname()) ? dev->shortname() : type.type().name());
+ std::string const description((dev->source() && *dev->source()) ? util::string_format("%s(%s)", core_filename_extract_base(dev->source()).c_str(), name) : name);
+
+ // ensure shortname exists
+ if (!dev->shortname() || !*dev->shortname())
{
- osd_printf_error("Device class '%s' registered multiple times\n", type.type().name());
+ osd_printf_error("Device %s does not have short name defined\n", description.c_str());
}
else
{
- device_t *const dev = config.device_add(&config.root_device(), "_tmp", type, 0);
+ // make sure the device name is not too long
+ if (strlen(dev->shortname()) > 32)
+ osd_printf_error("Device short name must be 32 characters or less\n");
- char const *name((dev->shortname() && *dev->shortname()) ? dev->shortname() : type.type().name());
- std::string const description((dev->source() && *dev->source()) ? util::string_format("%s(%s)", core_filename_extract_base(dev->source()).c_str(), name) : name);
-
- // ensure shortname exists
- if (!dev->shortname() || !*dev->shortname())
+ // check for invalid characters in shortname
+ for (char const *s = dev->shortname(); *s; ++s)
{
- osd_printf_error("Device %s does not have short name defined\n", description.c_str());
- }
- else
- {
- // make sure the device name is not too long
- if (strlen(dev->shortname()) > 32)
- osd_printf_error("Device short name must be 32 characters or less\n");
-
- // check for invalid characters in shortname
- for (char const *s = dev->shortname(); *s; ++s)
+ if (((*s < '0') || (*s > '9')) && ((*s < 'a') || (*s > 'z')) && (*s != '_'))
{
- if (((*s < '0') || (*s > '9')) && ((*s < 'a') || (*s > 'z')) && (*s != '_'))
- {
- osd_printf_error("Device %s short name contains invalid characters\n", description.c_str());
- break;
- }
+ osd_printf_error("Device %s short name contains invalid characters\n", description.c_str());
+ break;
}
+ }
- // check for name conflicts
- auto const drvname(m_names_map.find(dev->shortname()));
- auto const devname(device_shortname_map.emplace(dev->shortname(), &type));
- if (m_names_map.end() != drvname)
- {
- game_driver const &dup(*drvname->second);
- osd_printf_error("Device %s short name is a duplicate of %s(%s)\n", description.c_str(), core_filename_extract_base(dup.type.source()).c_str(), dup.name);
- }
- else if (!devname.second)
- {
- device_t *const dup = config.device_add(&config.root_device(), "_dup", *devname.first->second, 0);
- osd_printf_error("Device %s short name is a duplicate of %s(%s)\n", description.c_str(), core_filename_extract_base(dup->source()).c_str(), dup->shortname());
- config.device_remove(&config.root_device(), "_dup");
- }
+ // check for name conflicts
+ auto const drvname(m_names_map.find(dev->shortname()));
+ auto const devname(device_shortname_map.emplace(dev->shortname(), &type));
+ if (m_names_map.end() != drvname)
+ {
+ game_driver const &dup(*drvname->second);
+ osd_printf_error("Device %s short name is a duplicate of %s(%s)\n", description.c_str(), core_filename_extract_base(dup.type.source()).c_str(), dup.name);
}
+ else if (!devname.second)
+ {
+ device_t *const dup = config.device_add(&config.root_device(), "_dup", *devname.first->second, 0);
+ osd_printf_error("Device %s short name is a duplicate of %s(%s)\n", description.c_str(), core_filename_extract_base(dup->source()).c_str(), dup->shortname());
+ config.device_remove(&config.root_device(), "_dup");
+ }
+ }
- // ensure name exists
- if (!dev->name() || !*dev->name())
+ // ensure name exists
+ if (!dev->name() || !*dev->name())
+ {
+ osd_printf_error("Device %s does not have name defined\n", description.c_str());
+ }
+ else
+ {
+ // check for description conflicts
+ auto const drvdesc(m_descriptions_map.find(dev->name()));
+ auto const devdesc(device_name_map.emplace(dev->name(), &type));
+ if (m_names_map.end() != drvdesc)
{
- osd_printf_error("Device %s does not have name defined\n", description.c_str());
+ game_driver const &dup(*drvdesc->second);
+ osd_printf_error("Device %s name '%s' is a duplicate of %s(%s)\n", description.c_str(), dev->name(), core_filename_extract_base(dup.type.source()).c_str(), dup.name);
}
- else
+ else if (!devdesc.second)
{
- // check for description conflicts
- auto const drvdesc(m_descriptions_map.find(dev->name()));
- auto const devdesc(device_name_map.emplace(dev->name(), &type));
- if (m_names_map.end() != drvdesc)
- {
- game_driver const &dup(*drvdesc->second);
- osd_printf_error("Device %s name '%s' is a duplicate of %s(%s)\n", description.c_str(), dev->name(), core_filename_extract_base(dup.type.source()).c_str(), dup.name);
- }
- else if (!devdesc.second)
- {
- device_t *const dup = config.device_add(&config.root_device(), "_dup", *devdesc.first->second, 0);
- osd_printf_error("Device %s name '%s' is a duplicate of %s(%s)\n", description.c_str(), dev->name(), core_filename_extract_base(dup->source()).c_str(), dup->shortname());
- config.device_remove(&config.root_device(), "_dup");
- }
+ device_t *const dup = config.device_add(&config.root_device(), "_dup", *devdesc.first->second, 0);
+ osd_printf_error("Device %s name '%s' is a duplicate of %s(%s)\n", description.c_str(), dev->name(), core_filename_extract_base(dup->source()).c_str(), dup->shortname());
+ config.device_remove(&config.root_device(), "_dup");
}
+ }
- // ensure source exists
- if (!dev->source() || !*dev->source())
- osd_printf_error("Device %s does not have source defined\n", description.c_str());
+ // ensure source exists
+ if (!dev->source() || !*dev->source())
+ osd_printf_error("Device %s does not have source defined\n", description.c_str());
- // check that reported type matches supplied type
- if (dev->type().type() != type.type())
- osd_printf_error("Device %s reports type '%s' (created with '%s')\n", description.c_str(), dev->type().type().name(), type.type().name());
+ // check that reported type matches supplied type
+ if (dev->type().type() != type.type())
+ osd_printf_error("Device %s reports type '%s' (created with '%s')\n", description.c_str(), dev->type().type().name(), type.type().name());
- config.device_remove(&config.root_device(), "_tmp");
- }
+ config.device_remove(&config.root_device(), "_tmp");
}
// if we had warnings or errors, output