From cb126a0c196a14734194c983452f702f16c9c929 Mon Sep 17 00:00:00 2001 From: Mark Slee Date: Wed, 31 Jan 2007 08:31:29 +0000 Subject: [PATCH] Fix for TBufferedTransport double-buffer-size strings Reviewed By: aditya git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@664961 13f79535-47bb-0310-9956-ffa450edef68 --- lib/cpp/src/transport/TTransportUtils.cpp | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/lib/cpp/src/transport/TTransportUtils.cpp b/lib/cpp/src/transport/TTransportUtils.cpp index 9367eb54..a885020f 100644 --- a/lib/cpp/src/transport/TTransportUtils.cpp +++ b/lib/cpp/src/transport/TTransportUtils.cpp @@ -36,18 +36,19 @@ void TBufferedTransport::write(const uint8_t* buf, uint32_t len) { return; } - if (len + wLen_ >= wBufSize_) { + uint32_t pos = 0; + + while ((len-pos) + wLen_ >= wBufSize_) { uint32_t copy = wBufSize_ - wLen_; - memcpy(wBuf_ + wLen_, buf, copy); + memcpy(wBuf_ + wLen_, buf + pos, copy); transport_->write(wBuf_, wBufSize_); - - wLen_ = len - copy; - if (wLen_ > 0) { - memcpy(wBuf_, buf+copy, wLen_); - } - } else { - memcpy(wBuf_+wLen_, buf, len); - wLen_ += len; + pos += copy; + wLen_ = 0; + } + + if ((len - pos) > 0) { + memcpy(wBuf_ + wLen_, buf + pos, len - pos); + wLen_ += len - pos; } } -- 2.17.1