27#if !defined(HAVE_LIBEXPAT)
29std::unique_ptr<osdata>
32 static int have_warned;
37 warning (_(
"Can not parse XML OS data; XML support was disabled "
47struct osdata_parsing_data
49 std::unique_ptr<struct osdata>
osdata;
50 std::string property_name;
56osdata_start_osdata (
struct gdb_xml_parser *parser,
61 struct osdata_parsing_data *
data = (
struct osdata_parsing_data *) user_data;
63 if (
data->osdata != NULL)
64 gdb_xml_error (parser, _(
"Seen more than on osdata element"));
73osdata_start_item (
struct gdb_xml_parser *parser,
78 struct osdata_parsing_data *
data = (
struct osdata_parsing_data *) user_data;
79 data->osdata->items.emplace_back ();
85osdata_start_column (
struct gdb_xml_parser *parser,
90 struct osdata_parsing_data *
data = (
struct osdata_parsing_data *) user_data;
100osdata_end_column (
struct gdb_xml_parser *parser,
102 void *user_data,
const char *body_text)
104 osdata_parsing_data *
data = (
struct osdata_parsing_data *) user_data;
108 item.
columns.emplace_back (std::move (
data->property_name),
109 std::string (body_text));
121 {
"column", column_attributes, NULL,
123 osdata_start_column, osdata_end_column },
133 {
"item", NULL, item_children,
135 osdata_start_item, NULL },
140 {
"osdata", osdata_attributes, osdata_children,
145std::unique_ptr<osdata>
148 osdata_parsing_data
data;
151 osdata_elements, xml, &data) == 0)
154 return std::move (
data.osdata);
161std::unique_ptr<osdata>
164 std::unique_ptr<osdata>
osdata;
169 if ((*xml)[0] ==
'\0')
172 warning (_(
"Empty data returned by target. Wrong osdata type?"));
174 warning (_(
"Empty type list returned by target. No type data?"));
181 error (_(
"Can not fetch data now."));
190 if (col.name ==
name)
202 int col_to_skip = -1;
211 if (*
type ==
'\0' && nrows == 0)
212 error (_(
"Available types of OS data not reported."));
225 for (
int ix = 0; ix < last->
columns.size (); ix++)
227 if (last->
columns[ix].name ==
"Title")
232 if (col_to_skip >= 0)
244 if (last != NULL && !last->
columns.empty ())
246 for (
int ix = 0; ix < last->
columns.size (); ix++)
250 if (ix == col_to_skip)
253 snprintf (col_name, 32,
"col%d", ix);
255 col_name, last->
columns[ix].name.c_str ());
268 for (
int ix_cols = 0; ix_cols < item.
columns.size (); ix_cols++)
272 if (ix_cols == col_to_skip)
275 snprintf (col_name, 32,
"col%d", ix_cols);
296 _(
"Show OS data ARG."));
static struct @5 attributes[]
void field_string(const char *fldname, const char *string, const ui_file_style &style=ui_file_style())
void text(const char *string)
void table_header(int width, ui_align align, const std::string &col_name, const std::string &col_hdr)
bool is_mi_like_p() const
struct cmd_list_element * add_info(const char *name, cmd_simple_func_ftype *fun, const char *doc)
std::unique_ptr< osdata > get_osdata(const char *type)
void info_osdata(const char *type)
std::unique_ptr< osdata > osdata_parse(const char *xml)
static void info_osdata_command(const char *arg, int from_tty)
const std::string * get_osdata_column(const osdata_item &item, const char *name)
void _initialize_osdata()
gdb::unique_xmalloc_ptr< void > value
std::vector< osdata_column > columns
std::vector< osdata_item > items
gdb::optional< gdb::char_vector > target_get_osdata(const char *type)
void void gdb_xml_error(struct gdb_xml_parser *parser, const char *format,...) ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF(2
void void struct gdb_xml_value * xml_find_attribute(std::vector< gdb_xml_value > &attributes, const char *name)
int gdb_xml_parse_quick(const char *name, const char *dtd_name, const struct gdb_xml_element *elements, const char *document, void *user_data)