diff options
Diffstat (limited to 'src/emu/network.cpp')
-rw-r--r-- | src/emu/network.cpp | 39 |
1 files changed, 24 insertions, 15 deletions
diff --git a/src/emu/network.cpp b/src/emu/network.cpp index 259cca30efb..5953031133e 100644 --- a/src/emu/network.cpp +++ b/src/emu/network.cpp @@ -2,17 +2,22 @@ // copyright-holders:Carl /*************************************************************************** - network.c + network.cpp Core network functions and definitions. + ***************************************************************************/ -#include <ctype.h> #include "emu.h" #include "network.h" + #include "config.h" +#include "dinetwork.h" + #include "xmlfile.h" +#include <cctype> + //************************************************************************** // NETWORK MANAGER //************************************************************************** @@ -24,7 +29,10 @@ network_manager::network_manager(running_machine &machine) : m_machine(machine) { - machine.configuration().config_register("network", config_load_delegate(&network_manager::config_load, this), config_save_delegate(&network_manager::config_save, this)); + machine.configuration().config_register( + "network", + configuration_manager::load_delegate(&network_manager::config_load, this), + configuration_manager::save_delegate(&network_manager::config_save, this)); } //------------------------------------------------- @@ -32,9 +40,9 @@ network_manager::network_manager(running_machine &machine) // configuration file //------------------------------------------------- -void network_manager::config_load(config_type cfg_type, util::xml::data_node const *parentnode) +void network_manager::config_load(config_type cfg_type, config_level cfg_level, util::xml::data_node const *parentnode) { - if ((cfg_type == config_type::GAME) && (parentnode != nullptr)) + if ((cfg_type == config_type::SYSTEM) && parentnode) { for (util::xml::data_node const *node = parentnode->get_child("device"); node; node = node->get_next_sibling("device")) { @@ -42,14 +50,14 @@ void network_manager::config_load(config_type cfg_type, util::xml::data_node con if ((tag != nullptr) && (tag[0] != '\0')) { - for (device_network_interface &network : network_interface_iterator(machine().root_device())) + for (device_network_interface &network : network_interface_enumerator(machine().root_device())) { if (!strcmp(tag, network.device().tag())) { int interface = node->get_attribute_int("interface", 0); network.set_interface(interface); const char *mac_addr = node->get_attribute_string("mac", nullptr); if (mac_addr != nullptr && strlen(mac_addr) == 17) { - char mac[7]; + uint8_t mac[6]; unsigned int mac_num[6]; sscanf(mac_addr, "%02x:%02x:%02x:%02x:%02x:%02x", &mac_num[0], &mac_num[1], &mac_num[2], &mac_num[3], &mac_num[4], &mac_num[5]); for (int i = 0; i<6; i++) mac[i] = mac_num[i]; @@ -69,20 +77,21 @@ void network_manager::config_load(config_type cfg_type, util::xml::data_node con void network_manager::config_save(config_type cfg_type, util::xml::data_node *parentnode) { - /* only care about game-specific data */ - if (cfg_type == config_type::GAME) + // only save about system-specific data + if (cfg_type == config_type::SYSTEM) { - for (device_network_interface &network : network_interface_iterator(machine().root_device())) + for (device_network_interface &network : network_interface_enumerator(machine().root_device())) { util::xml::data_node *const node = parentnode->add_child("device", nullptr); - if (node != nullptr) + if (node) { node->set_attribute("tag", network.device().tag()); node->set_attribute_int("interface", network.get_interface()); - const char *mac = network.get_mac(); - char mac_addr[6 * 3]; - sprintf(mac_addr, "%02x:%02x:%02x:%02x:%02x:%02x", u8(mac[0]), u8(mac[1]), u8(mac[2]), u8(mac[3]), u8(mac[4]), u8(mac[5])); - node->set_attribute("mac", mac_addr); + const std::array<u8, 6> &mac = network.get_mac(); + const std::string mac_addr = util::string_format( + "%02x:%02x:%02x:%02x:%02x:%02x", + mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); + node->set_attribute("mac", mac_addr.c_str()); } } } |