X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2FMoof%2FPacket.cc;h=8cd45b53baff4e71a9e5ac5a4e3381ebb59972b4;hp=62da00b17f98141d307573232c2d23ca07444fa8;hb=e434d5eee9eaf196a5f4bb8c6118b6be3b84a421;hpb=1a9061caa8fe73b4b34a37fe467e145bba7bd2f5 diff --git a/src/Moof/Packet.cc b/src/Moof/Packet.cc index 62da00b..8cd45b5 100644 --- a/src/Moof/Packet.cc +++ b/src/Moof/Packet.cc @@ -15,6 +15,7 @@ #if HAVE_BYTESWAP_H #include #endif +#include #if HAVE_ARPA_INET_H #include @@ -95,6 +96,8 @@ namespace Mf { Packet::Packet(size_t size) : + mBuffer((char*)malloc(size)), + mSize(size), mR(0), mW(0), mBoolR(0), @@ -102,21 +105,25 @@ Packet::Packet(size_t size) : mBoolNumR(0), mBoolNumW(0) { - mBuffer = boost::shared_array(new char[size]); - mSize = size; } Packet::Packet(const char* data, size_t size) : + mBuffer((char*)malloc(size)), + mSize(size), mR(0), + mW(size), mBoolR(0), mBoolW(0), mBoolNumR(0), mBoolNumW(0) { - mBuffer = boost::shared_array(new char[size]); - mSize = size; - mW = size; - memcpy(mBuffer.get(), data, mSize); + memcpy(mBuffer, data, size); +} + + +Packet::~Packet() +{ + free(mBuffer); } @@ -207,6 +214,19 @@ Packet& Packet::operator<<(double value) size_t Packet::write(const void* bytes, size_t size) { size_t nBytes = std::min(size, mSize - mW); + if (!mBuffer || nBytes < size) + { + int nPages = 1 + size / PAGE_SIZE; + int newSize = mSize + nPages * PAGE_SIZE; + char* newBuffer = (char*)realloc(mBuffer, newSize); + if (newBuffer) + { + mBuffer = newBuffer; + mSize = newSize; + nBytes = size; + } + if (!mBuffer) return 0; + } memcpy(&mBuffer[mW], bytes, nBytes); mW += nBytes; return nBytes;