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:
parent
2d81b34998
commit
f853215443
2 changed files with 30 additions and 44 deletions
|
@ -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>
|
||||
|
||||
* 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
|
||||
this single line: target name, process number, current function,
|
||||
current line, current PC, SingleKey mode. */
|
||||
static char *
|
||||
static std::string
|
||||
tui_make_status_line (struct tui_locator_window *loc)
|
||||
{
|
||||
char *string;
|
||||
char line_buf[50], *pname;
|
||||
char *buf;
|
||||
int status_size;
|
||||
int i, proc_width;
|
||||
int proc_width;
|
||||
const char *pid_name;
|
||||
int target_width;
|
||||
int pid_width;
|
||||
|
@ -97,8 +95,6 @@ tui_make_status_line (struct tui_locator_window *loc)
|
|||
pid_width = MAX_PID_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. */
|
||||
if (loc->line_no > 0)
|
||||
|
@ -158,61 +154,47 @@ tui_make_status_line (struct tui_locator_window *loc)
|
|||
pname = loc->proc_name;
|
||||
|
||||
/* Now create the locator line from the string version of the
|
||||
elements. We could use sprintf() here but that wouldn't ensure
|
||||
that we don't overrun the size of the allocated buffer.
|
||||
strcat_to_buf() will. */
|
||||
*string = (char) 0;
|
||||
elements. */
|
||||
string_file string;
|
||||
|
||||
if (target_width > 0)
|
||||
{
|
||||
sprintf (buf, "%*.*s ",
|
||||
-target_width, target_width, target_shortname);
|
||||
strcat_to_buf (string, status_size, buf);
|
||||
}
|
||||
string.printf ("%*.*s ", -target_width, target_width, target_shortname);
|
||||
if (pid_width > 0)
|
||||
{
|
||||
sprintf (buf, "%*.*s ",
|
||||
-pid_width, pid_width, pid_name);
|
||||
strcat_to_buf (string, status_size, buf);
|
||||
}
|
||||
|
||||
string.printf ("%*.*s ", -pid_width, pid_width, pid_name);
|
||||
|
||||
/* Show whether we are in SingleKey mode. */
|
||||
if (tui_current_key_mode == TUI_SINGLE_KEY_MODE)
|
||||
{
|
||||
strcat_to_buf (string, status_size, SINGLE_KEY);
|
||||
strcat_to_buf (string, status_size, " ");
|
||||
string.puts (SINGLE_KEY);
|
||||
string.puts (" ");
|
||||
}
|
||||
|
||||
/* Procedure/class name. */
|
||||
if (proc_width > 0)
|
||||
{
|
||||
if (strlen (pname) > proc_width)
|
||||
sprintf (buf, "%s%*.*s* ", PROC_PREFIX,
|
||||
1 - proc_width, proc_width - 1, pname);
|
||||
string.printf ("%s%*.*s* ", PROC_PREFIX,
|
||||
1 - proc_width, proc_width - 1, pname);
|
||||
else
|
||||
sprintf (buf, "%s%*.*s ", PROC_PREFIX,
|
||||
-proc_width, proc_width, pname);
|
||||
strcat_to_buf (string, status_size, buf);
|
||||
string.printf ("%s%*.*s ", PROC_PREFIX,
|
||||
-proc_width, proc_width, pname);
|
||||
}
|
||||
|
||||
if (line_width > 0)
|
||||
{
|
||||
sprintf (buf, "%s%*.*s ", LINE_PREFIX,
|
||||
-line_width, line_width, line_buf);
|
||||
strcat_to_buf (string, status_size, buf);
|
||||
}
|
||||
string.printf ("%s%*.*s ", LINE_PREFIX,
|
||||
-line_width, line_width, line_buf);
|
||||
if (pc_width > 0)
|
||||
{
|
||||
strcat_to_buf (string, status_size, PC_PREFIX);
|
||||
strcat_to_buf (string, status_size, pc_buf);
|
||||
string.puts (PC_PREFIX);
|
||||
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
|
||||
|
@ -252,7 +234,7 @@ tui_locator_window::rerender ()
|
|||
{
|
||||
if (handle != NULL)
|
||||
{
|
||||
char *string = tui_make_status_line (this);
|
||||
std::string string = tui_make_status_line (this);
|
||||
wmove (handle, 0, 0);
|
||||
/* We ignore the return value from wstandout and wstandend, casting
|
||||
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
|
||||
to generate an unused-value warning. */
|
||||
(void) wstandout (handle);
|
||||
waddstr (handle, string);
|
||||
waddstr (handle, string.c_str ());
|
||||
wclrtoeol (handle);
|
||||
(void) wstandend (handle);
|
||||
refresh_window ();
|
||||
wmove (handle, 0, 0);
|
||||
xfree (string);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue