X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fosdata.c;h=d33026c56fab37bb16ddb20aba2cae03c6cebd3e;hb=32b40af94e919e235c21486110311647cbeecf2e;hp=91c5e42ab5ad9dad1cf0ff65b6f496a3cb6dbd8f;hpb=8443c2073bfc7ba847265cf87d096b17da64508e;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/osdata.c b/gdb/osdata.c index 91c5e42ab5..d33026c56f 100644 --- a/gdb/osdata.c +++ b/gdb/osdata.c @@ -1,6 +1,6 @@ /* Routines for handling XML generic OS data provided by target. - Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc. + Copyright (C) 2008-2015 Free Software Foundation, Inc. This file is part of GDB. @@ -22,7 +22,6 @@ #include "vec.h" #include "xml-support.h" #include "osdata.h" -#include "gdb_string.h" #include "ui-out.h" #include "gdbcmd.h" @@ -45,8 +44,6 @@ osdata_parse (const char *xml) #else /* HAVE_LIBEXPAT */ -#include "xml-support.h" - /* Internal parsing data passed to all XML callbacks. */ struct osdata_parsing_data { @@ -69,7 +66,7 @@ osdata_start_osdata (struct gdb_xml_parser *parser, gdb_xml_error (parser, _("Seen more than on osdata element")); type = xml_find_attribute (attributes, "type")->value; - osdata = XZALLOC (struct osdata); + osdata = XCNEW (struct osdata); osdata->type = xstrdup (type); data->osdata = osdata; } @@ -288,7 +285,7 @@ get_osdata_column (struct osdata_item *item, const char *name) return NULL; } -static void +void info_osdata_command (char *type, int from_tty) { struct ui_out *uiout = current_uiout; @@ -297,6 +294,7 @@ info_osdata_command (char *type, int from_tty) struct cleanup *old_chain; int ncols = 0; int nrows; + int col_to_skip = -1; osdata = get_osdata (type); old_chain = make_cleanup_osdata_free (osdata); @@ -311,6 +309,28 @@ info_osdata_command (char *type, int from_tty) last = VEC_last (osdata_item_s, osdata->items); if (last->columns) ncols = VEC_length (osdata_column_s, last->columns); + + /* As a special case, scan the listing of available data types + for a column named "Title", and only include it with MI + output; this column's normal use is for titles for interface + elements like menus, and it clutters up CLI output. */ + if (!type && !ui_out_is_mi_like_p (uiout)) + { + struct osdata_column *col; + int ix; + + for (ix = 0; + VEC_iterate (osdata_column_s, last->columns, ix, col); + ix++) + { + if (strcmp (col->name, "Title") == 0) + col_to_skip = ix; + } + /* Be sure to reduce the total column count, otherwise + internal errors ensue. */ + if (col_to_skip >= 0) + --ncols; + } } make_cleanup_ui_out_table_begin_end (uiout, ncols, nrows, @@ -335,7 +355,10 @@ info_osdata_command (char *type, int from_tty) ix++) { char col_name[32]; - + + if (ix == col_to_skip) + continue; + snprintf (col_name, 32, "col%d", ix); ui_out_table_header (uiout, 10, ui_left, col_name, col->name); @@ -355,13 +378,10 @@ info_osdata_command (char *type, int from_tty) ix_items++) { struct cleanup *old_chain; - struct ui_stream *stb; int ix_cols; struct osdata_column *col; - stb = ui_out_stream_new (uiout); - old_chain = make_cleanup_ui_out_stream_delete (stb); - make_cleanup_ui_out_tuple_begin_end (uiout, "item"); + old_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "item"); for (ix_cols = 0; VEC_iterate (osdata_column_s, item->columns, @@ -369,7 +389,10 @@ info_osdata_command (char *type, int from_tty) ix_cols++) { char col_name[32]; - + + if (ix_cols == col_to_skip) + continue; + snprintf (col_name, 32, "col%d", ix_cols); ui_out_field_string (uiout, col_name, col->value); }