mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-24 12:23:31 +08:00
Change tui_make_status_line to return std::string
This changes tui_make_status_line to return std::string. This cleans it up a bit, and removes some explicit memory management. gdb/ChangeLog 2019-09-20 Tom Tromey <tom@tromey.com> * tui/tui-stack.c (tui_make_status_line): Return std::string. (tui_locator_window::rerender): Update.
This commit is contained in:
@ -1,3 +1,8 @@
|
|||||||
|
2019-09-20 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
|
* tui/tui-stack.c (tui_make_status_line): Return std::string.
|
||||||
|
(tui_locator_window::rerender): Update.
|
||||||
|
|
||||||
2019-09-20 Tom Tromey <tom@tromey.com>
|
2019-09-20 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
* tui/tui-winsource.h (struct tui_source_window_base)
|
* tui/tui-winsource.h (struct tui_source_window_base)
|
||||||
|
@ -66,14 +66,12 @@ tui_locator_win_info_ptr (void)
|
|||||||
/* Create the status line to display as much information as we can on
|
/* Create the status line to display as much information as we can on
|
||||||
this single line: target name, process number, current function,
|
this single line: target name, process number, current function,
|
||||||
current line, current PC, SingleKey mode. */
|
current line, current PC, SingleKey mode. */
|
||||||
static char *
|
static std::string
|
||||||
tui_make_status_line (struct tui_locator_window *loc)
|
tui_make_status_line (struct tui_locator_window *loc)
|
||||||
{
|
{
|
||||||
char *string;
|
|
||||||
char line_buf[50], *pname;
|
char line_buf[50], *pname;
|
||||||
char *buf;
|
|
||||||
int status_size;
|
int status_size;
|
||||||
int i, proc_width;
|
int proc_width;
|
||||||
const char *pid_name;
|
const char *pid_name;
|
||||||
int target_width;
|
int target_width;
|
||||||
int pid_width;
|
int pid_width;
|
||||||
@ -97,8 +95,6 @@ tui_make_status_line (struct tui_locator_window *loc)
|
|||||||
pid_width = MAX_PID_WIDTH;
|
pid_width = MAX_PID_WIDTH;
|
||||||
|
|
||||||
status_size = tui_term_width ();
|
status_size = tui_term_width ();
|
||||||
string = (char *) xmalloc (status_size + 1);
|
|
||||||
buf = (char*) alloca (status_size + 1);
|
|
||||||
|
|
||||||
/* Translate line number and obtain its size. */
|
/* Translate line number and obtain its size. */
|
||||||
if (loc->line_no > 0)
|
if (loc->line_no > 0)
|
||||||
@ -158,61 +154,47 @@ tui_make_status_line (struct tui_locator_window *loc)
|
|||||||
pname = loc->proc_name;
|
pname = loc->proc_name;
|
||||||
|
|
||||||
/* Now create the locator line from the string version of the
|
/* Now create the locator line from the string version of the
|
||||||
elements. We could use sprintf() here but that wouldn't ensure
|
elements. */
|
||||||
that we don't overrun the size of the allocated buffer.
|
string_file string;
|
||||||
strcat_to_buf() will. */
|
|
||||||
*string = (char) 0;
|
|
||||||
|
|
||||||
if (target_width > 0)
|
if (target_width > 0)
|
||||||
{
|
string.printf ("%*.*s ", -target_width, target_width, target_shortname);
|
||||||
sprintf (buf, "%*.*s ",
|
|
||||||
-target_width, target_width, target_shortname);
|
|
||||||
strcat_to_buf (string, status_size, buf);
|
|
||||||
}
|
|
||||||
if (pid_width > 0)
|
if (pid_width > 0)
|
||||||
{
|
string.printf ("%*.*s ", -pid_width, pid_width, pid_name);
|
||||||
sprintf (buf, "%*.*s ",
|
|
||||||
-pid_width, pid_width, pid_name);
|
|
||||||
strcat_to_buf (string, status_size, buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Show whether we are in SingleKey mode. */
|
/* Show whether we are in SingleKey mode. */
|
||||||
if (tui_current_key_mode == TUI_SINGLE_KEY_MODE)
|
if (tui_current_key_mode == TUI_SINGLE_KEY_MODE)
|
||||||
{
|
{
|
||||||
strcat_to_buf (string, status_size, SINGLE_KEY);
|
string.puts (SINGLE_KEY);
|
||||||
strcat_to_buf (string, status_size, " ");
|
string.puts (" ");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Procedure/class name. */
|
/* Procedure/class name. */
|
||||||
if (proc_width > 0)
|
if (proc_width > 0)
|
||||||
{
|
{
|
||||||
if (strlen (pname) > proc_width)
|
if (strlen (pname) > proc_width)
|
||||||
sprintf (buf, "%s%*.*s* ", PROC_PREFIX,
|
string.printf ("%s%*.*s* ", PROC_PREFIX,
|
||||||
1 - proc_width, proc_width - 1, pname);
|
1 - proc_width, proc_width - 1, pname);
|
||||||
else
|
else
|
||||||
sprintf (buf, "%s%*.*s ", PROC_PREFIX,
|
string.printf ("%s%*.*s ", PROC_PREFIX,
|
||||||
-proc_width, proc_width, pname);
|
-proc_width, proc_width, pname);
|
||||||
strcat_to_buf (string, status_size, buf);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (line_width > 0)
|
if (line_width > 0)
|
||||||
{
|
string.printf ("%s%*.*s ", LINE_PREFIX,
|
||||||
sprintf (buf, "%s%*.*s ", LINE_PREFIX,
|
-line_width, line_width, line_buf);
|
||||||
-line_width, line_width, line_buf);
|
|
||||||
strcat_to_buf (string, status_size, buf);
|
|
||||||
}
|
|
||||||
if (pc_width > 0)
|
if (pc_width > 0)
|
||||||
{
|
{
|
||||||
strcat_to_buf (string, status_size, PC_PREFIX);
|
string.puts (PC_PREFIX);
|
||||||
strcat_to_buf (string, status_size, pc_buf);
|
string.puts (pc_buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
for (i = strlen (string); i < status_size; i++)
|
|
||||||
string[i] = ' ';
|
|
||||||
string[status_size] = (char) 0;
|
|
||||||
|
|
||||||
return string;
|
if (string.size () < status_size)
|
||||||
|
string.puts (n_spaces (status_size - string.size ()));
|
||||||
|
else if (string.size () > status_size)
|
||||||
|
string.string ().erase (status_size, string.size ());
|
||||||
|
|
||||||
|
return std::move (string.string ());
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get a printable name for the function at the address. The symbol
|
/* Get a printable name for the function at the address. The symbol
|
||||||
@ -252,7 +234,7 @@ tui_locator_window::rerender ()
|
|||||||
{
|
{
|
||||||
if (handle != NULL)
|
if (handle != NULL)
|
||||||
{
|
{
|
||||||
char *string = tui_make_status_line (this);
|
std::string string = tui_make_status_line (this);
|
||||||
wmove (handle, 0, 0);
|
wmove (handle, 0, 0);
|
||||||
/* We ignore the return value from wstandout and wstandend, casting
|
/* We ignore the return value from wstandout and wstandend, casting
|
||||||
them to void in order to avoid a compiler warning. The warning
|
them to void in order to avoid a compiler warning. The warning
|
||||||
@ -260,12 +242,11 @@ tui_locator_window::rerender ()
|
|||||||
changing these macro to expand to code that causes the compiler
|
changing these macro to expand to code that causes the compiler
|
||||||
to generate an unused-value warning. */
|
to generate an unused-value warning. */
|
||||||
(void) wstandout (handle);
|
(void) wstandout (handle);
|
||||||
waddstr (handle, string);
|
waddstr (handle, string.c_str ());
|
||||||
wclrtoeol (handle);
|
wclrtoeol (handle);
|
||||||
(void) wstandend (handle);
|
(void) wstandend (handle);
|
||||||
refresh_window ();
|
refresh_window ();
|
||||||
wmove (handle, 0, 0);
|
wmove (handle, 0, 0);
|
||||||
xfree (string);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user