[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [libvirt] [PATCH] rpc: remove trailing carriage return character in error string



On 07/18/2012 04:15 AM, Guannan Ren wrote:
> If the error message string ends with '\r\n', it is not enough
> to remove '\n' only which leads to messed string.
> Example, after three time incorrect password input, virsh command
> virsh -c qemu://remoteserver/system will report error like:
> 
> : Connection reset by peerey,gssapi-keyex,gssapi-with-mic,password).
> 
> it should be:
> Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
> : Connection reset by peer
> 
> The terminal interprets '\r' as "move the cursor back to the start
> of the current line", so we have to remove the character if it exists.
> ---
>  src/rpc/virnetsocket.c |    8 +++++++-
>  1 files changed, 7 insertions(+), 1 deletions(-)

Looks okay, but...

> 
> diff --git a/src/rpc/virnetsocket.c b/src/rpc/virnetsocket.c
> index 08dfbb0..8385d88 100644
> --- a/src/rpc/virnetsocket.c
> +++ b/src/rpc/virnetsocket.c
> @@ -985,8 +985,14 @@ reread:
>          virFileReadLimFD(sock->errfd, 1024, &errout) >= 0 &&
>          errout != NULL) {
>          size_t elen = strlen(errout);
> -        if (elen && errout[elen-1] == '\n')
> +        if (elen && errout[elen-1] == '\n') {
>              errout[elen-1] = '\0';
> +
> +            /* remove trailing '\r' if it exists */
> +            if (elen-1 && errout[elen-2] == '\r') {
> +                errout[elen-2] = '\0';
> +            }
> +        }

Rather than special-casing just '\r\n' and '\n', should we instead:

while (elen && c_isspace(errout[elen - 1]))
    errout[--elen] = '\0';

to trim ALL trailing whitespace?

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

Attachment: signature.asc
Description: OpenPGP digital signature


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]