summaryrefslogtreecommitdiff
path: root/hw/virtio-serial-bus.c
diff options
context:
space:
mode:
authorMichael Tokarev <mjt@tls.msk.ru>2012-03-11 17:52:59 +0400
committerMichael Tokarev <mjt@tls.msk.ru>2012-06-07 20:43:26 +0400
commit45270ad8a86a80cca4c59dfa73d9a9ee0688d781 (patch)
tree9629b9598d8afc49cf215250d12ce8a217fb962d /hw/virtio-serial-bus.c
parent083dbf489d1b0592e910ecfb90b3858c23e49ab7 (diff)
downloadqemu-45270ad8a86a80cca4c59dfa73d9a9ee0688d781.zip
virtio-serial-bus: use correct lengths in control_out() message
Original code has one thing to process (cur_len), requests to convert from iovec to buf another thing (len which is actually max_len), and processes something else (copied). Whole thing is very difficult to understand, even if it does a right thing. The iov_to_buf() conversion in this case will always return cur_len, because it is the length of the iovec it was asked to process, and the size we asked to convert is the same or larger, and iov_to_buf() will stop at reaching either iov or buf. Make the code saner by doing the only sane thing: dropping `copied' which is always the same as `cur_len' but just introduces questions. Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
Diffstat (limited to 'hw/virtio-serial-bus.c')
-rw-r--r--hw/virtio-serial-bus.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/hw/virtio-serial-bus.c b/hw/virtio-serial-bus.c
index 72287d10ce..1e477e5a33 100644
--- a/hw/virtio-serial-bus.c
+++ b/hw/virtio-serial-bus.c
@@ -454,7 +454,7 @@ static void control_out(VirtIODevice *vdev, VirtQueue *vq)
len = 0;
buf = NULL;
while (virtqueue_pop(vq, &elem)) {
- size_t cur_len, copied;
+ size_t cur_len;
cur_len = iov_size(elem.out_sg, elem.out_num);
/*
@@ -467,9 +467,9 @@ static void control_out(VirtIODevice *vdev, VirtQueue *vq)
buf = g_malloc(cur_len);
len = cur_len;
}
- copied = iov_to_buf(elem.out_sg, elem.out_num, buf, 0, len);
+ iov_to_buf(elem.out_sg, elem.out_num, buf, 0, cur_len);
- handle_control_message(vser, buf, copied);
+ handle_control_message(vser, buf, cur_len);
virtqueue_push(vq, &elem, 0);
}
g_free(buf);