From fde41f3faddc576c28363dddfe8971cba3b6a5cc Mon Sep 17 00:00:00 2001 From: Vas Crabb Date: Sun, 8 Sep 2019 22:13:02 +1000 Subject: render.cpp: print a warning and continue on encountering malformed XML in a layout file (nw) --- src/emu/render.cpp | 22 +++++++++++++++++++++- src/lib/util/xmlfile.h | 16 ++++++++++------ 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/src/emu/render.cpp b/src/emu/render.cpp index e896c3748f1..415906b3809 100644 --- a/src/emu/render.cpp +++ b/src/emu/render.cpp @@ -2057,7 +2057,27 @@ bool render_target::load_layout_file(const char *dirname, const char *filename) return false; // read the file - util::xml::file::ptr rootnode(util::xml::file::read(layoutfile, nullptr)); + util::xml::parse_options parseopt; + util::xml::parse_error parseerr; + parseopt.error = &parseerr; + util::xml::file::ptr rootnode(util::xml::file::read(layoutfile, &parseopt)); + if (!rootnode) + { + if (parseerr.error_message) + { + osd_printf_warning( + "Error parsing XML file '%s' at line %d column %d: %s, ignoring\n", + filename, + parseerr.error_line, + parseerr.error_column, + parseerr.error_message); + } + else + { + osd_printf_warning("Error parsing XML file '%s', ignorning\n", filename); + } + return false; + } // if we didn't get a properly-formatted XML file, record a warning and exit if (!load_layout_file(m_manager.machine().root_device(), dirname, *rootnode)) diff --git a/src/lib/util/xmlfile.h b/src/lib/util/xmlfile.h index 5e55dbf310e..8d09b2b7e1e 100644 --- a/src/lib/util/xmlfile.h +++ b/src/lib/util/xmlfile.h @@ -45,18 +45,22 @@ enum /* extended error information from parsing */ struct parse_error { - const char * error_message; - int error_line; - int error_column; + parse_error() = default; + + const char * error_message = nullptr; + int error_line = 0; + int error_column = 0; }; // parsing options struct parse_options { - parse_error * error; - void (*init_parser)(XML_ParserStruct *parser); - uint32_t flags; + parse_options() = default; + + parse_error * error = nullptr; + void (*init_parser)(XML_ParserStruct *parser) = nullptr; + uint32_t flags = 0; }; -- cgit v1.2.3