static void* ensureCapacity(void* data, size_t nmemb, size_t size)
{
    SharedBuffer* buf;
    size_t currentSize;

    if (data != NULL) {
        buf = SharedBuffer::bufferFromData(data);
        currentSize = buf->size();
    } else {
        buf = NULL;
        currentSize = 0;
    }

    size_t minSize = nmemb * size;
    if (minSize > currentSize) {
        unsigned int requestSize = roundUpPower2(minSize);
        if (buf == NULL) {
            buf = SharedBuffer::alloc(requestSize);
        } else {
            buf = buf->editResize(requestSize);
        }
        memset((unsigned char*)buf->data()+currentSize, 0, requestSize - currentSize);
    }

    return buf->data();
}