diff options
Diffstat (limited to 'src/devices/machine/ram.cpp')
-rw-r--r-- | src/devices/machine/ram.cpp | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/src/devices/machine/ram.cpp b/src/devices/machine/ram.cpp index 1559de7a2e7..da73376f7fe 100644 --- a/src/devices/machine/ram.cpp +++ b/src/devices/machine/ram.cpp @@ -14,7 +14,10 @@ #include <stdio.h> #include <ctype.h> + #include <algorithm> +#include <functional> +#include <set> namespace { @@ -176,13 +179,25 @@ void ram_device::device_validity_check(validity_checker &valid) const osd_printf_error("Invalid default RAM option: %s\n", m_default_size); // calculate any extra options - std::string bad_option; if (m_extra_options_string) - calculate_extra_options(m_extra_options_string, &bad_option); + { + std::string bad_option; + extra_option_vector const extras(calculate_extra_options(m_extra_options_string, &bad_option)); + + // report any errors + if (!bad_option.empty()) + osd_printf_error("Invalid RAM option: %s\n", bad_option.c_str()); - // report any errors - if (!bad_option.empty()) - osd_printf_error("Invalid RAM option: %s\n", bad_option.c_str()); + // report duplicates + using extra_option_ref_set = std::set<std::reference_wrapper<extra_option const>, bool (*)(extra_option const &, extra_option const &)>; + extra_option_ref_set sorted([] (extra_option const &a, extra_option const &b) { return a.second < b.second; }); + for (extra_option const &opt : extras) + { + auto const ins(sorted.emplace(opt)); + if (!ins.second) + osd_printf_error("Duplicate RAM options: %s == %s (%u)\n", ins.first->get().first.c_str(), opt.first.c_str(), opt.second); + } + } } |