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@xxxxxxxxxx +1-919-301-3266 Libvirt virtualization library http://libvirt.org
Attachment:
signature.asc
Description: OpenPGP digital signature
-- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list