19#include "readline/tilde.h"
48 if (arg != NULL && *arg !=
'\0')
50 int length = strlen (arg);
52 while (isspace (arg[length - 1]) && length > 0)
57 if ((length == 2 && strncmp (arg,
"on", length) == 0)
58 || strncmp (arg,
"1", length) == 0
59 || strncmp (arg,
"yes", length) == 0
60 || strncmp (arg,
"enable", length) == 0)
62 else if ((length >= 2 && strncmp (arg,
"off", length) == 0)
63 || strncmp (arg,
"0", length) == 0
64 || strncmp (arg,
"no", length) == 0
65 || strncmp (arg,
"disable", length) == 0)
67 else if (strncmp (arg,
"auto", length) == 0
68 || (length > 1 && strncmp (arg,
"-1", length) == 0))
71 error (_(
"\"on\", \"off\" or \"auto\" expected."));
80 const char *p = skip_to_space (*arg);
81 size_t length = p - *arg;
85 if ((length == 2 && strncmp (*arg,
"on", length) == 0)
86 || strncmp (*arg,
"1", length) == 0
87 || strncmp (*arg,
"yes", length) == 0
88 || strncmp (*arg,
"enable", length) == 0)
90 *arg = skip_spaces (*arg + length);
93 else if ((length >= 2 && strncmp (*arg,
"off", length) == 0)
94 || strncmp (*arg,
"0", length) == 0
95 || strncmp (*arg,
"no", length) == 0
96 || strncmp (*arg,
"disable", length) == 0)
98 *arg = skip_spaces (*arg + length);
114 if (b >= 0 && *arg !=
'\0')
128 if (c == NULL ||
value == NULL)
135 gdb_assert (c->
var.has_value ());
137 switch (c->
var->type ())
159 *arg = skip_spaces (*arg);
161 const char *unl_start = *arg;
163 const char *p = skip_to_space (*arg);
165 size_t len = p - *arg;
171 if (strncmp (l->literal, *arg, len) == 0)
181 const char *after = skip_spaces (*arg);
183 error (_(
"Junk after \"%.*s\": %s"),
184 (
int) len, unl_start, after);
202 if (*arg ==
nullptr || **arg ==
'\0')
208 std::string buffer =
"";
217 buffer = buffer +
'"' + l->literal +
'"';
221 (string_printf (_(
"integer to set it to, or one of: %s"),
222 buffer.c_str ()).c_str ());
225 (string_printf (_(
"integer to set it to, or %s"),
226 buffer.c_str ()).c_str ());
237 enum tribool allowed = TRIBOOL_UNKNOWN;
243 if (l->val.has_value () && val == *l->val)
245 allowed = TRIBOOL_TRUE;
249 else if (val == l->use)
250 allowed = TRIBOOL_FALSE;
253 if (allowed == TRIBOOL_UNKNOWN)
255 if (val > UINT_MAX || val < INT_MIN
260 allowed = TRIBOOL_FALSE;
262 if (allowed == TRIBOOL_FALSE)
263 error (_(
"integer %s out of range"), plongest (val));
276 if (args == NULL || *args == NULL || **args ==
'\0')
280 for (
size_t i = 0; enums[i]; i++)
286 error (_(
"Requires an argument. Valid arguments are %s."),
290 const char *p = skip_to_space (*args);
291 size_t len = p - *args;
294 const char *match = NULL;
295 for (
size_t i = 0; enums[i]; i++)
296 if (strncmp (*args, enums[i], len) == 0)
298 if (enums[i][len] ==
'\0')
312 error (_(
"Undefined item: \"%.*s\"."), (
int) len, *args);
315 error (_(
"Ambiguous item \"%.*s\"."), (
int) len, *args);
330 bool option_changed =
false;
337 gdb_assert (c->
var.has_value ());
339 switch (c->
var->type ())
347 newobj.reserve (strlen (arg));
349 while ((ch = *p++) !=
'\000')
366 newobj.push_back (ch);
369 newobj.push_back (ch);
371 newobj.shrink_to_fit ();
373 option_changed = c->
var->set<std::string> (std::move (newobj));
377 option_changed = c->
var->set<std::string> (std::string (arg));
390 const char *ptr = arg + strlen (arg) - 1;
392 while (ptr >= arg && (*ptr ==
' ' || *ptr ==
'\t'))
394 gdb::unique_xmalloc_ptr<char> copy
395 = make_unique_xstrndup (arg, ptr + 1 - arg);
397 val = tilde_expand (copy.get ());
403 = c->
var->set<std::string> (std::string (val));
412 error (_(
"\"on\" or \"off\" expected."));
414 option_changed = c->
var->set<
bool> (val);
431 c->
var->extra_literals (),
436 const char *end_arg = arg;
439 int len = end_arg - arg;
440 const char *after = skip_spaces (end_arg);
442 error (_(
"Junk after item \"%.*s\": %s"), len, arg, after);
444 option_changed = c->
var->set<
const char *> (match);
448 error (_(
"gdb internal error: bad var_type in do_setshow_command"));
451 c->
func (NULL, from_tty, c);
467 for (i = 0, p = c; p != NULL; i++)
469 length += strlen (p->
name);
478 for (i = 0, p = c; p != NULL; i++)
496 for (i--; i >= 0; i--)
498 memcpy (cp, cmds[i]->
name, strlen (cmds[i]->
name));
499 cp += strlen (cmds[i]->
name);
511 switch (c->
var->type ())
518 (
name, c->
var->get<std::string> ().c_str ());
522 (
name, c->
var->get<
const char *> ());
526 const char *opt = c->
var->get<
bool> () ?
"on" :
"off";
543 xsnprintf (s,
sizeof s,
"%u", c->
var->get<
unsigned int> ());
552 xsnprintf (s,
sizeof s,
"%d", c->
var->get<
int> ());
572 std::string
value =
var.get<std::string> ();
580 stb.
puts (
var.get<std::string> ().c_str ());
584 const char *
value =
var.get<
const char *> ();
585 if (
value !=
nullptr)
590 stb.
puts (
var.get<
bool> () ?
"on" :
"off");
605 gdb_assert_not_reached (
"invalid var_auto_boolean");
613 bool printed =
false;
616 ?
static_cast<LONGEST
> (
var.get<
unsigned int> ())
617 :
static_cast<LONGEST
> (
var.get<
int> ()));
619 if (
var.extra_literals () !=
nullptr)
625 stb.
puts (l->literal);
632 stb.
printf (
"%u",
static_cast<unsigned int> (
value));
639 gdb_assert_not_reached (
"bad var_type");
657 gdb_assert (c->
var.has_value ());
674 c->
func (NULL, from_tty, c);
685 for (; list != NULL; list = list->
next)
695 const char *new_prefix = strstr (prefixname.c_str (),
"show ") + 5;
705 if (list->
prefix !=
nullptr)
710 : strstr (prefixname.c_str (),
"show ") + 5);
711 uiout->
text (prefixname);
struct gdbarch * get_current_arch(void)
virtual void puts(const char *str)
void void putstr(const char *str, int quoter)
void printf(const char *,...) ATTRIBUTE_PRINTF(2
void field_string(const char *fldname, const char *string, const ui_file_style &style=ui_file_style())
void text(const char *string)
bool is_mi_like_p() const
void error_no_arg(const char *why)
struct cmd_list_element * setlist
void cmd_func(struct cmd_list_element *cmd, const char *args, int from_tty)
const char *const auto_boolean_enums[]
void print_doc_line(struct ui_file *stream, const char *str, bool for_value_prefix)
static bool notify_command_param_changed_p(bool param_changed, struct cmd_list_element *c)
void do_show_command(const char *arg, int from_tty, struct cmd_list_element *c)
static bool get_literal_val(LONGEST &val, const literal_def *extra_literals, const char **arg, bool expression)
LONGEST parse_cli_var_integer(var_types var_type, const literal_def *extra_literals, const char **arg, bool expression)
void do_set_command(const char *arg, int from_tty, struct cmd_list_element *c)
static void deprecated_show_value_hack(struct ui_file *ignore_file, int ignore_from_tty, struct cmd_list_element *c, const char *value)
std::string get_setshow_command_value_string(const setting &var)
void cmd_show_list(struct cmd_list_element *list, int from_tty)
const char * parse_cli_var_enum(const char **args, const char *const *enums)
int parse_cli_boolean_value(const char **arg)
static enum auto_boolean parse_auto_binary_operation(const char *arg)
ULONGEST get_ulongest(const char **pp, int trailer)
LONGEST parse_and_eval_long(const char *exp)
void interps_notify_param_changed(const char *param, const char *value)
const literal_def * extra_literals
gdb::optional< setting > var
std::string prefixname() const
struct cmd_list_element ** subcommands
struct cmd_list_element * prefix
__extension__ enum cmd_types type
struct cmd_list_element * next
const char *const * enums
show_value_ftype * show_value_func
enum command_class theclass
int parse_escape(struct gdbarch *gdbarch, const char **string_ptr)
void gdb_printf(struct ui_file *stream, const char *format,...)