19#include "readline/tilde.h"
47 if (arg != NULL && *arg !=
'\0')
49 int length = strlen (arg);
51 while (isspace (arg[length - 1]) && length > 0)
56 if ((length == 2 && strncmp (arg,
"on", length) == 0)
57 || strncmp (arg,
"1", length) == 0
58 || strncmp (arg,
"yes", length) == 0
59 || strncmp (arg,
"enable", length) == 0)
61 else if ((length >= 2 && strncmp (arg,
"off", length) == 0)
62 || strncmp (arg,
"0", length) == 0
63 || strncmp (arg,
"no", length) == 0
64 || strncmp (arg,
"disable", length) == 0)
66 else if (strncmp (arg,
"auto", length) == 0
67 || (length > 1 && strncmp (arg,
"-1", length) == 0))
70 error (_(
"\"on\", \"off\" or \"auto\" expected."));
79 const char *p = skip_to_space (*arg);
80 size_t length = p - *arg;
84 if ((length == 2 && strncmp (*arg,
"on", length) == 0)
85 || strncmp (*arg,
"1", length) == 0
86 || strncmp (*arg,
"yes", length) == 0
87 || strncmp (*arg,
"enable", length) == 0)
89 *arg = skip_spaces (*arg + length);
92 else if ((length >= 2 && strncmp (*arg,
"off", length) == 0)
93 || strncmp (*arg,
"0", length) == 0
94 || strncmp (*arg,
"no", length) == 0
95 || strncmp (*arg,
"disable", length) == 0)
97 *arg = skip_spaces (*arg + length);
113 if (b >= 0 && *arg !=
'\0')
127 if (c == NULL ||
value == NULL)
134 gdb_assert (c->
var.has_value ());
136 switch (c->
var->type ())
157 *arg = skip_spaces (*arg);
159 const char *unl_start = *arg;
161 const char *p = skip_to_space (*arg);
163 size_t len = p - *arg;
165 if (len > 0 && strncmp (
"unlimited", *arg, len) == 0)
175 const char *after = skip_spaces (*arg);
177 error (_(
"Junk after \"%.*s\": %s"),
178 (
int) len, unl_start, after);
195 if (*arg ==
nullptr || **arg ==
'\0')
198 error_no_arg (_(
"integer to set it to, or \"unlimited\""));
218 error (_(
"integer %s out of range"), plongest (val));
230 if (*arg ==
nullptr || **arg ==
'\0')
231 error_no_arg (_(
"integer to set it to, or \"unlimited\""));
241 error (_(
"integer %s out of range"), plongest (val));
243 error (_(
"only -1 is allowed to set as unlimited"));
255 if (args == NULL || *args == NULL || **args ==
'\0')
259 for (
size_t i = 0; enums[i]; i++)
265 error (_(
"Requires an argument. Valid arguments are %s."),
269 const char *p = skip_to_space (*args);
270 size_t len = p - *args;
273 const char *match = NULL;
274 for (
size_t i = 0; enums[i]; i++)
275 if (strncmp (*args, enums[i], len) == 0)
277 if (enums[i][len] ==
'\0')
291 error (_(
"Undefined item: \"%.*s\"."), (
int) len, *args);
294 error (_(
"Ambiguous item \"%.*s\"."), (
int) len, *args);
309 bool option_changed =
false;
316 gdb_assert (c->
var.has_value ());
318 switch (c->
var->type ())
327 newobj = (
char *)
xmalloc (strlen (arg) + 2);
330 while ((ch = *p++) !=
'\000')
353 if (*(p - 1) !=
'\\')
357 newobj = (
char *)
xrealloc (newobj, q - newobj);
359 option_changed = c->
var->set<std::string> (std::string (newobj));
364 option_changed = c->
var->set<std::string> (std::string (arg));
377 const char *ptr = arg + strlen (arg) - 1;
379 while (ptr >= arg && (*ptr ==
' ' || *ptr ==
'\t'))
381 gdb::unique_xmalloc_ptr<char> copy
382 = make_unique_xstrndup (arg, ptr + 1 - arg);
384 val = tilde_expand (copy.get ());
390 = c->
var->set<std::string> (std::string (val));
399 error (_(
"\"on\" or \"off\" expected."));
401 option_changed = c->
var->set<
bool> (val);
421 error_no_arg (_(
"integer to set it to, or \"unlimited\""));
439 error (_(
"integer %s out of range"), plongest (val));
441 option_changed = c->
var->set<
int> (val);
446 const char *end_arg = arg;
449 int len = end_arg - arg;
450 const char *after = skip_spaces (end_arg);
452 error (_(
"Junk after item \"%.*s\": %s"), len, arg, after);
454 option_changed = c->
var->set<
const char *> (match);
458 option_changed = c->
var->set<
int>
462 error (_(
"gdb internal error: bad var_type in do_setshow_command"));
465 c->
func (NULL, from_tty, c);
481 for (i = 0, p = c; p != NULL; i++)
483 length += strlen (p->
name);
492 for (i = 0, p = c; p != NULL; i++)
510 for (i--; i >= 0; i--)
512 memcpy (cp, cmds[i]->
name, strlen (cmds[i]->
name));
513 cp += strlen (cmds[i]->
name);
525 switch (c->
var->type ())
532 (
name, c->
var->get<std::string> ().c_str ());
536 (
name, c->
var->get<
const char *> ());
540 const char *opt = c->
var->get<
bool> () ?
"on" :
"off";
558 xsnprintf (s,
sizeof s,
"%u", c->
var->get<
unsigned int> ());
568 xsnprintf (s,
sizeof s,
"%d", c->
var->get<
int> ());
588 std::string
value =
var.get<std::string> ();
596 stb.
puts (
var.get<std::string> ().c_str ());
600 const char *
value =
var.get<
const char *> ();
601 if (
value !=
nullptr)
606 stb.
puts (
var.get<
bool> () ?
"on" :
"off");
621 gdb_assert_not_reached (
"invalid var_auto_boolean");
628 const unsigned int value =
var.get<
unsigned int> ();
632 stb.
puts (
"unlimited");
644 stb.
puts (
"unlimited");
653 stb.
puts (
"unlimited");
659 gdb_assert_not_reached (
"bad var_type");
677 gdb_assert (c->
var.has_value ());
694 c->
func (NULL, from_tty, c);
705 for (; list != NULL; list = list->
next)
715 const char *new_prefix = strstr (prefixname.c_str (),
"show ") + 5;
725 if (list->
prefix !=
nullptr)
730 : strstr (prefixname.c_str (),
"show ") + 5);
731 uiout->
text (prefixname);
void * xrealloc(void *ptr, size_t size)
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 is_unlimited_literal(const char **arg, bool expression)
int parse_cli_var_zuinteger_unlimited(const char **arg, bool expression)
void do_set_command(const char *arg, int from_tty, struct cmd_list_element *c)
unsigned int parse_cli_var_uinteger(var_types var_type, const char **arg, bool expression)
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)
show_value_ftype deprecated_show_value_hack
@ var_zuinteger_unlimited
LONGEST parse_and_eval_long(const char *exp)
observable< const char *, const char * > command_param_changed
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,...)