[PATCH] shell: Fixing bug in line editing of the shell with CTRL-U.
Gedare Bloom
gedare at rtems.org
Fri Sep 25 15:05:46 UTC 2020
On Fri, Sep 25, 2020 at 3:11 AM Frank Kuehndel
<frank.kuehndel at embedded-brains.de> wrote:
>
> This patch fixes a tiny bug in the command line editing of the RTEMS shell. Typing CTRL-U in the shell should remove all characters left of the cursor. After pressing CTRL-U, the current implementation does wrongly place the cursor at the end of the line instead at its beginning.
>
>
> To reproduce the bug, start the shell and type 'abc123' (no <RETURN>):
>
> > ~/src/rtems $ qemu-system-arm -net none -nographic -M realview-pbx-a9 -m 256M -kernel build/arm/realview_pbx_a9_qemu/testsuites/libtests/dl10.exe
> >
> >
> > *** BEGIN OF TEST libdl (RTL) 10 ***
> > *** TEST VERSION: 6.0.0.d9bdf166644f612dd628fe4951c12c6f8e94ba5f
> > *** TEST STATE: USER_INPUT
> > *** TEST BUILD: RTEMS_DEBUG RTEMS_NETWORKING RTEMS_POSIX_API RTEMS_SMP
> > *** TEST TOOLS: 10.2.1 20200904 (RTEMS 6, RSB 31f936a7b74d60bda609a9960c6e1a705ba54974, Newlib a0d7982)
> > RTL (libdl) commands: dl, rtl
> >
> >
> > RTEMS Shell on /dev/foobar. Use 'help' to list commands.
> > SHLL [/] # abc123
>
> Then move the cursor onto the '1' by hitting three times the <ARROW-LEFT> key. Next type <CTRL>-U:
>
> > SHLL [/] # 123
>
> Note that the cursor is at the end of the line (after '3') instead of correctly at the beginning (on the '1'), now.
>
> Continuing typing 'echo ' incorrectly results in the output:
>
> > SHLL [/] # 123echo 123
>
> The patch changes this behavior so that the cursor in the second last step will be on the '1' and typing 'echo ' will then correctly reflected as:
>
> > SHLL [/] # echo 123
>
Please put the above bug details into a ticket
https://devel.rtems.org/wiki/NewTicket with a milestone of 6
And then use the commit message to briefly describe the fix and with
"Closes #nnnn." to close the ticket.
> ---
> cpukit/libmisc/shell/shell.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/cpukit/libmisc/shell/shell.c b/cpukit/libmisc/shell/shell.c
> index 13ae411f9c..ee65c1be36 100644
> --- a/cpukit/libmisc/shell/shell.c
> +++ b/cpukit/libmisc/shell/shell.c
> @@ -621,11 +621,14 @@ static int rtems_shell_line_editor(
> if (col > 0)
> {
> int clen = strlen (line);
> + int bs;
>
> strcpy (line, line + col);
> if (output) {
> fprintf(out,"\r%s%*c", prompt, clen, ' ');
> fprintf(out,"\r%s%s", prompt, line);
> + for (bs = 0; bs < strlen (line); bs++)
Do not put a space between a function name and its parentheses.
strlen(line) or strlen( line ) are both acceptable in this code.
Although, it looks like the surrounding code violates this rule.
Use explicitly {
> + fputc('\b', out);
and }
for one-line blocks.
> }
> col = 0;
> }
> --
> 2.26.2
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel
More information about the devel
mailing list