diff options
Diffstat (limited to 'gdb/top.c')
-rw-r--r-- | gdb/top.c | 51 |
1 files changed, 21 insertions, 30 deletions
@@ -687,8 +687,8 @@ show_write_history_p (struct ui_file *file, int from_tty, } /* The variable associated with the "set/show history size" - command. */ -static unsigned int history_size_setshow_var; + command. The value -1 means unlimited, and -2 means undefined. */ +static int history_size_setshow_var = -2; static void show_history_size (struct ui_file *file, int from_tty, @@ -1610,34 +1610,26 @@ show_commands (char *args, int from_tty) } } -/* Called by do_setshow_command. */ -static void -set_history_size_command (char *args, int from_tty, struct cmd_list_element *c) -{ - /* Readline's history interface works with 'int', so it can only - handle history sizes up to INT_MAX. The command itself is - uinteger, so UINT_MAX means "unlimited", but we only get that if - the user does "set history size 0" -- "set history size <UINT_MAX>" - throws out-of-range. */ - if (history_size_setshow_var > INT_MAX - && history_size_setshow_var != UINT_MAX) - { - unsigned int new_value = history_size_setshow_var; +/* Update the size of our command history file to HISTORY_SIZE. - /* Restore previous value before throwing. */ - if (history_is_stifled ()) - history_size_setshow_var = history_max_entries; - else - history_size_setshow_var = UINT_MAX; + A HISTORY_SIZE of -1 stands for unlimited. */ - error (_("integer %u out of range"), new_value); - } +static void +set_readline_history_size (int history_size) +{ + gdb_assert (history_size >= -1); - /* Commit the new value to readline's history. */ - if (history_size_setshow_var == UINT_MAX) + if (history_size == -1) unstifle_history (); else - stifle_history (history_size_setshow_var); + stifle_history (history_size); +} + +/* Called by do_setshow_command. */ +static void +set_history_size_command (char *args, int from_tty, struct cmd_list_element *c) +{ + set_readline_history_size (history_size_setshow_var); } void @@ -1705,12 +1697,10 @@ init_history (void) history_size_setshow_var = var; } /* If the init file hasn't set a size yet, pick the default. */ - else if (history_size_setshow_var == 0) + else if (history_size_setshow_var == -2) history_size_setshow_var = 256; - /* Note that unlike "set history size 0", "HISTSIZE=0" really sets - the history size to 0... */ - stifle_history (history_size_setshow_var); + set_readline_history_size (history_size_setshow_var); tmpenv = getenv ("GDBHISTFILE"); if (tmpenv) @@ -1859,7 +1849,8 @@ Without an argument, saving is enabled."), show_write_history_p, &sethistlist, &showhistlist); - add_setshow_uinteger_cmd ("size", no_class, &history_size_setshow_var, _("\ + add_setshow_zuinteger_unlimited_cmd ("size", no_class, + &history_size_setshow_var, _("\ Set the size of the command history,"), _("\ Show the size of the command history,"), _("\ ie. the number of previous commands to keep a record of.\n\ |