aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/testsuite/ChangeLog5
-rw-r--r--gdb/testsuite/gdb.base/gdbinit-history.exp58
-rw-r--r--gdb/top.c3
4 files changed, 70 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 00ecb60..e84bd28 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,8 @@
+2015-06-17 Patrick Palka <patrick@parcs.ath.cx>
+
+ * top.c (gdb_safe_append_history): Do not call
+ history_truncate_file if the history is not stifled.
+
2015-06-17 Andreas Arnez <arnez@linux.vnet.ibm.com>
* syscalls/s390-linux.xml: Add syscalls 344 through 354.
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 0e96862..e526cb3 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2015-06-17 Patrick Palka <patrick@parcs.ath.cx>
+
+ * gdb.base/gdbinit-history.exp: Add test case to check that
+ an unlimited history file does not get truncated on exit.
+
2015-06-17 Andreas Arnez <arnez@linux.vnet.ibm.com>
* gdb.base/gnu_vector.c: Include stdarg.h and stdio.h.
diff --git a/gdb/testsuite/gdb.base/gdbinit-history.exp b/gdb/testsuite/gdb.base/gdbinit-history.exp
index 8adfd68..8c4f4ca 100644
--- a/gdb/testsuite/gdb.base/gdbinit-history.exp
+++ b/gdb/testsuite/gdb.base/gdbinit-history.exp
@@ -57,5 +57,63 @@ proc test_gdbinit_history_setting { home size } {
array set env [array get old_env]
}
+# Check that the history file does not get truncated to zero when a gdbinit
+# file sets the history size to unlimited.
+
+proc test_no_truncation_of_unlimited_history_file { } {
+ global env
+ global INTERNAL_GDBFLAGS
+
+ array set old_env [array get env]
+
+ # The HISTSIZE environment variable takes precedence over whatever
+ # history size is set in .gdbinit. Make sure the former is not
+ # set.
+ unset -nocomplain env(HISTSIZE)
+
+ set saved_internal_gdbflags $INTERNAL_GDBFLAGS
+
+ set temp_gdbinit [standard_output_file "gdbinit-history.gdbinit"]
+ set temp_histfile [standard_output_file "gdbinit-history.gdb_history"]
+ file delete $temp_gdbinit
+ file delete $temp_histfile
+
+ set fd [open $temp_gdbinit "w"]
+ puts $fd "set history size unlimited\n"
+ puts $fd "set history filename $temp_histfile\n"
+ puts $fd "set history save\n"
+ close $fd
+
+ append INTERNAL_GDBFLAGS " -x $temp_gdbinit"
+
+ # We have to start then exit GDB twice: the first time to test the creation
+ # of the initial history file, and the second time to test appending to it.
+ # In either case the initial "print 1" command should persist through the
+ # history file.
+ with_test_prefix "truncation" {
+ gdb_exit
+ gdb_start
+ gdb_test "print 1"
+
+ with_test_prefix "creating" {
+ gdb_exit
+ gdb_start
+ gdb_test "server show commands" " . print 1.*"
+ }
+
+ with_test_prefix "appending" {
+ gdb_exit
+ gdb_start
+ gdb_test "server show commands" " . print 1.*"
+ }
+ }
+
+ set INTERNAL_GDBFLAGS $saved_internal_gdbflags
+
+ array set env [array get old_env]
+}
+
test_gdbinit_history_setting "gdbinit-history/unlimited" "unlimited"
test_gdbinit_history_setting "gdbinit-history/zero" "0"
+
+test_no_truncation_of_unlimited_history_file
diff --git a/gdb/top.c b/gdb/top.c
index 74e1e07..f8f926b 100644
--- a/gdb/top.c
+++ b/gdb/top.c
@@ -941,7 +941,8 @@ gdb_safe_append_history (void)
else
{
append_history (command_count, local_history_filename);
- history_truncate_file (local_history_filename, history_max_entries);
+ if (history_is_stifled ())
+ history_truncate_file (local_history_filename, history_max_entries);
}
ret = rename (local_history_filename, history_filename);