2008-12-29 Pedro Alves <pedro@codesourcery.com>
authorPedro Alves <palves@redhat.com>
Mon, 29 Dec 2008 02:18:48 +0000 (02:18 +0000)
committerPedro Alves <palves@redhat.com>
Mon, 29 Dec 2008 02:18:48 +0000 (02:18 +0000)
PR gdb/7536:
* valprint.c (input_radix_1): New static global.
(set_input_radix): Use it instead of "input_radix".
(set_input_radix_1): Always leave input_radix_1 set to
input_radix.
(output_radix_1): New static global.
(set_output_radix): Use it instead of "output_radix".
(set_output_radix_1): Always leave output_radix_1 set to
output_radix.
(_initialize_valprint): Use "input_radix_1" instead of
"input_radix" with the "input-radix" command.  Use
"output_radix_1" instead of "output_radix" with the "output-radix"
command.

2008-12-29  Pedro Alves  <pedro@codesourcery.com>

PR gdb/7536:
* gdb.base/radix.exp: Add tests to ensure invalid input radices
and unsupported output radices are really rejected.

gdb/ChangeLog
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/radix.exp
gdb/valprint.c

index aa64ed337fa516cf364cc88d622a27017a8079b8..1675177f569d353cec4eeb82038ac401870829e6 100644 (file)
@@ -1,3 +1,19 @@
+2008-12-29  Pedro Alves  <pedro@codesourcery.com>
+
+       PR gdb/7536:
+       * valprint.c (input_radix_1): New static global.
+       (set_input_radix): Use it instead of "input_radix".
+       (set_input_radix_1): Always leave input_radix_1 set to
+       input_radix.
+       (output_radix_1): New static global.
+       (set_output_radix): Use it instead of "output_radix".
+       (set_output_radix_1): Always leave output_radix_1 set to
+       output_radix.
+       (_initialize_valprint): Use "input_radix_1" instead of
+       "input_radix" with the "input-radix" command.  Use
+       "output_radix_1" instead of "output_radix" with the "output-radix"
+       command.
+
 2008-12-28  Pedro Alves  <pedro@codesourcery.com>
 
        * linux-fork.c (linux_fork_detach): New.
index ce1de050734335682789d1faac944d55ce45d6a7..6238652daabafcbb523a47575c63341567c906af 100644 (file)
@@ -1,3 +1,9 @@
+2008-12-29  Pedro Alves  <pedro@codesourcery.com>
+
+       PR gdb/7536:
+       * gdb.base/radix.exp: Add tests to ensure invalid input radices
+       and unsupported output radices are really rejected.
+
 2008-12-23  Jan Kratochvil  <jan.kratochvil@redhat.com>
 
        * gdb.cp/punctuator.exp: Backslash the '$' signs.
index f4b8c2d51d13b6972a2fd826c288d039c070bc4b..89ec259a7c9c2ae64c033da2bcd3702c8c53f4ed 100644 (file)
@@ -154,3 +154,31 @@ test_output_radix 16 "10" "20"
     setup_kfail *-*-* "gdb/1715"
     test_one_output 16 "20."        "14"
     test_one_output 16 "(int) 20."  "14"
+
+# Test rejecting invalid input radices and unsupported output radices
+# really rejects the radices, instead of just claiming so (PR 7536).
+
+gdb_test "set radix" \
+    "Input and output radices now set to decimal 10, hex a, octal 12\." \
+    "Reset radices"
+
+gdb_test "set input-radix 1" \
+    "Nonsense input radix ``decimal 1''; input radix unchanged\\." \
+    "Reject input-radix 1"
+gdb_test "show input-radix" \
+    "Default input radix for entering numbers is 10\\." \
+    "Input radix unchanged after rejection"
+
+gdb_test "set output-radix 1" \
+    "Unsupported output radix ``decimal 1''; output radix unchanged\\." \
+    "Reject output-radix 1"
+gdb_test "show output-radix" \
+    "Default output radix for printing of values is 10\\." \
+    "Output radix unchanged after rejection"
+
+gdb_test "set radix 7" \
+    "Unsupported output radix ``decimal 7''; output radix unchanged\\." \
+    "set radix 7 rejected"
+gdb_test "show output-radix" \
+    "Default output radix for printing of values is 10\\." \
+    "Output radix unchanged after rejection through set radix command"
index 6bcb2f83fb6af4b0c0927403a82d63213ef84839..d1f2fdbf62218ddac7cde37788365b637b0ea044 100644 (file)
@@ -1359,6 +1359,12 @@ val_print_string (CORE_ADDR addr, int len, int width, struct ui_file *stream,
 }
 \f
 
+/* The 'set input-radix' command writes to this auxiliary variable.
+   If the requested radix is valid, INPUT_RADIX is updated; otherwise,
+   it is left unchanged.  */
+
+static unsigned input_radix_1 = 10;
+
 /* Validate an input or output radix setting, and make sure the user
    knows what they really did here.  Radix setting is confusing, e.g.
    setting the input radix to "10" never changes it!  */
@@ -1366,7 +1372,7 @@ val_print_string (CORE_ADDR addr, int len, int width, struct ui_file *stream,
 static void
 set_input_radix (char *args, int from_tty, struct cmd_list_element *c)
 {
-  set_input_radix_1 (from_tty, input_radix);
+  set_input_radix_1 (from_tty, input_radix_1);
 }
 
 static void
@@ -1381,12 +1387,11 @@ set_input_radix_1 (int from_tty, unsigned radix)
 
   if (radix < 2)
     {
-      /* FIXME: cagney/2002-03-17: This needs to revert the bad radix
-         value.  */
+      input_radix_1 = input_radix;
       error (_("Nonsense input radix ``decimal %u''; input radix unchanged."),
             radix);
     }
-  input_radix = radix;
+  input_radix_1 = input_radix = radix;
   if (from_tty)
     {
       printf_filtered (_("Input radix now set to decimal %u, hex %x, octal %o.\n"),
@@ -1394,10 +1399,16 @@ set_input_radix_1 (int from_tty, unsigned radix)
     }
 }
 
+/* The 'set output-radix' command writes to this auxiliary variable.
+   If the requested radix is valid, OUTPUT_RADIX is updated,
+   otherwise, it is left unchanged.  */
+
+static unsigned output_radix_1 = 10;
+
 static void
 set_output_radix (char *args, int from_tty, struct cmd_list_element *c)
 {
-  set_output_radix_1 (from_tty, output_radix);
+  set_output_radix_1 (from_tty, output_radix_1);
 }
 
 static void
@@ -1417,12 +1428,11 @@ set_output_radix_1 (int from_tty, unsigned radix)
       user_print_options.output_format = 'o';  /* octal */
       break;
     default:
-      /* FIXME: cagney/2002-03-17: This needs to revert the bad radix
-         value.  */
+      output_radix_1 = output_radix;
       error (_("Unsupported output radix ``decimal %u''; output radix unchanged."),
             radix);
     }
-  output_radix = radix;
+  output_radix_1 = output_radix = radix;
   if (from_tty)
     {
       printf_filtered (_("Output radix now set to decimal %u, hex %x, octal %o.\n"),
@@ -1566,14 +1576,16 @@ Show printing of addresses."), NULL,
                           show_addressprint,
                           &setprintlist, &showprintlist);
 
-  add_setshow_uinteger_cmd ("input-radix", class_support, &input_radix, _("\
+  add_setshow_uinteger_cmd ("input-radix", class_support, &input_radix_1,
+                           _("\
 Set default input radix for entering numbers."), _("\
 Show default input radix for entering numbers."), NULL,
                            set_input_radix,
                            show_input_radix,
                            &setlist, &showlist);
 
-  add_setshow_uinteger_cmd ("output-radix", class_support, &output_radix, _("\
+  add_setshow_uinteger_cmd ("output-radix", class_support, &output_radix_1,
+                           _("\
 Set default output radix for printing of values."), _("\
 Show default output radix for printing of values."), NULL,
                            set_output_radix,