Change tui_data_item_window::content to be a unique_xmalloc_ptr
This changes tui_data_item_window::content to be a unique_xmalloc_ptr and fixes up the fallout. It also removes a parameter from tui_expand_tabs, as it was only ever given one value. This also removes some tab-handling code from tui_data_window::display_registers_from. Because the content can only be set by tui_register_format, and because that calls tui_expand_tabs, it's not possible to see a tab here. gdb/ChangeLog 2019-08-20 Tom Tromey <tom@tromey.com> * tui/tui-regs.h (struct tui_data_item_window) <~tui_data_item_window>: Remove. <content>: Now a unique_xmalloc_ptr. * tui/tui-regs.c (tui_register_format): Return a unique_xmalloc_ptr. (tui_get_register): Update. (~tui_data_item_window): Remove. (tui_data_window::display_registers_from, tui_display_register): Update. * tui/tui-io.h (tui_expand_tabs): Update. * tui/tui-io.c (tui_expand_tabs): Return a unique_xmalloc_ptr. Remove "col" parameter.
This commit is contained in:
parent
8e114aab8b
commit
b9ad36868f
|
@ -1,3 +1,18 @@
|
||||||
|
2019-08-20 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
|
* tui/tui-regs.h (struct tui_data_item_window)
|
||||||
|
<~tui_data_item_window>: Remove.
|
||||||
|
<content>: Now a unique_xmalloc_ptr.
|
||||||
|
* tui/tui-regs.c (tui_register_format): Return a
|
||||||
|
unique_xmalloc_ptr.
|
||||||
|
(tui_get_register): Update.
|
||||||
|
(~tui_data_item_window): Remove.
|
||||||
|
(tui_data_window::display_registers_from, tui_display_register):
|
||||||
|
Update.
|
||||||
|
* tui/tui-io.h (tui_expand_tabs): Update.
|
||||||
|
* tui/tui-io.c (tui_expand_tabs): Return a unique_xmalloc_ptr.
|
||||||
|
Remove "col" parameter.
|
||||||
|
|
||||||
2019-08-20 Tom Tromey <tom@tromey.com>
|
2019-08-20 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
* tui/tui-regs.h (struct tui_data_item_window) <value>: Remove
|
* tui/tui-regs.h (struct tui_data_item_window) <value>: Remove
|
||||||
|
|
|
@ -1050,19 +1050,17 @@ tui_getc (FILE *fp)
|
||||||
return ch;
|
return ch;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Utility function to expand TABs in a STRING into spaces. STRING
|
/* See tui-io.h. */
|
||||||
will be displayed starting at column COL, and is assumed to include
|
|
||||||
no newlines. The returned expanded string is malloc'ed. */
|
|
||||||
|
|
||||||
char *
|
gdb::unique_xmalloc_ptr<char>
|
||||||
tui_expand_tabs (const char *string, int col)
|
tui_expand_tabs (const char *string)
|
||||||
{
|
{
|
||||||
int n_adjust, ncol;
|
int n_adjust, ncol;
|
||||||
const char *s;
|
const char *s;
|
||||||
char *ret, *q;
|
char *ret, *q;
|
||||||
|
|
||||||
/* 1. How many additional characters do we need? */
|
/* 1. How many additional characters do we need? */
|
||||||
for (ncol = col, n_adjust = 0, s = string; s; )
|
for (ncol = 0, n_adjust = 0, s = string; s; )
|
||||||
{
|
{
|
||||||
s = strpbrk (s, "\t");
|
s = strpbrk (s, "\t");
|
||||||
if (s)
|
if (s)
|
||||||
|
@ -1079,7 +1077,7 @@ tui_expand_tabs (const char *string, int col)
|
||||||
ret = q = (char *) xmalloc (strlen (string) + n_adjust + 1);
|
ret = q = (char *) xmalloc (strlen (string) + n_adjust + 1);
|
||||||
|
|
||||||
/* 2. Copy the original string while replacing TABs with spaces. */
|
/* 2. Copy the original string while replacing TABs with spaces. */
|
||||||
for (ncol = col, s = string; s; )
|
for (ncol = 0, s = string; s; )
|
||||||
{
|
{
|
||||||
const char *s1 = strpbrk (s, "\t");
|
const char *s1 = strpbrk (s, "\t");
|
||||||
if (s1)
|
if (s1)
|
||||||
|
@ -1101,5 +1099,5 @@ tui_expand_tabs (const char *string, int col)
|
||||||
s = s1;
|
s = s1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return gdb::unique_xmalloc_ptr<char> (ret);
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,7 +46,7 @@ extern void tui_initialize_io (void);
|
||||||
extern void tui_redisplay_readline (void);
|
extern void tui_redisplay_readline (void);
|
||||||
|
|
||||||
/* Expand TABs into spaces. */
|
/* Expand TABs into spaces. */
|
||||||
extern char *tui_expand_tabs (const char *, int);
|
extern gdb::unique_xmalloc_ptr<char> tui_expand_tabs (const char *);
|
||||||
|
|
||||||
/* Enter/leave reverse video mode. */
|
/* Enter/leave reverse video mode. */
|
||||||
extern void tui_set_reverse_mode (WINDOW *w, bool reverse);
|
extern void tui_set_reverse_mode (WINDOW *w, bool reverse);
|
||||||
|
|
|
@ -52,7 +52,7 @@ static void tui_show_register_group (tui_data_window *win_info,
|
||||||
/* Get the register from the frame and return a printable
|
/* Get the register from the frame and return a printable
|
||||||
representation of it. */
|
representation of it. */
|
||||||
|
|
||||||
static char *
|
static gdb::unique_xmalloc_ptr<char>
|
||||||
tui_register_format (struct frame_info *frame, int regnum)
|
tui_register_format (struct frame_info *frame, int regnum)
|
||||||
{
|
{
|
||||||
struct gdbarch *gdbarch = get_frame_arch (frame);
|
struct gdbarch *gdbarch = get_frame_arch (frame);
|
||||||
|
@ -72,7 +72,7 @@ tui_register_format (struct frame_info *frame, int regnum)
|
||||||
str.resize (str.size () - 1);
|
str.resize (str.size () - 1);
|
||||||
|
|
||||||
/* Expand tabs into spaces, since ncurses on MS-Windows doesn't. */
|
/* Expand tabs into spaces, since ncurses on MS-Windows doesn't. */
|
||||||
return tui_expand_tabs (str.c_str (), 0);
|
return tui_expand_tabs (str.c_str ());
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get the register value from the given frame and format it for the
|
/* Get the register value from the given frame and format it for the
|
||||||
|
@ -87,27 +87,19 @@ tui_get_register (struct frame_info *frame,
|
||||||
*changedp = false;
|
*changedp = false;
|
||||||
if (target_has_registers)
|
if (target_has_registers)
|
||||||
{
|
{
|
||||||
char *prev_content = data->content;
|
gdb::unique_xmalloc_ptr<char> new_content
|
||||||
|
= tui_register_format (frame, regnum);
|
||||||
data->content = tui_register_format (frame, regnum);
|
|
||||||
|
|
||||||
if (changedp != NULL
|
if (changedp != NULL
|
||||||
&& strcmp (prev_content, data->content) != 0)
|
&& strcmp (data->content.get (), new_content.get ()) != 0)
|
||||||
*changedp = true;
|
*changedp = true;
|
||||||
|
|
||||||
xfree (prev_content);
|
data->content = std::move (new_content);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* See tui-regs.h. */
|
/* See tui-regs.h. */
|
||||||
|
|
||||||
tui_data_item_window::~tui_data_item_window ()
|
|
||||||
{
|
|
||||||
xfree (content);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* See tui-regs.h. */
|
|
||||||
|
|
||||||
int
|
int
|
||||||
tui_data_window::last_regs_line_no () const
|
tui_data_window::last_regs_line_no () const
|
||||||
{
|
{
|
||||||
|
@ -309,19 +301,13 @@ tui_data_window::display_registers_from (int start_element_no)
|
||||||
int max_len = 0;
|
int max_len = 0;
|
||||||
for (auto &&data_item_win : regs_content)
|
for (auto &&data_item_win : regs_content)
|
||||||
{
|
{
|
||||||
char *p;
|
const char *p;
|
||||||
int len;
|
int len;
|
||||||
|
|
||||||
len = 0;
|
len = 0;
|
||||||
p = data_item_win->content;
|
p = data_item_win->content.get ();
|
||||||
if (p != 0)
|
if (p != 0)
|
||||||
while (*p)
|
len = strlen (p);
|
||||||
{
|
|
||||||
if (*p++ == '\t')
|
|
||||||
len = 8 * ((len / 8) + 1);
|
|
||||||
else
|
|
||||||
len++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (len > max_len)
|
if (len > max_len)
|
||||||
max_len = len;
|
max_len = len;
|
||||||
|
@ -641,7 +627,7 @@ tui_display_register (struct tui_data_item_window *data)
|
||||||
waddch (data->handle, ' ');
|
waddch (data->handle, ' ');
|
||||||
wmove (data->handle, 0, 0);
|
wmove (data->handle, 0, 0);
|
||||||
if (data->content)
|
if (data->content)
|
||||||
waddstr (data->handle, data->content);
|
waddstr (data->handle, data->content.get ());
|
||||||
|
|
||||||
if (data->highlight)
|
if (data->highlight)
|
||||||
/* We ignore the return value, casting it to void in order to avoid
|
/* We ignore the return value, casting it to void in order to avoid
|
||||||
|
|
|
@ -33,13 +33,11 @@ struct tui_data_item_window : public tui_gen_win_info
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
~tui_data_item_window () override;
|
|
||||||
|
|
||||||
const char *name = nullptr;
|
const char *name = nullptr;
|
||||||
/* The register number, or data display number. */
|
/* The register number, or data display number. */
|
||||||
int item_no = -1;
|
int item_no = -1;
|
||||||
bool highlight = false;
|
bool highlight = false;
|
||||||
char *content = nullptr;
|
gdb::unique_xmalloc_ptr<char> content;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* The TUI registers window. */
|
/* The TUI registers window. */
|
||||||
|
|
Loading…
Reference in New Issue