|
@@ -372,26 +372,35 @@ static void shell_push_history(struct finsh_shell *shell)
|
|
|
/* push history */
|
|
|
if (shell->history_count >= FINSH_HISTORY_LINES)
|
|
|
{
|
|
|
- /* move history */
|
|
|
- int index;
|
|
|
- for (index = 0; index < FINSH_HISTORY_LINES - 1; index ++)
|
|
|
+ /* if current cmd is same as last cmd, don't push */
|
|
|
+ if (memcmp(&shell->cmd_history[FINSH_HISTORY_LINES - 1], shell->line, shell->line_position))
|
|
|
{
|
|
|
- memcpy(&shell->cmd_history[index][0],
|
|
|
- &shell->cmd_history[index + 1][0], FINSH_CMD_SIZE);
|
|
|
- }
|
|
|
- memset(&shell->cmd_history[index][0], 0, FINSH_CMD_SIZE);
|
|
|
- memcpy(&shell->cmd_history[index][0], shell->line, shell->line_position);
|
|
|
+ /* move history */
|
|
|
+ int index;
|
|
|
+ for (index = 0; index < FINSH_HISTORY_LINES - 1; index ++)
|
|
|
+ {
|
|
|
+ memcpy(&shell->cmd_history[index][0],
|
|
|
+ &shell->cmd_history[index + 1][0], FINSH_CMD_SIZE);
|
|
|
+ }
|
|
|
+ memset(&shell->cmd_history[index][0], 0, FINSH_CMD_SIZE);
|
|
|
+ memcpy(&shell->cmd_history[index][0], shell->line, shell->line_position);
|
|
|
|
|
|
- /* it's the maximum history */
|
|
|
- shell->history_count = FINSH_HISTORY_LINES;
|
|
|
+ /* it's the maximum history */
|
|
|
+ shell->history_count = FINSH_HISTORY_LINES;
|
|
|
+ }
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- memset(&shell->cmd_history[shell->history_count][0], 0, FINSH_CMD_SIZE);
|
|
|
- memcpy(&shell->cmd_history[shell->history_count][0], shell->line, shell->line_position);
|
|
|
+ /* if current cmd is same as last cmd, don't push */
|
|
|
+ if (shell->history_count == 0 || memcmp(&shell->cmd_history[shell->history_count - 1], shell->line, shell->line_position))
|
|
|
+ {
|
|
|
+ shell->current_history = shell->history_count;
|
|
|
+ memset(&shell->cmd_history[shell->history_count][0], 0, FINSH_CMD_SIZE);
|
|
|
+ memcpy(&shell->cmd_history[shell->history_count][0], shell->line, shell->line_position);
|
|
|
|
|
|
- /* increase count and set current history position */
|
|
|
- shell->history_count ++;
|
|
|
+ /* increase count and set current history position */
|
|
|
+ shell->history_count ++;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
shell->current_history = shell->history_count;
|