From 9f6ad286efc0edf7d0cdb8a4126a23d38a267f8d Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Sat, 26 Oct 2019 16:56:27 -0600 Subject: Fix the "winheight" command The "winheight" command is broken. I probably broke it in one of my TUI refactoring patches, though I didn't track down exactly which one. The bug is that the code does: *buf_ptr = '\0'; ... but then never advances buf_ptr past this point, so no window name is seen. This patch refactors the code a bit so that a copy of the argument string is not needed, also fixing the bug. A new test case is included. gdb/ChangeLog 2019-11-19 Tom Tromey * tui/tui-win.c (tui_partial_win_by_name): Move from tui-data.c. Now static. Change type of "name". (tui_set_win_height_command): Don't copy "arg". * tui/tui-data.h (tui_partial_win_by_name): Don't declare. * tui/tui-data.c (tui_partial_win_by_name): Move to tui-win.c. gdb/testsuite/ChangeLog 2019-11-19 Tom Tromey * gdb.tui/winheight.exp: New file. Change-Id: I0871e93777a70036dbec9c9543f862f42e3a81e5 --- gdb/ChangeLog | 8 ++++++++ gdb/testsuite/ChangeLog | 4 ++++ gdb/testsuite/gdb.tui/winheight.exp | 37 +++++++++++++++++++++++++++++++++++++ gdb/tui/tui-data.c | 19 ------------------- gdb/tui/tui-data.h | 1 - gdb/tui/tui-win.c | 29 ++++++++++++++++++++++------- 6 files changed, 71 insertions(+), 27 deletions(-) create mode 100644 gdb/testsuite/gdb.tui/winheight.exp diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 11ec2e3..cf65de2 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,11 @@ +2019-11-19 Tom Tromey + + * tui/tui-win.c (tui_partial_win_by_name): Move from tui-data.c. + Now static. Change type of "name". + (tui_set_win_height_command): Don't copy "arg". + * tui/tui-data.h (tui_partial_win_by_name): Don't declare. + * tui/tui-data.c (tui_partial_win_by_name): Move to tui-win.c. + 2019-11-19 Ali Tamur * dwarf2read.c (dw2_get_file_names_reader): Replace "if (attr)" with diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 806389c..32dc308 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2019-11-19 Tom Tromey + + * gdb.tui/winheight.exp: New file. + 2019-11-19 Andrew Burgess * gdb.base/ctf-whatis.c: Delete. diff --git a/gdb/testsuite/gdb.tui/winheight.exp b/gdb/testsuite/gdb.tui/winheight.exp new file mode 100644 index 0000000..cf65c75 --- /dev/null +++ b/gdb/testsuite/gdb.tui/winheight.exp @@ -0,0 +1,37 @@ +# Copyright 2019 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Test the "winheight" command. + +load_lib "tuiterm.exp" + +standard_testfile tui-layout.c + +if {[build_executable "failed to prepare" ${testfile} ${srcfile}] == -1} { + return -1 +} + +Term::clean_restart 24 80 $testfile +if {![Term::enter_tui]} { + unsupported "TUI not supported" +} + +Term::check_box "source box" 0 0 80 15 + +Term::command "winheight cmd +5" +Term::check_box "smaller source box" 0 0 80 10 + +Term::command "winheight cmd -5" +Term::check_box "larger source box" 0 0 80 15 diff --git a/gdb/tui/tui-data.c b/gdb/tui/tui-data.c index 522bb9a..8f79658 100644 --- a/gdb/tui/tui-data.c +++ b/gdb/tui/tui-data.c @@ -158,25 +158,6 @@ tui_prev_win (struct tui_win_info *cur_win) } -/* Answer the window represented by name. */ -struct tui_win_info * -tui_partial_win_by_name (const char *name) -{ - if (name != NULL) - { - for (tui_win_info *item : all_tui_windows ()) - { - const char *cur_name = item->name (); - - if (strlen (name) <= strlen (cur_name) - && startswith (cur_name, name)) - return item; - } - } - - return NULL; -} - /* See tui-data.h. */ void diff --git a/gdb/tui/tui-data.h b/gdb/tui/tui-data.h index 0e45da5..282b49e 100644 --- a/gdb/tui/tui-data.h +++ b/gdb/tui/tui-data.h @@ -294,7 +294,6 @@ struct all_tui_windows /* Data Manipulation Functions. */ -extern struct tui_win_info *tui_partial_win_by_name (const char *); extern enum tui_layout_type tui_current_layout (void); extern int tui_term_height (void); extern void tui_set_term_height_to (int); diff --git a/gdb/tui/tui-win.c b/gdb/tui/tui-win.c index feeee34..c8d36c7 100644 --- a/gdb/tui/tui-win.c +++ b/gdb/tui/tui-win.c @@ -51,6 +51,7 @@ #include "gdb_curses.h" #include #include "readline/readline.h" +#include "gdbsupport/gdb_string_view.h" #include @@ -792,6 +793,24 @@ tui_scroll_right_command (const char *arg, int from_tty) } +/* Answer the window represented by name. */ +static struct tui_win_info * +tui_partial_win_by_name (gdb::string_view name) +{ + if (name != NULL) + { + for (tui_win_info *item : all_tui_windows ()) + { + const char *cur_name = item->name (); + + if (startswith (cur_name, name)) + return item; + } + } + + return NULL; +} + /* Set focus to the window named by 'arg'. */ static void tui_set_focus_command (const char *arg, int from_tty) @@ -939,20 +958,16 @@ tui_set_win_height_command (const char *arg, int from_tty) tui_enable (); if (arg != NULL) { - std::string copy = arg; - char *buf = ©[0]; - char *buf_ptr = buf; - char *wname = NULL; + const char *buf = arg; + const char *buf_ptr = buf; int new_height; struct tui_win_info *win_info; - wname = buf_ptr; buf_ptr = strchr (buf_ptr, ' '); if (buf_ptr != NULL) { - *buf_ptr = '\0'; - /* Validate the window name. */ + gdb::string_view wname (buf, buf_ptr - buf); win_info = tui_partial_win_by_name (wname); if (win_info == NULL) -- cgit v1.1