Use std::string for ui_out_hdr's text fields
This patch makes ui_out_hdr use std::string for its text fields. It makes freeing automatic when the object is deleted. gdb/ChangeLog: * mi/mi-out.c (mi_table_header): Change char * args to std::string. * cli-out.c (cli_table_header): Likewise. * ui-out.h (table_header_ftype): Likewise. (ui_out_table_header): Constify colhdr argument. (ui_out_query_field): Constify col_name argument. * ui-out.c (ui_out_hdr) <col_name, colhdr>: Change type to std::string. (uo_table_header): Change char * args to std::string. (ui_out_table_header): Likewise. (get_next_header): Constify colhdr argument and adapt. (clear_header_list): Don't free col_name/colhdr fields. (append_header_to_list): Change char * args to std::string and adapt. (verify_field): Constify variable. (ui_out_query_field): Constify col_name argument and adapt. * breakpoint.c (wrap_indent_at_field): Constify variable.
This commit is contained in:
parent
78afa7f859
commit
c520961526
@ -1,3 +1,23 @@
|
||||
2016-12-01 Simon Marchi <simon.marchi@polymtl.ca>
|
||||
|
||||
* mi/mi-out.c (mi_table_header): Change char * args to
|
||||
std::string.
|
||||
* cli-out.c (cli_table_header): Likewise.
|
||||
* ui-out.h (table_header_ftype): Likewise.
|
||||
(ui_out_table_header): Constify colhdr argument.
|
||||
(ui_out_query_field): Constify col_name argument.
|
||||
* ui-out.c (ui_out_hdr) <col_name, colhdr>: Change type to
|
||||
std::string.
|
||||
(uo_table_header): Change char * args to std::string.
|
||||
(ui_out_table_header): Likewise.
|
||||
(get_next_header): Constify colhdr argument and adapt.
|
||||
(clear_header_list): Don't free col_name/colhdr fields.
|
||||
(append_header_to_list): Change char * args to std::string and
|
||||
adapt.
|
||||
(verify_field): Constify variable.
|
||||
(ui_out_query_field): Constify col_name argument and adapt.
|
||||
* breakpoint.c (wrap_indent_at_field): Constify variable.
|
||||
|
||||
2016-12-01 Simon Marchi <simon.marchi@polymtl.ca>
|
||||
|
||||
* ui-out.c (struct ui_out_hdr) <next>: Remove.
|
||||
|
@ -6062,7 +6062,7 @@ 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;
|
||||
const char *text;
|
||||
|
||||
total_width = 0;
|
||||
for (i = 1; ui_out_query_field (uiout, i, &width, &align, &text); i++)
|
||||
|
@ -94,8 +94,7 @@ cli_table_end (struct ui_out *uiout)
|
||||
|
||||
static void
|
||||
cli_table_header (struct ui_out *uiout, int width, enum ui_align alignment,
|
||||
const char *col_name,
|
||||
const char *colhdr)
|
||||
const std::string &col_name, const std::string &col_hdr)
|
||||
{
|
||||
cli_out_data *data = (cli_out_data *) ui_out_data (uiout);
|
||||
|
||||
@ -104,7 +103,7 @@ cli_table_header (struct ui_out *uiout, int width, enum ui_align alignment,
|
||||
|
||||
/* Always go through the function pointer (virtual function call).
|
||||
We may have been extended. */
|
||||
uo_field_string (uiout, 0, width, alignment, 0, colhdr);
|
||||
uo_field_string (uiout, 0, width, alignment, 0, col_hdr.c_str ());
|
||||
}
|
||||
|
||||
/* Mark beginning of a list */
|
||||
|
@ -41,8 +41,9 @@ static void mi_table_begin (struct ui_out *uiout, int nbrofcols,
|
||||
static void mi_table_body (struct ui_out *uiout);
|
||||
static void mi_table_end (struct ui_out *uiout);
|
||||
static void mi_table_header (struct ui_out *uiout, int width,
|
||||
enum ui_align alig, const char *col_name,
|
||||
const char *colhdr);
|
||||
enum ui_align alignment,
|
||||
const std::string &col_name,
|
||||
const std::string &col_hdr);
|
||||
static void mi_begin (struct ui_out *uiout, enum ui_out_type type,
|
||||
int level, const char *id);
|
||||
static void mi_end (struct ui_out *uiout, enum ui_out_type type, int level);
|
||||
@ -140,7 +141,7 @@ mi_table_end (struct ui_out *uiout)
|
||||
|
||||
void
|
||||
mi_table_header (struct ui_out *uiout, int width, enum ui_align alignment,
|
||||
const char *col_name, const char *colhdr)
|
||||
const std::string &col_name, const std::string &col_hdr)
|
||||
{
|
||||
mi_out_data *data = (mi_out_data *) ui_out_data (uiout);
|
||||
|
||||
@ -150,8 +151,8 @@ mi_table_header (struct ui_out *uiout, int width, enum ui_align alignment,
|
||||
mi_open (uiout, NULL, ui_out_type_tuple);
|
||||
mi_field_int (uiout, 0, 0, ui_center, "width", width);
|
||||
mi_field_int (uiout, 0, 0, ui_center, "alignment", alignment);
|
||||
mi_field_string (uiout, 0, 0, ui_center, "col_name", col_name);
|
||||
mi_field_string (uiout, 0, width, alignment, "colhdr", colhdr);
|
||||
mi_field_string (uiout, 0, 0, ui_center, "col_name", col_name.c_str ());
|
||||
mi_field_string (uiout, 0, width, alignment, "colhdr", col_hdr.c_str ());
|
||||
mi_close (uiout, ui_out_type_tuple);
|
||||
}
|
||||
|
||||
|
64
gdb/ui-out.c
64
gdb/ui-out.c
@ -36,8 +36,8 @@ struct ui_out_hdr
|
||||
int colno;
|
||||
int width;
|
||||
enum ui_align alignment;
|
||||
char *col_name;
|
||||
char *colhdr;
|
||||
std::string col_name;
|
||||
std::string col_hdr;
|
||||
};
|
||||
|
||||
struct ui_out_level
|
||||
@ -148,8 +148,9 @@ static void uo_table_begin (struct ui_out *uiout, int nbrofcols,
|
||||
static void uo_table_body (struct ui_out *uiout);
|
||||
static void uo_table_end (struct ui_out *uiout);
|
||||
static void uo_table_header (struct ui_out *uiout, int width,
|
||||
enum ui_align align, const char *col_name,
|
||||
const char *colhdr);
|
||||
enum ui_align align,
|
||||
const std::string &col_name,
|
||||
const std::string &col_hdr);
|
||||
static void uo_begin (struct ui_out *uiout,
|
||||
enum ui_out_type type,
|
||||
int level, const char *id);
|
||||
@ -176,10 +177,11 @@ static int uo_redirect (struct ui_out *uiout, struct ui_file *outstream);
|
||||
/* Prototypes for local functions */
|
||||
|
||||
static void append_header_to_list (struct ui_out *uiout, int width,
|
||||
enum ui_align alignment, const char *col_name,
|
||||
const char *colhdr);
|
||||
enum ui_align alignment,
|
||||
const std::string &col_name,
|
||||
const std::string &col_hdr);
|
||||
static int get_next_header (struct ui_out *uiout, int *colno, int *width,
|
||||
enum ui_align *alignment, char **colhdr);
|
||||
enum ui_align *alignment, const char **col_hdr);
|
||||
static void clear_header_list (struct ui_out *uiout);
|
||||
static void clear_table (struct ui_out *uiout);
|
||||
static void verify_field (struct ui_out *uiout, int *fldno, int *width,
|
||||
@ -247,17 +249,16 @@ ui_out_table_end (struct ui_out *uiout)
|
||||
|
||||
void
|
||||
ui_out_table_header (struct ui_out *uiout, int width, enum ui_align alignment,
|
||||
const char *col_name,
|
||||
const char *colhdr)
|
||||
const std::string &col_name, const std::string &col_hdr)
|
||||
{
|
||||
if (!uiout->table.flag || uiout->table.body_flag)
|
||||
internal_error (__FILE__, __LINE__,
|
||||
_("table header must be specified after table_begin \
|
||||
and before table_body."));
|
||||
|
||||
append_header_to_list (uiout, width, alignment, col_name, colhdr);
|
||||
append_header_to_list (uiout, width, alignment, col_name, col_hdr);
|
||||
|
||||
uo_table_header (uiout, width, alignment, col_name, colhdr);
|
||||
uo_table_header (uiout, width, alignment, col_name, col_hdr);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -557,12 +558,11 @@ uo_table_end (struct ui_out *uiout)
|
||||
|
||||
void
|
||||
uo_table_header (struct ui_out *uiout, int width, enum ui_align align,
|
||||
const char *col_name,
|
||||
const char *colhdr)
|
||||
const std::string &col_name, const std::string &col_hdr)
|
||||
{
|
||||
if (!uiout->impl->table_header)
|
||||
return;
|
||||
uiout->impl->table_header (uiout, width, align, col_name, colhdr);
|
||||
uiout->impl->table_header (uiout, width, align, col_name, col_hdr);
|
||||
}
|
||||
|
||||
/* Clear the table associated with UIOUT. */
|
||||
@ -694,12 +694,6 @@ uo_redirect (struct ui_out *uiout, struct ui_file *outstream)
|
||||
static void
|
||||
clear_header_list (struct ui_out *uiout)
|
||||
{
|
||||
for (auto &it : uiout->table.headers)
|
||||
{
|
||||
xfree (it->colhdr);
|
||||
xfree (it->col_name);
|
||||
}
|
||||
|
||||
uiout->table.headers.clear ();
|
||||
uiout->table.headers_iterator = uiout->table.headers.end ();
|
||||
}
|
||||
@ -708,26 +702,18 @@ static void
|
||||
append_header_to_list (struct ui_out *uiout,
|
||||
int width,
|
||||
enum ui_align alignment,
|
||||
const char *col_name,
|
||||
const char *colhdr)
|
||||
const std::string &col_name,
|
||||
const std::string &col_hdr)
|
||||
{
|
||||
std::unique_ptr<ui_out_hdr> temphdr (new ui_out_hdr ());
|
||||
|
||||
temphdr->width = width;
|
||||
temphdr->alignment = alignment;
|
||||
/* We have to copy the column title as the original may be an
|
||||
automatic. */
|
||||
if (colhdr != NULL)
|
||||
temphdr->colhdr = xstrdup (colhdr);
|
||||
else
|
||||
temphdr->colhdr = NULL;
|
||||
|
||||
if (col_name != NULL)
|
||||
temphdr->col_name = xstrdup (col_name);
|
||||
else if (colhdr != NULL)
|
||||
temphdr->col_name = xstrdup (colhdr);
|
||||
else
|
||||
temphdr->col_name = NULL;
|
||||
/* Make our own copy of the strings, since the lifetime of the original
|
||||
versions may be too short. */
|
||||
temphdr->col_hdr = col_hdr;
|
||||
temphdr->col_name = col_name;
|
||||
|
||||
temphdr->colno = uiout->table.headers.size () + 1;
|
||||
|
||||
@ -742,7 +728,7 @@ get_next_header (struct ui_out *uiout,
|
||||
int *colno,
|
||||
int *width,
|
||||
enum ui_align *alignment,
|
||||
char **colhdr)
|
||||
const char **col_hdr)
|
||||
{
|
||||
/* There may be no headers at all or we may have used all columns. */
|
||||
if (uiout->table.headers_iterator == uiout->table.headers.end ())
|
||||
@ -753,7 +739,7 @@ get_next_header (struct ui_out *uiout,
|
||||
*colno = hdr->colno;
|
||||
*width = hdr->width;
|
||||
*alignment = hdr->alignment;
|
||||
*colhdr = hdr->colhdr;
|
||||
*col_hdr = hdr->col_hdr.c_str ();
|
||||
|
||||
/* Advance the header pointer to the next entry. */
|
||||
uiout->table.headers_iterator++;
|
||||
@ -771,7 +757,7 @@ verify_field (struct ui_out *uiout, int *fldno, int *width,
|
||||
enum ui_align *align)
|
||||
{
|
||||
struct ui_out_level *current = current_level (uiout);
|
||||
char *text;
|
||||
const char *text;
|
||||
|
||||
if (uiout->table.flag)
|
||||
{
|
||||
@ -816,7 +802,7 @@ ui_out_data (struct ui_out *uiout)
|
||||
/* Access table field parameters. */
|
||||
int
|
||||
ui_out_query_field (struct ui_out *uiout, int colno,
|
||||
int *width, int *alignment, char **col_name)
|
||||
int *width, int *alignment, const char **col_name)
|
||||
{
|
||||
if (!uiout->table.flag)
|
||||
return 0;
|
||||
@ -832,7 +818,7 @@ ui_out_query_field (struct ui_out *uiout, int colno,
|
||||
|
||||
*width = hdr->width;
|
||||
*alignment = hdr->alignment;
|
||||
*col_name = hdr->col_name;
|
||||
*col_name = hdr->col_name.c_str ();
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
13
gdb/ui-out.h
13
gdb/ui-out.h
@ -74,8 +74,9 @@ extern void ui_out_end (struct ui_out *uiout, enum ui_out_type type);
|
||||
field, ... }, ... ] }''. If NR_ROWS is negative then there is at
|
||||
least one row. */
|
||||
extern void ui_out_table_header (struct ui_out *uiout, int width,
|
||||
enum ui_align align, const char *col_name,
|
||||
const char *colhdr);
|
||||
enum ui_align align,
|
||||
const std::string &col_name,
|
||||
const std::string &col_hdr);
|
||||
|
||||
extern void ui_out_table_body (struct ui_out *uiout);
|
||||
|
||||
@ -129,7 +130,8 @@ extern void ui_out_flush (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);
|
||||
int *width, int *alignment,
|
||||
const char **col_name);
|
||||
|
||||
/* HACK: Code in GDB is currently checking to see the type of ui_out
|
||||
builder when determining which output to produce. This function is
|
||||
@ -152,8 +154,9 @@ typedef void (table_begin_ftype) (struct ui_out * uiout,
|
||||
typedef void (table_body_ftype) (struct ui_out * uiout);
|
||||
typedef void (table_end_ftype) (struct ui_out * uiout);
|
||||
typedef void (table_header_ftype) (struct ui_out * uiout, int width,
|
||||
enum ui_align align, const char *col_name,
|
||||
const char *colhdr);
|
||||
enum ui_align align,
|
||||
const std::string &col_name,
|
||||
const std::string &col_hdr);
|
||||
/* Note: level 0 is the top-level so LEVEL is always greater than
|
||||
zero. */
|
||||
typedef void (ui_out_begin_ftype) (struct ui_out *uiout,
|
||||
|
Loading…
x
Reference in New Issue
Block a user