Index: gdb/osdata.c |
diff --git a/gdb/osdata.c b/gdb/osdata.c |
index 62ce412ca6853b6f216509c0e29477558bfb33d5..8776022843b74328bf435225150df1aad3140c86 100644 |
--- a/gdb/osdata.c |
+++ b/gdb/osdata.c |
@@ -288,7 +288,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 +297,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 +312,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 +358,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 +381,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 +392,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); |
} |