aboutsummaryrefslogtreecommitdiff
path: root/gdb/xml-support.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/xml-support.c')
-rw-r--r--gdb/xml-support.c42
1 files changed, 10 insertions, 32 deletions
diff --git a/gdb/xml-support.c b/gdb/xml-support.c
index dacc5c4..2547882 100644
--- a/gdb/xml-support.c
+++ b/gdb/xml-support.c
@@ -228,32 +228,16 @@ gdb_xml_error (struct gdb_xml_parser *parser, const char *format, ...)
ATTRIBUTES. Returns NULL if not found. */
struct gdb_xml_value *
-xml_find_attribute (VEC(gdb_xml_value_s) *attributes, const char *name)
+xml_find_attribute (std::vector<gdb_xml_value> &attributes,
+ const char *name)
{
- struct gdb_xml_value *value;
- int ix;
-
- for (ix = 0; VEC_iterate (gdb_xml_value_s, attributes, ix, value); ix++)
- if (strcmp (value->name, name) == 0)
- return value;
+ for (gdb_xml_value &value : attributes)
+ if (strcmp (value.name, name) == 0)
+ return &value;
return NULL;
}
-/* Clean up a vector of parsed attribute values. */
-
-static void
-gdb_xml_values_cleanup (void *data)
-{
- VEC(gdb_xml_value_s) **values = (VEC(gdb_xml_value_s) **) data;
- struct gdb_xml_value *value;
- int ix;
-
- for (ix = 0; VEC_iterate (gdb_xml_value_s, *values, ix, value); ix++)
- xfree (value->value);
- VEC_free (gdb_xml_value_s, *values);
-}
-
/* Handle the start of an element. NAME is the element, and ATTRS are
the names and values of this element's attributes. */
@@ -266,9 +250,7 @@ gdb_xml_parser::start_element (const XML_Char *name,
const struct gdb_xml_element *element;
const struct gdb_xml_attribute *attribute;
- VEC(gdb_xml_value_s) *attributes = NULL;
unsigned int seen;
- struct cleanup *back_to;
/* Push an error scope. If we return or throw an exception before
filling this in, it will tell us to ignore children of this
@@ -317,7 +299,7 @@ gdb_xml_parser::start_element (const XML_Char *name,
scope.seen |= seen;
- back_to = make_cleanup (gdb_xml_values_cleanup, &attributes);
+ std::vector<gdb_xml_value> attributes;
for (attribute = element->attributes;
attribute != NULL && attribute->name != NULL;
@@ -326,7 +308,6 @@ gdb_xml_parser::start_element (const XML_Char *name,
const char *val = NULL;
const XML_Char **p;
void *parsed_value;
- struct gdb_xml_value new_value;
for (p = attrs; *p != NULL; p += 2)
if (!strcmp (attribute->name, p[0]))
@@ -361,9 +342,7 @@ gdb_xml_parser::start_element (const XML_Char *name,
else
parsed_value = xstrdup (val);
- new_value.name = attribute->name;
- new_value.value = parsed_value;
- VEC_safe_push (gdb_xml_value_s, attributes, &new_value);
+ attributes.emplace_back (attribute->name, parsed_value);
}
/* Check for unrecognized attributes. */
@@ -395,8 +374,6 @@ gdb_xml_parser::start_element (const XML_Char *name,
scope_level &new_scope = m_scopes.back ();
new_scope.element = element;
new_scope.elements = element->children;
-
- do_cleanups (back_to);
}
/* Wrapper for gdb_xml_start_element, to prevent throwing exceptions
@@ -803,11 +780,12 @@ struct xinclude_parsing_data
static void
xinclude_start_include (struct gdb_xml_parser *parser,
const struct gdb_xml_element *element,
- void *user_data, VEC(gdb_xml_value_s) *attributes)
+ void *user_data,
+ std::vector<gdb_xml_value> &attributes)
{
struct xinclude_parsing_data *data
= (struct xinclude_parsing_data *) user_data;
- char *href = (char *) xml_find_attribute (attributes, "href")->value;
+ char *href = (char *) xml_find_attribute (attributes, "href")->value.get ();
gdb_xml_debug (parser, _("Processing XInclude of \"%s\""), href);