[vlc-devel] [PATCH] cli: fix line trimming with socket cli
Romain Vimont
rom1v at videolabs.io
Thu Nov 5 14:46:30 CET 2020
Since CR will never be part of a command, accepting both CR/LF and LF
as end of line is more convenient (for telnet or Windows users).
So LGTM.
On Thu, Nov 05, 2020 at 12:01:49PM +0100, Alexandre Janniaux wrote:
> When using cli with --rc-host and --rc-fake-tty to control the cli
> interface remotely, and using telnet to connect to it, \r\n is appended
> at the end of each command. The code was removing the \n but not the \r
> character. This refactor trimming into a function for clarity and uses
> it to clean the beginning (additional spaces) and end (additional spaces
> or line feed / carriage return) of the command.
> ---
> modules/control/cli/cli.c | 28 +++++++++++++++++++++++-----
> 1 file changed, 23 insertions(+), 5 deletions(-)
>
> diff --git a/modules/control/cli/cli.c b/modules/control/cli/cli.c
> index c741e7fcad..2095d9b8e8 100644
> --- a/modules/control/cli/cli.c
> +++ b/modules/control/cli/cli.c
> @@ -287,11 +287,9 @@ static void UnknownCmd(intf_thread_t *intf, const char *const *args,
> (void) count;
> }
>
> -static void Process(intf_thread_t *intf, const char *line)
> +static void Process(intf_thread_t *intf, char *cmd)
> {
> intf_sys_t *sys = intf->p_sys;
> - /* Skip heading spaces */
> - const char *cmd = line + strspn(line, " ");
>
> if (*cmd == '\0')
> return; /* Ignore empty line */
> @@ -349,6 +347,27 @@ error: wordfree(&we);
> #endif
> }
>
> +static char *TrimLine(char *line)
> +{
> + /* Skip heading spaces */
> + line = &line[strspn(line, " ")];
> +
> + size_t length = strlen(line);
> +
> + /* remove trailing CR/LF */
> + while (length > 0)
> + {
> + char c = line[length - 1];
> + if (c != '\r' && c != '\n' && c != ' ')
> + return line;
> +
> + line[length - 1] = '\0';
> + length--;
> + }
> +
> + return line;
> +}
> +
> #ifndef _WIN32
> static void *Run(void *data)
> {
> @@ -386,8 +405,7 @@ static void *Run(void *data)
> if (cmd != NULL)
> {
> int canc = vlc_savecancel();
> - if (cmd[0] != '\0')
> - cmd[strlen(cmd) - 1] = '\0'; /* remove trailing LF */
> + cmd = TrimLine(cmd);
> Process(intf, cmd);
> vlc_restorecancel(canc);
> }
> --
> 2.29.2
>
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel
More information about the vlc-devel
mailing list