diff options
-rw-r--r-- | gdb/ChangeLog | 14 | ||||
-rw-r--r-- | gdb/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/gdbinit-history.exp | 51 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/gdbinit-history/unlimited/.gdbinit | 1 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/gdbinit-history/zero/.gdbinit | 1 | ||||
-rw-r--r-- | gdb/top.c | 51 |
6 files changed, 95 insertions, 30 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 61bc846..082886e 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,17 @@ +2015-05-13 Patrick Palka <patrick@parcs.ath.cx> + + PR gdb/17820 + * top.c (history_size_setshow_var): Change type to signed. + Initialize to -2. Update documentation. + (set_readline_history_size): Define. + (set_history_size_command): Use it. Remove logic for handling + out-of-range sizes. + (init_history): Use set_readline_history_size(). Test for a + value of -2 instead of 0 when determining whether to set a + default history size. + (init_main): Decode the argument of the "size" command as a + zuinteger_unlimited. + 2015-05-12 Doug Evans <dje@google.com> * dwarf2read.c (struct file_entry): Tweak comments. diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 52140bd..db8f3ce 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2015-05-13 Patrick Palka <patrick@parcs.ath.cx> + + PR gdb/17820 + * gdb.base/gdbinit-history.exp: New test. + * gdb.base/gdbinit-history/unlimited/.gdbinit: New file. + * gdb.base/gdbinit-history/zero/.gdbinit: New file. + 2015-05-09 Siva Chandra Reddy <sivachandra@google.com> * gdb.python/py-xmethods.cc: Enhance test case. diff --git a/gdb/testsuite/gdb.base/gdbinit-history.exp b/gdb/testsuite/gdb.base/gdbinit-history.exp new file mode 100644 index 0000000..474680a --- /dev/null +++ b/gdb/testsuite/gdb.base/gdbinit-history.exp @@ -0,0 +1,51 @@ +# 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 $HOME/.gdbinit + + +# Check that the history size is properly set to SIZE when reading the .gdbinit +# file located in HOME. + +proc test_gdbinit_history_setting { home size } { + global env + global INTERNAL_GDBFLAGS + global srcdir + global subdir + + set old_home $env(HOME) + set env(HOME) "$srcdir/$subdir/$home" + set saved_internal_gdbflags $INTERNAL_GDBFLAGS + set INTERNAL_GDBFLAGS [string map {"-nx" ""} $INTERNAL_GDBFLAGS] + + 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" + } + + set INTERNAL_GDBFLAGS $saved_internal_gdbflags + set $env(HOME) $old_home +} + +test_gdbinit_history_setting "gdbinit-history/unlimited" "unlimited" +test_gdbinit_history_setting "gdbinit-history/zero" "0" diff --git a/gdb/testsuite/gdb.base/gdbinit-history/unlimited/.gdbinit b/gdb/testsuite/gdb.base/gdbinit-history/unlimited/.gdbinit new file mode 100644 index 0000000..6604d8f --- /dev/null +++ b/gdb/testsuite/gdb.base/gdbinit-history/unlimited/.gdbinit @@ -0,0 +1 @@ +set history size unlimited diff --git a/gdb/testsuite/gdb.base/gdbinit-history/zero/.gdbinit b/gdb/testsuite/gdb.base/gdbinit-history/zero/.gdbinit new file mode 100644 index 0000000..7cd6b24 --- /dev/null +++ b/gdb/testsuite/gdb.base/gdbinit-history/zero/.gdbinit @@ -0,0 +1 @@ +set history size 0 @@ -687,8 +687,8 @@ show_write_history_p (struct ui_file *file, int from_tty, } /* The variable associated with the "set/show history size" - command. */ -static unsigned int history_size_setshow_var; + command. The value -1 means unlimited, and -2 means undefined. */ +static int history_size_setshow_var = -2; static void show_history_size (struct ui_file *file, int from_tty, @@ -1610,34 +1610,26 @@ show_commands (char *args, int from_tty) } } -/* Called by do_setshow_command. */ -static void -set_history_size_command (char *args, int from_tty, struct cmd_list_element *c) -{ - /* Readline's history interface works with 'int', so it can only - handle history sizes up to INT_MAX. The command itself is - uinteger, so UINT_MAX means "unlimited", but we only get that if - the user does "set history size 0" -- "set history size <UINT_MAX>" - throws out-of-range. */ - if (history_size_setshow_var > INT_MAX - && history_size_setshow_var != UINT_MAX) - { - unsigned int new_value = history_size_setshow_var; +/* Update the size of our command history file to HISTORY_SIZE. - /* Restore previous value before throwing. */ - if (history_is_stifled ()) - history_size_setshow_var = history_max_entries; - else - history_size_setshow_var = UINT_MAX; + A HISTORY_SIZE of -1 stands for unlimited. */ - error (_("integer %u out of range"), new_value); - } +static void +set_readline_history_size (int history_size) +{ + gdb_assert (history_size >= -1); - /* Commit the new value to readline's history. */ - if (history_size_setshow_var == UINT_MAX) + if (history_size == -1) unstifle_history (); else - stifle_history (history_size_setshow_var); + stifle_history (history_size); +} + +/* Called by do_setshow_command. */ +static void +set_history_size_command (char *args, int from_tty, struct cmd_list_element *c) +{ + set_readline_history_size (history_size_setshow_var); } void @@ -1705,12 +1697,10 @@ init_history (void) history_size_setshow_var = var; } /* If the init file hasn't set a size yet, pick the default. */ - else if (history_size_setshow_var == 0) + else if (history_size_setshow_var == -2) history_size_setshow_var = 256; - /* Note that unlike "set history size 0", "HISTSIZE=0" really sets - the history size to 0... */ - stifle_history (history_size_setshow_var); + set_readline_history_size (history_size_setshow_var); tmpenv = getenv ("GDBHISTFILE"); if (tmpenv) @@ -1859,7 +1849,8 @@ Without an argument, saving is enabled."), show_write_history_p, &sethistlist, &showhistlist); - add_setshow_uinteger_cmd ("size", no_class, &history_size_setshow_var, _("\ + add_setshow_zuinteger_unlimited_cmd ("size", no_class, + &history_size_setshow_var, _("\ Set the size of the command history,"), _("\ Show the size of the command history,"), _("\ ie. the number of previous commands to keep a record of.\n\ |