aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog14
-rw-r--r--gdb/testsuite/ChangeLog7
-rw-r--r--gdb/testsuite/gdb.base/gdbinit-history.exp51
-rw-r--r--gdb/testsuite/gdb.base/gdbinit-history/unlimited/.gdbinit1
-rw-r--r--gdb/testsuite/gdb.base/gdbinit-history/zero/.gdbinit1
-rw-r--r--gdb/top.c51
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
diff --git a/gdb/top.c b/gdb/top.c
index deb4108..74e1e07 100644
--- a/gdb/top.c
+++ b/gdb/top.c
@@ -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\