/* Routines for handling XML generic OS data provided by target.
- Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
+ Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
This file is part of GDB.
if (data->osdata)
gdb_xml_error (parser, _("Seen more than on osdata element"));
- type = VEC_index (gdb_xml_value_s, attributes, 0)->value;
+ type = xml_find_attribute (attributes, "type")->value;
osdata = XZALLOC (struct osdata);
osdata->type = xstrdup (type);
data->osdata = osdata;
void *user_data, VEC(gdb_xml_value_s) *attributes)
{
struct osdata_parsing_data *data = user_data;
- const char *name = VEC_index (gdb_xml_value_s, attributes, 0)->value;
+ const char *name = xml_find_attribute (attributes, "name")->value;
data->property_name = xstrdup (name);
}
struct osdata *
osdata_parse (const char *xml)
{
- struct gdb_xml_parser *parser;
- struct cleanup *before_deleting_result, *back_to;
+ struct cleanup *back_to;
struct osdata_parsing_data data = { NULL };
- back_to = make_cleanup (null_cleanup, NULL);
- parser = gdb_xml_create_parser_and_cleanup (_("osdata"),
- osdata_elements, &data);
- gdb_xml_use_dtd (parser, "osdata.dtd");
+ back_to = make_cleanup (clear_parsing_data, &data);
- before_deleting_result = make_cleanup (clear_parsing_data, &data);
-
- if (gdb_xml_parse (parser, xml) == 0)
- /* Parsed successfully, don't need to delete the result. */
- discard_cleanups (before_deleting_result);
+ if (gdb_xml_parse_quick (_("osdata"), "osdata.dtd",
+ osdata_elements, xml, &data) == 0)
+ {
+ /* Parsed successfully, don't need to delete the result. */
+ discard_cleanups (back_to);
+ return data.osdata;
+ }
do_cleanups (back_to);
- return data.osdata;
+ return NULL;
}
#endif
struct cleanup *old_chain = make_cleanup (xfree, xml);
if (xml[0] == '\0')
- warning (_("Empty data returned by target. Wrong osdata type?"));
+ {
+ if (type)
+ warning (_("Empty data returned by target. Wrong osdata type?"));
+ else
+ warning (_("Empty type list returned by target. No type data?"));
+ }
else
osdata = osdata_parse (xml);
}
if (!osdata)
- error (_("Can not fetch data now.\n"));
+ error (_("Can not fetch data now."));
return osdata;
}
int ncols;
int nprocs;
- if (type == 0)
- /* TODO: No type could mean "list availables types". */
- error (_("Argument required."));
-
osdata = get_osdata (type);
old_chain = make_cleanup_osdata_free (osdata);
nprocs = VEC_length (osdata_item_s, osdata->items);
+ if (!type && nprocs == 0)
+ error (_("Available types of OS data not reported."));
+
last = VEC_last (osdata_item_s, osdata->items);
if (last && last->columns)
ncols = VEC_length (osdata_column_s, last->columns);