/* Handle set and show GDB commands.
- Copyright (c) 2000, 2001, 2002, 2003, 2007, 2008
+ Copyright (c) 2000, 2001, 2002, 2003, 2007, 2008, 2009, 2010, 2011
Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
#include "value.h"
#include <ctype.h>
#include "gdb_string.h"
+#include "arch-utils.h"
#include "ui-out.h"
#include "cli/cli-cmds.h"
#include "cli/cli-setshow.h"
-/* Prototypes for local functions */
+/* Prototypes for local functions. */
static int parse_binary_operation (char *);
if (arg != NULL && *arg != '\0')
{
int length = strlen (arg);
+
while (isspace (arg[length - 1]) && length > 0)
length--;
if (strncmp (arg, "on", length) == 0
return AUTO_BOOLEAN_AUTO;
}
error (_("\"on\", \"off\" or \"auto\" expected."));
- return AUTO_BOOLEAN_AUTO; /* pacify GCC */
+ return AUTO_BOOLEAN_AUTO; /* Pacify GCC. */
}
static int
}
}
-/* 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
- command). C is the command list element for the command. */
+/* 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 command). C is the command list element for the command. */
void
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)
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 = savestring (arg, strlen (arg));
+ *(char **) c->var = xstrdup (arg);
break;
case var_filename:
if (arg == NULL)
{
/* Clear trailing whitespace of filename. */
char *ptr = arg + strlen (arg) - 1;
+
while (ptr >= arg && (*ptr == ' ' || *ptr == '\t'))
ptr--;
*(ptr + 1) = '\0';
case var_integer:
{
unsigned int val;
+
if (arg == NULL)
error_no_arg (_("integer to set it to."));
val = parse_and_eval_long (arg);
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;
const char *match = NULL;
char *p;
- /* if no argument was supplied, print an informative error message */
+ /* If no argument was supplied, print an informative error
+ message. */
if (arg == NULL)
{
char *msg;
int msg_len = 0;
+
for (i = 0; c->enums[i]; i++)
msg_len += strlen (c->enums[i]) + 2;
strcat (msg, ", ");
strcat (msg, c->enums[i]);
}
- error (_("Requires an argument. Valid arguments are %s."), msg);
+ error (_("Requires an argument. Valid arguments are %s."),
+ msg);
}
p = strchr (arg, ' ');
{
match = c->enums[i];
nmatches = 1;
- break; /* exact match. */
+ break; /* Exact match. */
}
else
{
break;
}
/* else fall through */
+ case var_zuinteger:
case var_zinteger:
fprintf_filtered (stb->stream, "%u", *(unsigned int *) c->var);
break;
ui_out_field_stream (uiout, "value", stb);
else
{
- long length;
- char *value = ui_file_xstrdup (stb->stream, &length);
+ 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);
struct cleanup *optionlist_chain
= make_cleanup_ui_out_tuple_begin_end (uiout, "optionlist");
char *new_prefix = strstr (list->prefixname, "show ") + 5;
+
if (ui_out_is_mi_like_p (uiout))
ui_out_field_string (uiout, "prefix", new_prefix);
cmd_show_list (*list->prefixlist, from_tty, new_prefix);
{
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, ": ");