
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