* breakpoint.c (wrap_indent_at_field): New function.

(print_breakpoint_location): Use it instead of WRAP_INDENT argument.
	Allocate ui_stream locally instead of using STB argument.
	(print_one_breakpoint_location): Update call.
	* ui-out.c (ui_out_query_field): New function.
	* ui-out.h (ui_out_query_field): Add prototype.
This commit is contained in:
Ulrich Weigand 2011-02-28 15:21:21 +00:00
parent 81896e36e8
commit 170b53b2b6
4 changed files with 75 additions and 20 deletions

View File

@ -1,3 +1,12 @@
2011-02-28 Ulrich Weigand <uweigand@de.ibm.com>
* breakpoint.c (wrap_indent_at_field): New function.
(print_breakpoint_location): Use it instead of WRAP_INDENT argument.
Allocate ui_stream locally instead of using STB argument.
(print_one_breakpoint_location): Update call.
* ui-out.c (ui_out_query_field): New function.
* ui-out.h (ui_out_query_field): Add prototype.
2011-02-28 Joel Brobecker <brobecker@adacore.com>
From Michael Snyder <msnyder@vmware.com>

View File

@ -4565,12 +4565,40 @@ bpstat_causes_stop (bpstat bs)
/* Compute a string of spaces suitable to indent the next line
so it starts at the position corresponding to the table column
named COL_NAME in the currently active table of UIOUT. */
static char *
wrap_indent_at_field (struct ui_out *uiout, const char *col_name)
{
static char wrap_indent[80];
int i, total_width, width, align;
char *text;
total_width = 0;
for (i = 1; ui_out_query_field (uiout, i, &width, &align, &text); i++)
{
if (strcmp (text, col_name) == 0)
{
gdb_assert (total_width < sizeof wrap_indent);
memset (wrap_indent, ' ', total_width);
wrap_indent[total_width] = 0;
return wrap_indent;
}
total_width += width + 1;
}
return NULL;
}
/* Print the LOC location out of the list of B->LOC locations. */
static void print_breakpoint_location (struct breakpoint *b,
struct bp_location *loc,
char *wrap_indent,
struct ui_stream *stb)
static void
print_breakpoint_location (struct breakpoint *b,
struct bp_location *loc)
{
struct cleanup *old_chain = save_current_program_space ();
@ -4589,8 +4617,9 @@ static void print_breakpoint_location (struct breakpoint *b,
ui_out_text (uiout, "in ");
ui_out_field_string (uiout, "func",
SYMBOL_PRINT_NAME (sym));
ui_out_wrap_hint (uiout, wrap_indent);
ui_out_text (uiout, " at ");
ui_out_text (uiout, " ");
ui_out_wrap_hint (uiout, wrap_indent_at_field (uiout, "what"));
ui_out_text (uiout, "at ");
}
ui_out_field_string (uiout, "file", b->source_file);
ui_out_text (uiout, ":");
@ -4608,9 +4637,14 @@ static void print_breakpoint_location (struct breakpoint *b,
}
else if (loc)
{
struct ui_stream *stb = ui_out_stream_new (uiout);
struct cleanup *stb_chain = make_cleanup_ui_out_stream_delete (stb);
print_address_symbolic (loc->gdbarch, loc->address, stb->stream,
demangle, "");
ui_out_field_stream (uiout, "at", stb);
do_cleanups (stb_chain);
}
else
ui_out_field_string (uiout, "pending", b->addr_string);
@ -4679,9 +4713,6 @@ print_one_breakpoint_location (struct breakpoint *b,
{
struct command_line *l;
static char bpenables[] = "nynny";
char wrap_indent[80];
struct ui_stream *stb = ui_out_stream_new (uiout);
struct cleanup *old_chain = make_cleanup_ui_out_stream_delete (stb);
struct cleanup *bkpt_chain;
int header_of_multiple = 0;
@ -4743,15 +4774,6 @@ print_one_breakpoint_location (struct breakpoint *b,
/* 5 and 6 */
strcpy (wrap_indent, " ");
if (opts.addressprint)
{
if (print_address_bits <= 32)
strcat (wrap_indent, " ");
else
strcat (wrap_indent, " ");
}
if (b->ops != NULL && b->ops->print_one != NULL)
{
/* Although the print_one can possibly print all locations,
@ -4816,7 +4838,7 @@ print_one_breakpoint_location (struct breakpoint *b,
}
annotate_field (5);
if (!header_of_multiple)
print_breakpoint_location (b, loc, wrap_indent, stb);
print_breakpoint_location (b, loc);
if (b->loc)
*last_loc = b->loc;
break;
@ -4972,7 +4994,6 @@ print_one_breakpoint_location (struct breakpoint *b,
}
do_cleanups (bkpt_chain);
do_cleanups (old_chain);
}
static void

View File

@ -1141,6 +1141,28 @@ ui_out_data (struct ui_out *uiout)
return uiout->data;
}
/* Access table field parameters. */
int
ui_out_query_field (struct ui_out *uiout, int colno,
int *width, int *alignment, char **col_name)
{
struct ui_out_hdr *hdr;
if (!uiout->table.flag)
return 0;
for (hdr = uiout->table.header_first; hdr; hdr = hdr->next)
if (hdr->colno == colno)
{
*width = hdr->width;
*alignment = hdr->alignment;
*col_name = hdr->col_name;
return 1;
}
return 0;
}
/* Initalize private members at startup. */
struct ui_out *

View File

@ -156,6 +156,9 @@ extern int ui_out_get_verblvl (struct ui_out *uiout);
extern int ui_out_test_flags (struct ui_out *uiout, int mask);
extern int ui_out_query_field (struct ui_out *uiout, int colno,
int *width, int *alignment, char **col_name);
#if 0
extern void ui_out_result_begin (struct ui_out *uiout, char *class);