Make 'show width/height' display "unlimited" when capped for readline
authorPedro Alves <palves@redhat.com>
Wed, 27 Feb 2019 18:48:36 +0000 (18:48 +0000)
committerPedro Alves <palves@redhat.com>
Wed, 27 Feb 2019 18:48:36 +0000 (18:48 +0000)
When we cap the height/width sizes before passing to readline, tweak
the corresponding command variable to show "unlimited":

  (gdb) set height 0x8000
  (gdb) show height
  Number of lines gdb thinks are in a page is unlimited.

Instead of the current output:
  (gdb) set height 0x8000
  (gdb) show height
  Number of lines gdb thinks are in a page is 32768.

gdb/ChangeLog:
2019-02-27  Pedro Alves  <palves@redhat.com>

* utils.c (set_screen_size): When we cap the height/width sizes,
tweak the corresponding command variable to show "unlimited":

gdb/testsuite/ChangeLog:
2019-02-27  Pedro Alves  <palves@redhat.com>

* gdb.base/page.exp: Add tests for "set/show width/height" with
"infinite" values.

gdb/ChangeLog
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/page.exp
gdb/utils.c

index 02602b2320abfed3a1876ce89310dd1d2cdbfa56..1dc635678422e0e847b7c2f622868ab63c931523 100644 (file)
@@ -1,3 +1,8 @@
+2019-02-27  Pedro Alves  <palves@redhat.com>
+
+       * utils.c (set_screen_size): When we cap the height/width sizes,
+       tweak the corresponding command variable to show "unlimited":
+
 2019-02-27  Saagar Jha  <saagar@saagarjha.com>
            Pedro Alves  <palves@redhat.com>
 
index 477165a0d876896a7f66947bd6a02891ab64ff9d..b5177c7e076664420ea732380f7b6f557cf7d9ac 100644 (file)
@@ -1,3 +1,8 @@
+2019-02-27  Pedro Alves  <palves@redhat.com>
+
+       * gdb.base/page.exp: Add tests for "set/show width/height" with
+       "infinite" values.
+
 2019-02-27  Tom Tromey  <tromey@adacore.com>
 
        * lib/gdb.exp (skip_python_tests_prompt): Don't check for Python
index 10ebf0d43b2e4fe74c8047efadd361641188196b..8f1698c26ef198ed43a5fbb5319cfa0390062cdc 100644 (file)
@@ -94,6 +94,30 @@ gdb_expect_list "paged count for interrupt" \
 
 gdb_test "q" "Quit" "quit while paging"
 
+# Check that width/height of sqrt(INT_MAX) is treated as unlimited, as
+# well as "0" and explicit "unlimited".
+foreach_with_prefix size {"0" "0x80000000" "unlimited"} {
+
+    # Alternate between "non-unlimited" values and "unlimited" values,
+    # to make sure we're not seeing stale internal state.
+
+    gdb_test "set width 200"
+    gdb_test "show width" \
+       "Number of characters gdb thinks are in a line is 200\\."
+
+    gdb_test "set height 200"
+    gdb_test "show height" \
+       "Number of lines gdb thinks are in a page is 200\\."
+
+    gdb_test "set width $size"
+    gdb_test "show width unlimited" \
+       "Number of characters gdb thinks are in a line is unlimited\\."
+
+    gdb_test "set height $size"
+    gdb_test "show height unlimited" \
+       "Number of lines gdb thinks are in a page is unlimited\\."
+}
+
 gdb_exit
 return 0
 
index 069da23542edb7b7608ae635e7b6e591684efc25..60af31f2e4fe4d894479d45ba0a07b6dd1dc6b5e 100644 (file)
@@ -1394,10 +1394,16 @@ set_screen_size (void)
   const int sqrt_int_max = INT_MAX >> (sizeof (int) * 8 / 2);
 
   if (rows <= 0 || rows > sqrt_int_max)
-    rows = sqrt_int_max;
+    {
+      rows = sqrt_int_max;
+      lines_per_page = UINT_MAX;
+    }
 
   if (cols <= 0 || cols > sqrt_int_max)
-    cols = sqrt_int_max;
+    {
+      cols = sqrt_int_max;
+      chars_per_line = UINT_MAX;
+    }
 
   /* Update Readline's idea of the terminal size.  */
   rl_set_screen_size (rows, cols);