mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2026-08-18 02:58:57 +08:00
fix(finsh): reset line state on overflow
RT-Thread BSP Static Build Check / 🔍 Summary of Git Diff Changes (push) Has been cancelled
RT-Thread BSP Static Build Check / ${{ matrix.legs.RTT_BSP }} (push) Has been cancelled
RT-Thread BSP Static Build Check / collect-artifacts (push) Has been cancelled
pkgs_test / change (push) Has been cancelled
utest_auto_run / A9 :components/dfs.cfg (push) Has been cancelled
utest_auto_run / A9 :components/lwip.cfg (push) Has been cancelled
utest_auto_run / A9 :components/netdev.cfg (push) Has been cancelled
utest_auto_run / A9 :components/sal.cfg (push) Has been cancelled
utest_auto_run / A9 :cpp11/cpp11.cfg (push) Has been cancelled
utest_auto_run / AARCH64-rtsmart :default.cfg (push) Has been cancelled
utest_auto_run / A9-rtsmart :default.cfg (push) Has been cancelled
utest_auto_run / RISCV-rtsmart :default.cfg (push) Has been cancelled
utest_auto_run / XUANTIE-rtsmart :default.cfg (push) Has been cancelled
utest_auto_run / AARCH64 :default.cfg (push) Has been cancelled
utest_auto_run / AARCH64-smp :default.cfg (push) Has been cancelled
utest_auto_run / A9 :default.cfg (push) Has been cancelled
utest_auto_run / A9-smp :default.cfg (push) Has been cancelled
utest_auto_run / RISCV :default.cfg (push) Has been cancelled
utest_auto_run / RISCV-smp :default.cfg (push) Has been cancelled
utest_auto_run / A9 :kernel/atomic_c11.cfg (push) Has been cancelled
utest_auto_run / RISCV :kernel/atomic_c11.cfg (push) Has been cancelled
utest_auto_run / A9-rtsmart :kernel/ipc.cfg (push) Has been cancelled
utest_auto_run / RISCV-rtsmart :kernel/ipc.cfg (push) Has been cancelled
utest_auto_run / XUANTIE-rtsmart :kernel/ipc.cfg (push) Has been cancelled
utest_auto_run / A9 :kernel/ipc.cfg (push) Has been cancelled
utest_auto_run / A9-smp :kernel/ipc.cfg (push) Has been cancelled
utest_auto_run / RISCV :kernel/ipc.cfg (push) Has been cancelled
utest_auto_run / A9-rtsmart :kernel/kernel_basic.cfg (push) Has been cancelled
utest_auto_run / RISCV-rtsmart :kernel/kernel_basic.cfg (push) Has been cancelled
utest_auto_run / XUANTIE-rtsmart :kernel/kernel_basic.cfg (push) Has been cancelled
utest_auto_run / A9 :kernel/kernel_basic.cfg (push) Has been cancelled
utest_auto_run / A9-smp :kernel/kernel_basic.cfg (push) Has been cancelled
utest_auto_run / RISCV :kernel/kernel_basic.cfg (push) Has been cancelled
utest_auto_run / AARCH64-rtsmart :kernel/mem.cfg (push) Has been cancelled
utest_auto_run / A9-rtsmart :kernel/mem.cfg (push) Has been cancelled
utest_auto_run / RISCV-rtsmart :kernel/mem.cfg (push) Has been cancelled
utest_auto_run / XUANTIE-rtsmart :kernel/mem.cfg (push) Has been cancelled
utest_auto_run / AARCH64 :kernel/mem.cfg (push) Has been cancelled
utest_auto_run / AARCH64-smp :kernel/mem.cfg (push) Has been cancelled
utest_auto_run / A9 :kernel/mem.cfg (push) Has been cancelled
utest_auto_run / A9-smp :kernel/mem.cfg (push) Has been cancelled
utest_auto_run / RISCV :kernel/mem.cfg (push) Has been cancelled
utest_auto_run / RISCV-smp :kernel/mem.cfg (push) Has been cancelled
ToolsCI / Tools (push) Has been cancelled
doc_doxygen / doxygen_doc generate (push) Has been cancelled
doc_doxygen / deploy (push) Has been cancelled
RT-Thread BSP Static Build Check / 🔍 Summary of Git Diff Changes (push) Has been cancelled
RT-Thread BSP Static Build Check / ${{ matrix.legs.RTT_BSP }} (push) Has been cancelled
RT-Thread BSP Static Build Check / collect-artifacts (push) Has been cancelled
pkgs_test / change (push) Has been cancelled
utest_auto_run / A9 :components/dfs.cfg (push) Has been cancelled
utest_auto_run / A9 :components/lwip.cfg (push) Has been cancelled
utest_auto_run / A9 :components/netdev.cfg (push) Has been cancelled
utest_auto_run / A9 :components/sal.cfg (push) Has been cancelled
utest_auto_run / A9 :cpp11/cpp11.cfg (push) Has been cancelled
utest_auto_run / AARCH64-rtsmart :default.cfg (push) Has been cancelled
utest_auto_run / A9-rtsmart :default.cfg (push) Has been cancelled
utest_auto_run / RISCV-rtsmart :default.cfg (push) Has been cancelled
utest_auto_run / XUANTIE-rtsmart :default.cfg (push) Has been cancelled
utest_auto_run / AARCH64 :default.cfg (push) Has been cancelled
utest_auto_run / AARCH64-smp :default.cfg (push) Has been cancelled
utest_auto_run / A9 :default.cfg (push) Has been cancelled
utest_auto_run / A9-smp :default.cfg (push) Has been cancelled
utest_auto_run / RISCV :default.cfg (push) Has been cancelled
utest_auto_run / RISCV-smp :default.cfg (push) Has been cancelled
utest_auto_run / A9 :kernel/atomic_c11.cfg (push) Has been cancelled
utest_auto_run / RISCV :kernel/atomic_c11.cfg (push) Has been cancelled
utest_auto_run / A9-rtsmart :kernel/ipc.cfg (push) Has been cancelled
utest_auto_run / RISCV-rtsmart :kernel/ipc.cfg (push) Has been cancelled
utest_auto_run / XUANTIE-rtsmart :kernel/ipc.cfg (push) Has been cancelled
utest_auto_run / A9 :kernel/ipc.cfg (push) Has been cancelled
utest_auto_run / A9-smp :kernel/ipc.cfg (push) Has been cancelled
utest_auto_run / RISCV :kernel/ipc.cfg (push) Has been cancelled
utest_auto_run / A9-rtsmart :kernel/kernel_basic.cfg (push) Has been cancelled
utest_auto_run / RISCV-rtsmart :kernel/kernel_basic.cfg (push) Has been cancelled
utest_auto_run / XUANTIE-rtsmart :kernel/kernel_basic.cfg (push) Has been cancelled
utest_auto_run / A9 :kernel/kernel_basic.cfg (push) Has been cancelled
utest_auto_run / A9-smp :kernel/kernel_basic.cfg (push) Has been cancelled
utest_auto_run / RISCV :kernel/kernel_basic.cfg (push) Has been cancelled
utest_auto_run / AARCH64-rtsmart :kernel/mem.cfg (push) Has been cancelled
utest_auto_run / A9-rtsmart :kernel/mem.cfg (push) Has been cancelled
utest_auto_run / RISCV-rtsmart :kernel/mem.cfg (push) Has been cancelled
utest_auto_run / XUANTIE-rtsmart :kernel/mem.cfg (push) Has been cancelled
utest_auto_run / AARCH64 :kernel/mem.cfg (push) Has been cancelled
utest_auto_run / AARCH64-smp :kernel/mem.cfg (push) Has been cancelled
utest_auto_run / A9 :kernel/mem.cfg (push) Has been cancelled
utest_auto_run / A9-smp :kernel/mem.cfg (push) Has been cancelled
utest_auto_run / RISCV :kernel/mem.cfg (push) Has been cancelled
utest_auto_run / RISCV-smp :kernel/mem.cfg (push) Has been cancelled
ToolsCI / Tools (push) Has been cancelled
doc_doxygen / doxygen_doc generate (push) Has been cancelled
doc_doxygen / deploy (push) Has been cancelled
This commit is contained in:
@@ -457,6 +457,38 @@ static void shell_push_history(struct finsh_shell *shell)
|
||||
}
|
||||
#endif
|
||||
|
||||
static void finsh_shell_reset_line(struct finsh_shell *shell)
|
||||
{
|
||||
rt_memset(shell->line, 0, sizeof(shell->line));
|
||||
shell->line_position = 0;
|
||||
shell->line_curpos = 0;
|
||||
}
|
||||
|
||||
static rt_bool_t finsh_shell_check_line(struct finsh_shell *shell)
|
||||
{
|
||||
if ((shell->line_position > FINSH_CMD_SIZE) ||
|
||||
(shell->line_curpos > shell->line_position))
|
||||
{
|
||||
finsh_shell_reset_line(shell);
|
||||
|
||||
return RT_FALSE;
|
||||
}
|
||||
|
||||
shell->line[FINSH_CMD_SIZE] = '\0';
|
||||
|
||||
return RT_TRUE;
|
||||
}
|
||||
|
||||
static void finsh_shell_update_line_length(struct finsh_shell *shell)
|
||||
{
|
||||
rt_size_t length;
|
||||
|
||||
shell->line[FINSH_CMD_SIZE] = '\0';
|
||||
length = rt_strnlen(shell->line, FINSH_CMD_SIZE);
|
||||
shell->line[length] = '\0';
|
||||
shell->line_curpos = shell->line_position = (rt_uint16_t)length;
|
||||
}
|
||||
|
||||
#if defined(FINSH_USING_WORD_OPERATION)
|
||||
static int find_prev_word_start(const char *line, int curpos)
|
||||
{
|
||||
@@ -683,6 +715,12 @@ static void finsh_thread_entry(void *parameter)
|
||||
#if defined(FINSH_USING_FUNC_EXT)
|
||||
else if (ch >= 0x31 && ch <= 0x34) /* home(0x31), insert(0x32), del(0x33), end(0x34) */
|
||||
{
|
||||
if (shell->line_position >= FINSH_CMD_SIZE)
|
||||
{
|
||||
finsh_shell_reset_line(shell);
|
||||
continue;
|
||||
}
|
||||
|
||||
shell->stat = WAIT_EXT_KEY;
|
||||
shell->line[shell->line_position + 1] = ch; /* store the key code */
|
||||
continue;
|
||||
@@ -714,7 +752,8 @@ static void finsh_thread_entry(void *parameter)
|
||||
else if (key_code == 0x33) /* del key */
|
||||
{
|
||||
/* delete character at current cursor position */
|
||||
if (shell->line_curpos < shell->line_position)
|
||||
if (finsh_shell_check_line(shell) &&
|
||||
(shell->line_curpos < shell->line_position))
|
||||
{
|
||||
int i;
|
||||
shell->line_position--;
|
||||
@@ -745,6 +784,9 @@ static void finsh_thread_entry(void *parameter)
|
||||
#endif /*defined(FINSH_USING_FUNC_EXT) */
|
||||
}
|
||||
|
||||
if (!finsh_shell_check_line(shell))
|
||||
continue;
|
||||
|
||||
/* received null or error */
|
||||
if (ch == '\0' || ch == 0xFF) continue;
|
||||
/* handle tab key */
|
||||
@@ -758,7 +800,7 @@ static void finsh_thread_entry(void *parameter)
|
||||
/* auto complete */
|
||||
shell_auto_complete(&shell->line[0]);
|
||||
/* re-calculate position */
|
||||
shell->line_curpos = shell->line_position = (rt_uint16_t)rt_strlen(shell->line);
|
||||
finsh_shell_update_line_length(shell);
|
||||
|
||||
continue;
|
||||
}
|
||||
@@ -843,14 +885,16 @@ static void finsh_thread_entry(void *parameter)
|
||||
msh_exec(shell->line, shell->line_position);
|
||||
|
||||
rt_kprintf("%s", FINSH_PROMPT);
|
||||
rt_memset(shell->line, 0, sizeof(shell->line));
|
||||
shell->line_curpos = shell->line_position = 0;
|
||||
finsh_shell_reset_line(shell);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* it's a large line, discard it */
|
||||
if (shell->line_position >= FINSH_CMD_SIZE)
|
||||
shell->line_position = 0;
|
||||
{
|
||||
finsh_shell_reset_line(shell);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* normal character */
|
||||
if (shell->line_curpos < shell->line_position)
|
||||
@@ -899,8 +943,7 @@ static void finsh_thread_entry(void *parameter)
|
||||
if (shell->line_position >= FINSH_CMD_SIZE)
|
||||
{
|
||||
/* clear command line */
|
||||
shell->line_position = 0;
|
||||
shell->line_curpos = 0;
|
||||
finsh_shell_reset_line(shell);
|
||||
}
|
||||
} /* end of device read */
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user