From 66bf1a7f2d0d46281ebf3d62caab6b9158eaa8a0 Mon Sep 17 00:00:00 2001 From: Benoit Foucher Date: Wed, 23 Jan 2013 14:36:10 +0100 Subject: Fix for ICE-4841 - added no copy option when creating input stream --- cpp/src/Ice/Buffer.cpp | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'cpp/src/Ice/Buffer.cpp') diff --git a/cpp/src/Ice/Buffer.cpp b/cpp/src/Ice/Buffer.cpp index bed4c088b92..ec1fdf6730a 100644 --- a/cpp/src/Ice/Buffer.cpp +++ b/cpp/src/Ice/Buffer.cpp @@ -30,14 +30,28 @@ IceInternal::Buffer::Container::Container(size_type maxCapacity) : { } +IceInternal::Buffer::Container::Container(const_iterator beg, const_iterator end) : + _buf(const_cast(beg)), + _size(end - beg), + _capacity(0), + _maxCapacity(0), + _shrinkCounter(0) +{ +} + IceInternal::Buffer::Container::~Container() { - ::free(_buf); + if(_buf && _capacity > 0) + { + ::free(_buf); + } } void IceInternal::Buffer::Container::swap(Container& other) { + assert(!_buf || _capacity > 0); + std::swap(_buf, other._buf); std::swap(_size, other._size); @@ -48,6 +62,8 @@ IceInternal::Buffer::Container::swap(Container& other) void IceInternal::Buffer::Container::clear() { + assert(!_buf || _capacity > 0); + free(_buf); _buf = 0; _size = 0; @@ -57,6 +73,8 @@ IceInternal::Buffer::Container::clear() void IceInternal::Buffer::Container::reserve(size_type n) { + assert(!_buf || _capacity > 0); + size_type c = _capacity; if(n > _capacity) { -- cgit v1.2.3