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);
}