diff options
-rw-r--r-- | gdb/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/NEWS | 4 | ||||
-rw-r--r-- | gdb/doc/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/doc/gdb.texinfo | 9 | ||||
-rw-r--r-- | gdb/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/gdbhistsize-history.exp | 70 | ||||
-rw-r--r-- | gdb/top.c | 38 |
7 files changed, 120 insertions, 19 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 7d63185..e1d9349 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,12 @@ 2015-06-17 Patrick Palka <patrick@parcs.ath.cx> + PR gdb/16999 + * NEWS: Mention new GDBHISTSIZE behavior. + * top.c (init_history): For null or out-of-range GDBHISTSIZE, + set history size to unlimited. Ignore non-numeric GDBHISTSIZE. + +2015-06-17 Patrick Palka <patrick@parcs.ath.cx> + * NEWS: Mention that GDBHISTSIZE is read instead of HISTSIZE. * top.c (init_history): Read from GDBHISTSIZE instead of HISTSIZE. @@ -64,7 +64,9 @@ * The HISTSIZE environment variable is no longer read when determining the size of GDB's command history. GDB now instead reads the dedicated - GDBHISTSIZE environment variable. + GDBHISTSIZE environment variable. Setting GDBHISTSIZE to "-1" or to "" now + disables truncation of command history. Non-numeric values of GDBHISTSIZE + are ignored. * Guile Scripting diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index ed51387..d38550a 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,5 +1,11 @@ 2015-06-17 Patrick Palka <patrick@parcs.ath.cx> + PR gdb/16999 + * gdb.texinfo (Command History): Mention new GDBHISTSIZE + behavior. + +2015-06-17 Patrick Palka <patrick@parcs.ath.cx> + * gdb.texinfo (Command History): Replace occurrences of HISTSIZE with GDBHISTSIZE. diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index e02f92e..9889b69 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -22639,10 +22639,11 @@ Stop recording command history in a file. @item set history size @var{size} @itemx set history size unlimited Set the number of commands which @value{GDBN} keeps in its history list. -This defaults to the value of the environment variable -@code{GDBHISTSIZE}, or to 256 if this variable is not set. If @var{size} -is @code{unlimited}, the number of commands @value{GDBN} keeps in the -history list is unlimited. +This defaults to the value of the environment variable @env{GDBHISTSIZE}, or +to 256 if this variable is not set. Non-numeric values of @env{GDBHISTSIZE} +are ignored. If @var{size} is @code{unlimited} or if @env{GDBHISTSIZE} is a +negative number, the number of commands @value{GDBN} keeps in the history list +is unlimited. @end table History expansion assigns special meaning to the character @kbd{!}. diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index abb0677..0f3749e 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2015-06-17 Patrick Palka <patrick@parcs.ath.cx> + PR gdb/16999 + * gdb.base/gdbhistsize-history.exp: New test. + +2015-06-17 Patrick Palka <patrick@parcs.ath.cx> + * gdb.base/gdbinit-history.exp: Replace occurrences of HISTSIZE with GDBHISTSIZE. * gdb.base/readline.exp: Likewise. diff --git a/gdb/testsuite/gdb.base/gdbhistsize-history.exp b/gdb/testsuite/gdb.base/gdbhistsize-history.exp new file mode 100644 index 0000000..0c3f93f --- /dev/null +++ b/gdb/testsuite/gdb.base/gdbhistsize-history.exp @@ -0,0 +1,70 @@ +# Copyright 2015 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 <http://www.gnu.org/licenses/>. + +# This file is part of the gdb testsuite. + +# Test the setting of "history size" via the GDBHISTSIZE environment variable + + +# Check that the history size is properly set to SIZE when the environment +# variable ENV_VAR is set to GDBHISTSIZE. + +proc test_histsize_history_setting { histsize size { env_var "GDBHISTSIZE" } } { + global env + + set have_old_gdbhistsize 0 + if [info exists env($env_var)] { + set have_old_gdbhistsize 1 + set old_gdbhistsize $env($env_var) + } + set env($env_var) $histsize + + with_test_prefix "histsize=$histsize" { + gdb_exit + gdb_start + + gdb_test "show history size" "The size of the command history is $size." + + if { $size == "0" } { + gdb_test_no_output "show commands" + } elseif { $size != "1" } { + gdb_test "show commands" \ + " . show history size\r\n . show commands" + } + + if { $have_old_gdbhistsize } { + set env($env_var) $old_gdbhistsize + } else { + unset env($env_var) + } + } +} + +test_histsize_history_setting "" "unlimited" +test_histsize_history_setting "0" "0" +test_histsize_history_setting "20" "20" +test_histsize_history_setting " 20 " "20" +test_histsize_history_setting "-5" "unlimited" + +# Test defaulting to 256 upon encountering a non-numeric GDBHISTSIZE. +test_histsize_history_setting "not_an_integer" "256" +test_histsize_history_setting "10zab" "256" +test_histsize_history_setting "-5ab" "256" + +# A huge number (hopefully larger than INT_MAX) +test_histsize_history_setting "99999999999999999999999999999999999" "unlimited" + +# We no longer read HISTSIZE +test_histsize_history_setting "50" "256" "HISTSIZE" @@ -1684,21 +1684,31 @@ init_history (void) tmpenv = getenv ("GDBHISTSIZE"); if (tmpenv) { - int var; - - var = atoi (tmpenv); - if (var < 0) - { - /* Prefer ending up with no history rather than overflowing - readline's history interface, which uses signed 'int' - everywhere. */ - var = 0; - } - - history_size_setshow_var = var; + long var; + char *endptr; + + tmpenv = skip_spaces (tmpenv); + var = strtol (tmpenv, &endptr, 10); + endptr = skip_spaces (endptr); + + /* If GDBHISTSIZE is non-numeric then ignore it. If GDBHISTSIZE is the + empty string, a negative number or a huge positive number (larger than + INT_MAX) then set the history size to unlimited. Otherwise set our + history size to the number we have read. This behavior is consistent + with how bash handles HISTSIZE. */ + if (*endptr != '\0') + ; + else if (*tmpenv == '\0' + || var < 0 + || var > INT_MAX) + history_size_setshow_var = -1; + else + history_size_setshow_var = var; } - /* If the init file hasn't set a size yet, pick the default. */ - else if (history_size_setshow_var == -2) + + /* If neither the init file nor GDBHISTSIZE has set a size yet, pick the + default. */ + if (history_size_setshow_var == -2) history_size_setshow_var = 256; set_readline_history_size (history_size_setshow_var); |