X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fxml-support.c;h=f5a142754578e18572874406258cb2e2c0d0fcc0;hb=c6cbf900d42cf8f2ebbcf33d799c52c54b9aa9f0;hp=25478825ab9d30c835fccec46fb8e41e86b329f6;hpb=4d0fdd9b357aff1fea3ef3def55d12464a41bf5b;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/xml-support.c b/gdb/xml-support.c index 25478825ab..f5a1427545 100644 --- a/gdb/xml-support.c +++ b/gdb/xml-support.c @@ -1,6 +1,6 @@ /* Helper routines for parsing XML using Expat. - Copyright (C) 2006-2018 Free Software Foundation, Inc. + Copyright (C) 2006-2019 Free Software Foundation, Inc. This file is part of GDB. @@ -19,14 +19,15 @@ #include "defs.h" #include "gdbcmd.h" +#include "xml-builtin.h" #include "xml-support.h" -#include "filestuff.h" +#include "gdbsupport/filestuff.h" #include "safe-ctype.h" #include #include /* Debugging flag. */ -static int debug_xml; +static bool debug_xml; /* The contents of this file are only useful if XML support is available. */ @@ -113,9 +114,9 @@ struct gdb_xml_parser { m_is_xinclude = is_xinclude; } /* A thrown error, if any. */ - void set_error (gdb_exception error) + void set_error (gdb_exception &&error) { - m_error = error; + m_error = std::move (error); #ifdef HAVE_XML_STOPPARSER XML_StopParser (m_expat_parser, XML_FALSE); #endif @@ -179,16 +180,14 @@ void gdb_xml_parser::vdebug (const char *format, va_list ap) { int line = XML_GetCurrentLineNumber (m_expat_parser); - char *message; - message = xstrvprintf (format, ap); + std::string message = string_vprintf (format, ap); if (line) fprintf_unfiltered (gdb_stderr, "%s (line %d): %s\n", - m_name, line, message); + m_name, line, message.c_str ()); else fprintf_unfiltered (gdb_stderr, "%s: %s\n", - m_name, message); - xfree (message); + m_name, message.c_str ()); } void @@ -385,15 +384,14 @@ gdb_xml_start_element_wrapper (void *data, const XML_Char *name, { struct gdb_xml_parser *parser = (struct gdb_xml_parser *) data; - TRY + try { parser->start_element (name, attrs); } - CATCH (ex, RETURN_MASK_ALL) + catch (gdb_exception &ex) { - parser->set_error (ex); + parser->set_error (std::move (ex)); } - END_CATCH } /* Handle the end of an element. NAME is the current element. */ @@ -458,15 +456,14 @@ gdb_xml_end_element_wrapper (void *data, const XML_Char *name) { struct gdb_xml_parser *parser = (struct gdb_xml_parser *) data; - TRY + try { parser->end_element (name); } - CATCH (ex, RETURN_MASK_ALL) + catch (gdb_exception &ex) { - parser->set_error (ex); + parser->set_error (std::move (ex)); } - END_CATCH } /* Free a parser and all its associated state. */ @@ -483,7 +480,6 @@ gdb_xml_parser::gdb_xml_parser (const char *name, void *user_data) : m_name (name), m_user_data (user_data), - m_error (exception_none), m_last_line (0), m_dtd_name (NULL), m_is_xinclude (false) @@ -597,7 +593,7 @@ gdb_xml_parser::parse (const char *buffer) && m_error.error == XML_PARSE_ERROR) { gdb_assert (m_error.message != NULL); - error_string = m_error.message; + error_string = m_error.what (); } else if (status == XML_STATUS_ERROR) { @@ -608,7 +604,7 @@ gdb_xml_parser::parse (const char *buffer) else { gdb_assert (m_error.reason < 0); - throw_exception (m_error); + throw_exception (std::move (m_error)); } if (m_last_line != 0) @@ -793,13 +789,13 @@ xinclude_start_include (struct gdb_xml_parser *parser, gdb_xml_error (parser, _("Maximum XInclude depth (%d) exceeded"), MAX_XINCLUDE_DEPTH); - gdb::unique_xmalloc_ptr text = data->fetcher (href, - data->fetcher_baton); - if (text == NULL) + gdb::optional text + = data->fetcher (href, data->fetcher_baton); + if (!text) gdb_xml_error (parser, _("Could not load XML document \"%s\""), href); if (!xml_process_xincludes (data->output, parser->name (), - text.get (), data->fetcher, + text->data (), data->fetcher, data->fetcher_baton, data->include_depth + 1)) gdb_xml_error (parser, _("Parsing \"%s\" failed"), href); @@ -924,7 +920,7 @@ xml_process_xincludes (std::string &result, const char * fetch_xml_builtin (const char *filename) { - const char *(*p)[2]; + const char *const (*p)[2]; for (p = xml_builtin; (*p)[0]; p++) if (strcmp ((*p)[0], filename) == 0) @@ -971,7 +967,7 @@ show_debug_xml (struct ui_file *file, int from_tty, fprintf_filtered (file, _("XML debugging is %s.\n"), value); } -gdb::unique_xmalloc_ptr +gdb::optional xml_fetch_content_from_file (const char *filename, void *baton) { const char *dirname = (const char *) baton; @@ -981,8 +977,6 @@ xml_fetch_content_from_file (const char *filename, void *baton) { char *fullname = concat (dirname, "/", filename, (char *) NULL); - if (fullname == NULL) - malloc_failure (0); file = gdb_fopen_cloexec (fullname, FOPEN_RT); xfree (fullname); } @@ -990,7 +984,7 @@ xml_fetch_content_from_file (const char *filename, void *baton) file = gdb_fopen_cloexec (filename, FOPEN_RT); if (file == NULL) - return NULL; + return {}; /* Read in the whole file. */ @@ -1001,16 +995,16 @@ xml_fetch_content_from_file (const char *filename, void *baton) len = ftell (file.get ()); rewind (file.get ()); - gdb::unique_xmalloc_ptr text ((char *) xmalloc (len + 1)); + gdb::char_vector text (len + 1); - if (fread (text.get (), 1, len, file.get ()) != len + if (fread (text.data (), 1, len, file.get ()) != len || ferror (file.get ())) { warning (_("Read error from \"%s\""), filename); - return NULL; + return {}; } - text.get ()[len] = '\0'; + text.back () = '\0'; return text; }