ash,hush: history builtin
No binary (build failed)
—
(log yok)
| @@ -1436,7 +1436,7 @@ void read_key_ungets(char *buffer, const char *str, unsigned len) FAST_FUNC; | |
| /* It's NOT just ENABLEd or disabled. It's a number: */ | |
| # if defined CONFIG_FEATURE_EDITING_HISTORY && CONFIG_FEATURE_EDITING_HISTORY > 0 | |
| # define MAX_HISTORY (CONFIG_FEATURE_EDITING_HISTORY + 0) | |
| - | unsigned size_from_HISTFILESIZE(const char *hp); |
| + | unsigned size_from_HISTFILESIZE(const char *hp) FAST_FUNC; |
| # else | |
| # define MAX_HISTORY 0 | |
| # endif | |
| @@ -1478,6 +1478,7 @@ line_input_t *new_line_input_t(int flags) FAST_FUNC; | |
| * >0 length of input string, including terminating '\n' | |
| */ | |
| int read_line_input(line_input_t *st, const char *prompt, char *command, int maxsize, int timeout) FAST_FUNC; | |
| + | void show_history(const line_input_t *st) FAST_FUNC; |
| # if ENABLE_FEATURE_EDITING_SAVE_ON_EXIT | |
| void save_history(line_input_t *st); | |
| # endif | |
| @@ -1254,7 +1254,7 @@ line_input_t* FAST_FUNC new_line_input_t(int flags) | |
| #if MAX_HISTORY > 0 | |
| - | unsigned size_from_HISTFILESIZE(const char *hp) |
| + | unsigned FAST_FUNC size_from_HISTFILESIZE(const char *hp) |
| { | |
| int size = MAX_HISTORY; | |
| if (hp) { | |
| @@ -1309,6 +1309,17 @@ static int get_next_history(void) | |
| return 0; | |
| } | |
| + | /* Lists command history. Used by shell 'history' builtins */ |
| + | void FAST_FUNC show_history(const line_input_t *st) |
| + | { |
| + | int i; |
| + | |
| + | if (!st) |
| + | return; |
| + | for (i = 0; i < st->cnt_history; i++) |
| + | printf("%4d %s\n", i, st->history[i]); |
| + | } |
| + | |
| # if ENABLE_FEATURE_EDITING_SAVEHISTORY | |
| /* We try to ensure that concurrent additions to the history | |
| * do not overwrite each other. | |
| @@ -2749,8 +2760,9 @@ int FAST_FUNC read_line_input(line_input_t *st, const char *prompt, char *comman | |
| free(command_ps); | |
| #endif | |
| - | if (command_len > 0) |
| + | if (command_len > 0) { |
| remember_in_history(command); | |
| + | } |
| if (break_out > 0) { | |
| command[command_len++] = '\n'; | |
| @@ -9033,6 +9033,9 @@ static int getoptscmd(int, char **) FAST_FUNC; | |
| #if !ENABLE_FEATURE_SH_EXTRA_QUIET | |
| static int helpcmd(int, char **) FAST_FUNC; | |
| #endif | |
| + | #if MAX_HISTORY |
| + | static int historycmd(int, char **) FAST_FUNC; |
| + | #endif |
| #if ENABLE_SH_MATH_SUPPORT | |
| static int letcmd(int, char **) FAST_FUNC; | |
| #endif | |
| @@ -9106,6 +9109,9 @@ static const struct builtincmd builtintab[] = { | |
| #if !ENABLE_FEATURE_SH_EXTRA_QUIET | |
| { BUILTIN_NOSPEC "help" , helpcmd }, | |
| #endif | |
| + | #if MAX_HISTORY |
| + | { BUILTIN_NOSPEC "history" , historycmd }, |
| + | #endif |
| #if JOBS | |
| { BUILTIN_REGULAR "jobs" , jobscmd }, | |
| { BUILTIN_REGULAR "kill" , killcmd }, | |
| @@ -12621,6 +12627,15 @@ helpcmd(int argc UNUSED_PARAM, char **argv UNUSED_PARAM) | |
| } | |
| #endif /* FEATURE_SH_EXTRA_QUIET */ | |
| + | #if MAX_HISTORY |
| + | static int FAST_FUNC |
| + | historycmd(int argc UNUSED_PARAM, char **argv UNUSED_PARAM) |
| + | { |
| + | show_history(line_input_state); |
| + | return EXIT_SUCCESS; |
| + | } |
| + | #endif |
| + | |
| /* | |
| * The export and readonly commands. | |
| */ | |
| @@ -850,6 +850,9 @@ static int builtin_jobs(char **argv) FAST_FUNC; | |
| #if ENABLE_HUSH_HELP | |
| static int builtin_help(char **argv) FAST_FUNC; | |
| #endif | |
| + | #if MAX_HISTORY |
| + | static int builtin_history(char **argv) FAST_FUNC; |
| + | #endif |
| #if ENABLE_HUSH_LOCAL | |
| static int builtin_local(char **argv) FAST_FUNC; | |
| #endif | |
| @@ -919,6 +922,9 @@ static const struct built_in_command bltins1[] = { | |
| #if ENABLE_HUSH_HELP | |
| BLTIN("help" , builtin_help , NULL), | |
| #endif | |
| + | #if MAX_HISTORY |
| + | BLTIN("history" , builtin_history , "Show command history"), |
| + | #endif |
| #if ENABLE_HUSH_JOB | |
| BLTIN("jobs" , builtin_jobs , "List jobs"), | |
| #endif | |
| @@ -8627,6 +8633,14 @@ static int FAST_FUNC builtin_help(char **argv UNUSED_PARAM) | |
| } | |
| #endif | |
| + | #if MAX_HISTORY |
| + | static int FAST_FUNC builtin_history(char **argv UNUSED_PARAM) |
| + | { |
| + | show_history(G.line_input_state); |
| + | return EXIT_SUCCESS; |
| + | } |
| + | #endif |
| + | |
| #if ENABLE_HUSH_JOB | |
| static int FAST_FUNC builtin_jobs(char **argv UNUSED_PARAM) | |
| { | |