From 1e8fb9762b0d2c468915815f73d2fadb44543be1 Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Fri, 23 Jan 2009 18:47:46 +0000 Subject: [PATCH] 2009-01-23 Pedro Alves * cli/cli-decode.c (add_setshow_zuinteger_cmd): New. * cli/cli-setshow.c (do_setshow_command): Handle it. * command.h (enum var_types): Add var_zuinteger. (add_setshow_zuinteger_cmd): Declare. * valprint.c (_initialize_valprint): Change the set input-radix and set output-radix commands to zuinteger type. 2009-01-23 Pedro Alves * gdb.base/radix.exp: Add tests to ensure that that set input-radix 0 and set output-radix 0 are really rejected. --- gdb/ChangeLog | 10 ++++++++++ gdb/cli/cli-decode.c | 21 +++++++++++++++++++++ gdb/cli/cli-setshow.c | 6 ++++++ gdb/command.h | 14 ++++++++++++++ gdb/testsuite/ChangeLog | 5 +++++ gdb/testsuite/gdb.base/radix.exp | 17 +++++++++++++++-- gdb/valprint.c | 20 ++++++++++---------- 7 files changed, 81 insertions(+), 12 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index d6b611ed486..e85963d6db2 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,13 @@ +2009-01-23 Pedro Alves + + * cli/cli-decode.c (add_setshow_zuinteger_cmd): New. + * cli/cli-setshow.c (do_setshow_command): Handle it. + * command.h (enum var_types): Add var_zuinteger. + (add_setshow_zuinteger_cmd): Declare. + + * valprint.c (_initialize_valprint): Change the set input-radix + and set output-radix commands to zuinteger type. + 2009-01-23 Pedro Alves PR gdb/9664: diff --git a/gdb/cli/cli-decode.c b/gdb/cli/cli-decode.c index d71d516975d..556c0278a84 100644 --- a/gdb/cli/cli-decode.c +++ b/gdb/cli/cli-decode.c @@ -639,6 +639,27 @@ add_setshow_zinteger_cmd (char *name, enum command_class class, NULL, NULL); } +/* Add element named NAME to both the set and show command LISTs (the + list for set/show or some sublist thereof). CLASS is as in + add_cmd. VAR is address of the variable which will contain the + value. SET_DOC and SHOW_DOC are the documentation strings. */ +void +add_setshow_zuinteger_cmd (char *name, enum command_class class, + unsigned int *var, + const char *set_doc, const char *show_doc, + const char *help_doc, + cmd_sfunc_ftype *set_func, + show_value_ftype *show_func, + struct cmd_list_element **set_list, + struct cmd_list_element **show_list) +{ + add_setshow_cmd_full (name, class, var_zuinteger, var, + set_doc, show_doc, help_doc, + set_func, show_func, + set_list, show_list, + NULL, NULL); +} + /* Remove the command named NAME from the command list. Return the list commands which were aliased to the deleted command. If the command had no aliases, return NULL. The various *HOOKs are set to diff --git a/gdb/cli/cli-setshow.c b/gdb/cli/cli-setshow.c index be0581de85f..206a55d8f0b 100644 --- a/gdb/cli/cli-setshow.c +++ b/gdb/cli/cli-setshow.c @@ -232,6 +232,11 @@ do_setshow_command (char *arg, int from_tty, struct cmd_list_element *c) error_no_arg (_("integer to set it to.")); *(int *) c->var = parse_and_eval_long (arg); break; + case var_zuinteger: + if (arg == NULL) + error_no_arg (_("integer to set it to.")); + *(unsigned int *) c->var = parse_and_eval_long (arg); + break; case var_enum: { int i; @@ -351,6 +356,7 @@ do_setshow_command (char *arg, int from_tty, struct cmd_list_element *c) break; } /* else fall through */ + case var_zuinteger: case var_zinteger: fprintf_filtered (stb->stream, "%u", *(unsigned int *) c->var); break; diff --git a/gdb/command.h b/gdb/command.h index 1aeca6bbb30..b3f7013077f 100644 --- a/gdb/command.h +++ b/gdb/command.h @@ -87,6 +87,9 @@ typedef enum var_types /* ZeroableInteger. *VAR is an int. Like Unsigned Integer except that zero really means zero. */ var_zinteger, + /* ZeroableUnsignedInteger. *VAR is an unsigned int. Zero really + means zero. */ + var_zuinteger, /* Enumerated type. Can only have one of the specified values. *VAR is a char pointer to the name of the element that we find. */ var_enum @@ -332,6 +335,17 @@ extern void add_setshow_zinteger_cmd (char *name, struct cmd_list_element **set_list, struct cmd_list_element **show_list); +extern void add_setshow_zuinteger_cmd (char *name, + enum command_class class, + unsigned int *var, + const char *set_doc, + const char *show_doc, + const char *help_doc, + cmd_sfunc_ftype *set_func, + show_value_ftype *show_func, + struct cmd_list_element **set_list, + struct cmd_list_element **show_list); + /* Do a "show" command for each thing on a command list. */ extern void cmd_show_list (struct cmd_list_element *, int, char *); diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 49390752ac9..4e60fa04549 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-01-23 Pedro Alves + + * gdb.base/radix.exp: Add tests to ensure that that set + input-radix 0 and set output-radix 0 are really rejected. + 2009-01-23 Pedro Alves * gdb.base/hook-stop-frame.c, gdb.base/hook-stop-frame.exp: Update diff --git a/gdb/testsuite/gdb.base/radix.exp b/gdb/testsuite/gdb.base/radix.exp index 172e40f1518..750fd234a39 100644 --- a/gdb/testsuite/gdb.base/radix.exp +++ b/gdb/testsuite/gdb.base/radix.exp @@ -162,19 +162,32 @@ gdb_test "set radix" \ "Input and output radices now set to decimal 10, hex a, octal 12\." \ "Reset radices" +gdb_test "set input-radix 0" \ + "Nonsense input radix ``decimal 0''; input radix unchanged\\." \ + "Reject input-radix 0" +gdb_test "show input-radix" \ + "Default input radix for entering numbers is 10\\." \ + "Input radix unchanged after rejecting 0" + 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" + "Input radix unchanged after rejecting 1" +gdb_test "set output-radix 0" \ + "Unsupported output radix ``decimal 0''; output radix unchanged\\." \ + "Reject output-radix 0" +gdb_test "show output-radix" \ + "Default output radix for printing of values is 10\\." \ + "Output radix unchanged after rejecting 0" 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" + "Output radix unchanged after rejecting 1" gdb_test "set radix 7" \ "Unsupported output radix ``decimal 7''; output radix unchanged\\." \ diff --git a/gdb/valprint.c b/gdb/valprint.c index 73d9a99b0d8..b61da54c38a 100644 --- a/gdb/valprint.c +++ b/gdb/valprint.c @@ -1576,21 +1576,21 @@ Show printing of addresses."), NULL, show_addressprint, &setprintlist, &showprintlist); - add_setshow_uinteger_cmd ("input-radix", class_support, &input_radix_1, - _("\ + add_setshow_zuinteger_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); + set_input_radix, + show_input_radix, + &setlist, &showlist); - add_setshow_uinteger_cmd ("output-radix", class_support, &output_radix_1, - _("\ + add_setshow_zuinteger_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, - show_output_radix, - &setlist, &showlist); + set_output_radix, + show_output_radix, + &setlist, &showlist); /* The "set radix" and "show radix" commands are special in that they are like normal set and show commands but allow two normally -- 2.30.2