X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fcli%2Fcli-setshow.c;h=d8ec10025c1814250fbc517fa8ce9a5b7b9d3faa;hb=f870a310ee7fbfd6ccaea95d632063cbdbd2b9c9;hp=8f84345a0b078867323b6810987627d1ab148b67;hpb=335cca0d6ecc363f7fd22244823deb8e2a657088;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/cli/cli-setshow.c b/gdb/cli/cli-setshow.c index 8f84345a0b..d8ec10025c 100644 --- a/gdb/cli/cli-setshow.c +++ b/gdb/cli/cli-setshow.c @@ -1,10 +1,11 @@ /* Handle set and show GDB commands. - Copyright 2000, 2001, 2002, 2003 Free Software Foundation, Inc. + Copyright (c) 2000, 2001, 2002, 2003, 2007, 2008, 2009, 2010 + 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 2 of the License, or + 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, @@ -13,15 +14,14 @@ 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, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ + along with this program. If not, see . */ #include "defs.h" #include "readline/tilde.h" #include "value.h" #include #include "gdb_string.h" +#include "arch-utils.h" #include "ui-out.h" @@ -56,7 +56,7 @@ parse_auto_binary_operation (const char *arg) || (strncmp (arg, "-1", length) == 0 && length > 1)) return AUTO_BOOLEAN_AUTO; } - error ("\"on\", \"off\" or \"auto\" expected."); + error (_("\"on\", \"off\" or \"auto\" expected.")); return AUTO_BOOLEAN_AUTO; /* pacify GCC */ } @@ -85,11 +85,37 @@ parse_binary_operation (char *arg) return 0; else { - error ("\"on\" or \"off\" expected."); + error (_("\"on\" or \"off\" expected.")); return 0; } } +void +deprecated_show_value_hack (struct ui_file *ignore_file, + int ignore_from_tty, + struct cmd_list_element *c, + const char *value) +{ + /* If there's no command or value, don't try to print it out. */ + if (c == NULL || value == NULL) + return; + /* Print doc minus "show" at start. */ + print_doc_line (gdb_stdout, c->doc + 5); + switch (c->var_type) + { + case var_string: + case var_string_noescape: + case var_optional_filename: + case var_filename: + case var_enum: + printf_filtered ((" is \"%s\".\n"), value); + break; + default: + printf_filtered ((" is %s.\n"), value); + break; + } +} + /* Do a "set" or "show" command. ARG is NULL if no argument, or the text of the argument, and FROM_TTY is nonzero if this command is being entered directly by the user (i.e. these are just like any other @@ -127,7 +153,7 @@ do_setshow_command (char *arg, int from_tty, struct cmd_list_element *c) right before a newline. */ if (*p == 0) break; - ch = parse_escape (&p); + ch = parse_escape (get_current_arch (), &p); if (ch == 0) break; /* C loses */ else if (ch > 0) @@ -152,13 +178,27 @@ do_setshow_command (char *arg, int from_tty, struct cmd_list_element *c) arg = ""; if (*(char **) c->var != NULL) xfree (*(char **) c->var); - *(char **) c->var = savestring (arg, strlen (arg)); + *(char **) c->var = xstrdup (arg); + break; + case var_optional_filename: + if (arg == NULL) + arg = ""; + if (*(char **) c->var != NULL) + xfree (*(char **) c->var); + *(char **) c->var = xstrdup (arg); break; case var_filename: if (arg == NULL) - error_no_arg ("filename to set it to."); + error_no_arg (_("filename to set it to.")); if (*(char **) c->var != NULL) xfree (*(char **) c->var); + { + /* Clear trailing whitespace of filename. */ + char *ptr = arg + strlen (arg) - 1; + while (ptr >= arg && (*ptr == ' ' || *ptr == '\t')) + ptr--; + *(ptr + 1) = '\0'; + } *(char **) c->var = tilde_expand (arg); break; case var_boolean: @@ -169,7 +209,7 @@ do_setshow_command (char *arg, int from_tty, struct cmd_list_element *c) break; case var_uinteger: if (arg == NULL) - error_no_arg ("integer to set it to."); + error_no_arg (_("integer to set it to.")); *(unsigned int *) c->var = parse_and_eval_long (arg); if (*(unsigned int *) c->var == 0) *(unsigned int *) c->var = UINT_MAX; @@ -178,21 +218,26 @@ do_setshow_command (char *arg, int from_tty, struct cmd_list_element *c) { unsigned int val; if (arg == NULL) - error_no_arg ("integer to set it to."); + error_no_arg (_("integer to set it to.")); val = parse_and_eval_long (arg); if (val == 0) *(int *) c->var = INT_MAX; else if (val >= INT_MAX) - error ("integer %u out of range", val); + error (_("integer %u out of range"), val); else *(int *) c->var = val; break; } case var_zinteger: if (arg == NULL) - error_no_arg ("integer to set it to."); + 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; @@ -204,16 +249,22 @@ do_setshow_command (char *arg, int from_tty, struct cmd_list_element *c) /* if no argument was supplied, print an informative error message */ if (arg == NULL) { - char msg[1024]; - strcpy (msg, "Requires an argument. Valid arguments are "); + char *msg; + int msg_len = 0; + for (i = 0; c->enums[i]; i++) + msg_len += strlen (c->enums[i]) + 2; + + msg = xmalloc (msg_len); + *msg = '\0'; + make_cleanup (xfree, msg); + for (i = 0; c->enums[i]; i++) { if (i != 0) strcat (msg, ", "); strcat (msg, c->enums[i]); } - strcat (msg, "."); - error ("%s", msg); + error (_("Requires an argument. Valid arguments are %s."), msg); } p = strchr (arg, ' '); @@ -241,23 +292,22 @@ do_setshow_command (char *arg, int from_tty, struct cmd_list_element *c) } if (nmatches <= 0) - error ("Undefined item: \"%s\".", arg); + error (_("Undefined item: \"%s\"."), arg); if (nmatches > 1) - error ("Ambiguous item \"%s\".", arg); + error (_("Ambiguous item \"%s\"."), arg); *(const char **) c->var = match; } break; default: - error ("gdb internal error: bad var_type in do_setshow_command"); + error (_("gdb internal error: bad var_type in do_setshow_command")); } } else if (c->type == show_cmd) { struct cleanup *old_chain; struct ui_stream *stb; - int quote; stb = ui_out_stream_new (uiout); old_chain = make_cleanup_ui_out_stream_delete (stb); @@ -266,24 +316,18 @@ do_setshow_command (char *arg, int from_tty, struct cmd_list_element *c) if (c->pre_show_hook) (c->pre_show_hook) (c); - quote = 0; switch (c->var_type) { case var_string: - { - unsigned char *p; - - if (*(unsigned char **) c->var) - fputstr_filtered (*(unsigned char **) c->var, '"', stb->stream); - quote = 1; - } + if (*(char **) c->var) + fputstr_filtered (*(char **) c->var, '"', stb->stream); break; case var_string_noescape: + case var_optional_filename: case var_filename: case var_enum: if (*(char **) c->var) fputs_filtered (*(char **) c->var, stb->stream); - quote = 1; break; case var_boolean: fputs_filtered (*(int *) c->var ? "on" : "off", stb->stream); @@ -302,7 +346,7 @@ do_setshow_command (char *arg, int from_tty, struct cmd_list_element *c) break; default: internal_error (__FILE__, __LINE__, - "do_setshow_command: invalid var_auto_boolean"); + _("do_setshow_command: invalid var_auto_boolean")); break; } break; @@ -313,6 +357,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; @@ -326,7 +371,7 @@ do_setshow_command (char *arg, int from_tty, struct cmd_list_element *c) break; default: - error ("gdb internal error: bad var_type in do_setshow_command"); + error (_("gdb internal error: bad var_type in do_setshow_command")); } @@ -337,33 +382,19 @@ do_setshow_command (char *arg, int from_tty, struct cmd_list_element *c) if (ui_out_is_mi_like_p (uiout)) ui_out_field_stream (uiout, "value", stb); - else if (c->fprint_setshow != NULL) - { - long length; - char *value = ui_file_xstrdup (stb->stream, &length); - make_cleanup (xfree, value); - c->fprint_setshow (c, gdb_stdout, value); - fprintf_filtered (gdb_stdout, "\n"); - } else { - /* Print doc minus "show" at start. */ - print_doc_line (gdb_stdout, c->doc + 5); - - ui_out_text (uiout, " is "); - ui_out_wrap_hint (uiout, " "); - if (quote) - ui_out_text (uiout, "\""); - ui_out_field_stream (uiout, "value", stb); - if (quote) - ui_out_text (uiout, "\""); - ui_out_text (uiout, ".\n"); - do_cleanups (old_chain); + char *value = ui_file_xstrdup (stb->stream, NULL); + make_cleanup (xfree, value); + if (c->show_value_func != NULL) + c->show_value_func (gdb_stdout, from_tty, c, value); + else + deprecated_show_value_hack (gdb_stdout, from_tty, c, value); } do_cleanups (old_chain); } else - error ("gdb internal error: bad cmd_type in do_setshow_command"); + error (_("gdb internal error: bad cmd_type in do_setshow_command")); c->func (c, NULL, from_tty); if (c->type == set_cmd && deprecated_set_hook) deprecated_set_hook (c); @@ -392,14 +423,17 @@ cmd_show_list (struct cmd_list_element *list, int from_tty, char *prefix) /* Close the tuple. */ do_cleanups (optionlist_chain); } - if (list->type == show_cmd) + else { struct cleanup *option_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "option"); ui_out_text (uiout, prefix); ui_out_field_string (uiout, "name", list->name); ui_out_text (uiout, ": "); - do_setshow_command ((char *) NULL, from_tty, list); + if (list->type == show_cmd) + do_setshow_command ((char *) NULL, from_tty, list); + else + cmd_func (list, NULL, from_tty); /* Close the tuple. */ do_cleanups (option_chain); }