diff --git a/src/SocketRecvBuffer.cc b/src/SocketRecvBuffer.cc index 690e660d3..beb163c50 100644 --- a/src/SocketRecvBuffer.cc +++ b/src/SocketRecvBuffer.cc @@ -39,28 +39,27 @@ #include "SocketCore.h" #include "LogFactory.h" +#include "a2functional.h" namespace aria2 { SocketRecvBuffer::SocketRecvBuffer -(const std::shared_ptr& socket, +(std::shared_ptr socket, size_t capacity) - : socket_(socket), + : socket_(std::move(socket)), capacity_(capacity), - buf_(new unsigned char[capacity_]), + buf_(make_unique(capacity_)), bufLen_(0) {} SocketRecvBuffer::~SocketRecvBuffer() -{ - delete [] buf_; -} +{} ssize_t SocketRecvBuffer::recv() { - size_t len = capacity_-bufLen_; + size_t len = capacity_ - bufLen_; if(len > 0) { - socket_->readData(buf_+bufLen_, len); + socket_->readData(buf_.get() + bufLen_, len); bufLen_ += len; } else { A2_LOG_DEBUG("Buffer full"); @@ -71,7 +70,7 @@ ssize_t SocketRecvBuffer::recv() void SocketRecvBuffer::shiftBuffer(size_t offset) { assert(offset <= bufLen_); - memmove(buf_, buf_+offset, bufLen_-offset); + memmove(buf_.get(), buf_.get() + offset, bufLen_ - offset); bufLen_ -= offset; } diff --git a/src/SocketRecvBuffer.h b/src/SocketRecvBuffer.h index 29c8e0ddf..00d04bb78 100644 --- a/src/SocketRecvBuffer.h +++ b/src/SocketRecvBuffer.h @@ -46,7 +46,7 @@ class SocketCore; class SocketRecvBuffer { public: SocketRecvBuffer - (const std::shared_ptr& socket, + (std::shared_ptr socket, size_t capacity = 16*1024); ~SocketRecvBuffer(); // Reads data from socket as much as capacity allows. Returns the @@ -68,7 +68,7 @@ public: const unsigned char* getBuffer() const { - return buf_; + return buf_.get(); } size_t getBufferLength() const @@ -85,7 +85,7 @@ public: private: std::shared_ptr socket_; size_t capacity_; - unsigned char* buf_; + std::unique_ptr buf_; size_t bufLen_; };