Changeset 155121 in webkit


Ignore:
Timestamp:
Sep 5, 2013 8:20:51 AM (11 years ago)
Author:
andersca@apple.com
Message:

Vector::releaseBuffer should return an OwnPtr
https://bugs.webkit.org/show_bug.cgi?id=120718

Reviewed by Andreas Kling.

Source/WebCore:

Change FormStreamFields::currentData to an OwnPtr.

  • platform/network/cf/FormDataStreamCFNet.cpp:

(WebCore::closeCurrentStream):
(WebCore::advanceCurrentStream):
(WebCore::formCreate):

Source/WTF:

Change Vector::releaseBuffer() to return an OwnPtr. I intentionally chose
to use an OwnPtr over a PassOwnPtr since we're trying to move away from PassOwnPtr objects.

Fix fallout from this change by adopting OwnPtr/PassOwnPtr in StringBuffer and the two StringImpl
constructors that adopt the passed in pointer.

  • wtf/Vector.h:
  • wtf/text/StringBuffer.h:
  • wtf/text/StringImpl.h:
Location:
trunk/Source
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WTF/ChangeLog

    r155115 r155121  
     12013-09-04  Anders Carlsson  <andersca@apple.com>
     2
     3        Vector::releaseBuffer should return an OwnPtr
     4        https://bugs.webkit.org/show_bug.cgi?id=120718
     5
     6        Reviewed by Andreas Kling.
     7
     8        Change Vector::releaseBuffer() to return an OwnPtr. I intentionally chose
     9        to use an OwnPtr over a PassOwnPtr since we're trying to move away from PassOwnPtr objects.
     10       
     11        Fix fallout from this change by adopting OwnPtr/PassOwnPtr in StringBuffer and the two StringImpl
     12        constructors that adopt the passed in pointer.
     13
     14        * wtf/Vector.h:
     15        * wtf/text/StringBuffer.h:
     16        * wtf/text/StringImpl.h:
     17
    1182013-09-05  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>
    219
  • trunk/Source/WTF/wtf/Vector.h

    r155106 r155121  
    2727#include <wtf/Noncopyable.h>
    2828#include <wtf/NotFound.h>
     29#include <wtf/OwnPtr.h>
    2930#include <wtf/StdLibExtras.h>
    3031#include <wtf/ValueCheck.h>
     
    308309    size_t capacity() const { return m_capacity; }
    309310
    310     T* releaseBuffer()
     311    OwnPtr<T> releaseBuffer()
    311312    {
    312313        T* buffer = m_buffer;
    313314        m_buffer = 0;
    314315        m_capacity = 0;
    315         return buffer;
     316        return adoptPtr(buffer);
    316317    }
    317318
     
    488489    using Base::capacity;
    489490
    490     T* releaseBuffer()
     491    OwnPtr<T> releaseBuffer()
    491492    {
    492493        if (buffer() == inlineBuffer())
    493             return 0;
     494            return nullptr;
    494495        return Base::releaseBuffer();
    495496    }
     
    540541        if (begin())
    541542            TypeOperations::initialize(begin(), end());
     543    }
     544
     545    Vector(size_t size, const T& val)
     546        : Base(size, size)
     547    {
     548        if (begin())
     549            TypeOperations::uninitializedFill(begin(), end(), val);
    542550    }
    543551
     
    654662    }
    655663
    656     Vector(size_t size, const T& val)
    657         : Base(size, size)
    658     {
    659         if (begin())
    660             TypeOperations::uninitializedFill(begin(), end(), val);
    661     }
    662 
    663664    void fill(const T&, size_t);
    664665    void fill(const T& val) { fill(val, size()); }
     
    666667    template<typename Iterator> void appendRange(Iterator start, Iterator end);
    667668
    668     T* releaseBuffer();
     669    OwnPtr<T> releaseBuffer();
    669670
    670671    void swap(Vector<T, inlineCapacity, OverflowHandler>& other)
     
    11531154
    11541155template<typename T, size_t inlineCapacity, typename OverflowHandler>
    1155 inline T* Vector<T, inlineCapacity, OverflowHandler>::releaseBuffer()
    1156 {
    1157     T* buffer = Base::releaseBuffer();
     1156inline OwnPtr<T> Vector<T, inlineCapacity, OverflowHandler>::releaseBuffer()
     1157{
     1158    OwnPtr<T> buffer = Base::releaseBuffer();
    11581159    if (inlineCapacity && !buffer && m_size) {
    11591160        // If the vector had some data, but no buffer to release,
     
    11611162        // we create a brand new buffer so the caller always gets one.
    11621163        size_t bytes = m_size * sizeof(T);
    1163         buffer = static_cast<T*>(fastMalloc(bytes));
    1164         memcpy(buffer, data(), bytes);
     1164        buffer = adoptPtr(static_cast<T*>(fastMalloc(bytes)));
     1165        memcpy(buffer.get(), data(), bytes);
    11651166    }
    11661167    m_size = 0;
    1167     return buffer;
     1168    return buffer.release();
    11681169}
    11691170
  • trunk/Source/WTF/wtf/text/StringBuffer.h

    r141816 r155121  
    4545        if (m_length > std::numeric_limits<unsigned>::max() / sizeof(CharType))
    4646            CRASH();
    47         m_data = static_cast<CharType*>(fastMalloc(m_length * sizeof(CharType)));
     47        m_data = adoptPtr(static_cast<CharType*>(fastMalloc(m_length * sizeof(CharType))));
    4848    }
    4949
    5050    ~StringBuffer()
    5151    {
    52         fastFree(m_data);
    5352    }
    5453
     
    6463            if (newLength > std::numeric_limits<unsigned>::max() / sizeof(UChar))
    6564                CRASH();
    66             m_data = static_cast<UChar*>(fastRealloc(m_data, newLength * sizeof(UChar)));
     65            m_data = adoptPtr(static_cast<UChar*>(fastRealloc(m_data.release().leakPtr(), newLength * sizeof(UChar))));
    6766        }
    6867        m_length = newLength;
     
    7069
    7170    unsigned length() const { return m_length; }
    72     CharType* characters() { return m_data; }
     71    CharType* characters() { return m_data.get(); }
    7372
    74     CharType& operator[](unsigned i) { ASSERT_WITH_SECURITY_IMPLICATION(i < m_length); return m_data[i]; }
     73    CharType& operator[](unsigned i)
     74    {
     75        ASSERT_WITH_SECURITY_IMPLICATION(i < m_length);
     76        return m_data.get()[i];
     77    }
    7578
    76     CharType* release() { CharType* data = m_data; m_data = 0; return data; }
     79    PassOwnPtr<CharType> release()
     80    {
     81        OwnPtr<CharType> data = m_data.release();
     82        return data.release();
     83    }
    7784
    7885private:
    7986    unsigned m_length;
    80     CharType* m_data;
     87    OwnPtr<CharType> m_data;
    8188};
    8289
  • trunk/Source/WTF/wtf/text/StringImpl.h

    r154145 r155121  
    2929#include <wtf/Forward.h>
    3030#include <wtf/MathExtras.h>
     31#include <wtf/PassOwnPtr.h>
    3132#include <wtf/StdLibExtras.h>
    3233#include <wtf/StringHasher.h>
     
    233234
    234235    // Create a StringImpl adopting ownership of the provided buffer (BufferOwned)
    235     StringImpl(const LChar* characters, unsigned length)
     236    StringImpl(PassOwnPtr<LChar> characters, unsigned length)
    236237        : m_refCount(s_refCountIncrement)
    237238        , m_length(length)
    238         , m_data8(characters)
     239        , m_data8(characters.leakPtr())
    239240        , m_buffer(0)
    240241        , m_hashAndFlags(s_hashFlag8BitBuffer | BufferOwned)
     
    274275
    275276    // Create a StringImpl adopting ownership of the provided buffer (BufferOwned)
    276     StringImpl(const UChar* characters, unsigned length)
     277    StringImpl(PassOwnPtr<UChar> characters, unsigned length)
    277278        : m_refCount(s_refCountIncrement)
    278279        , m_length(length)
    279         , m_data16(characters)
     280        , m_data16(characters.leakPtr())
    280281        , m_buffer(0)
    281282        , m_hashAndFlags(BufferOwned)
     
    473474            if (size > std::numeric_limits<unsigned>::max())
    474475                CRASH();
    475             return adoptRef(new StringImpl(vector.releaseBuffer(), size));
     476            return adoptRef(new StringImpl(vector.releaseBuffer().release(), size));
    476477        }
    477478        return empty();
  • trunk/Source/WebCore/ChangeLog

    r155120 r155121  
     12013-09-04  Anders Carlsson  <andersca@apple.com>
     2
     3        Vector::releaseBuffer should return an OwnPtr
     4        https://bugs.webkit.org/show_bug.cgi?id=120718
     5
     6        Reviewed by Andreas Kling.
     7
     8        Change FormStreamFields::currentData to an OwnPtr.
     9
     10        * platform/network/cf/FormDataStreamCFNet.cpp:
     11        (WebCore::closeCurrentStream):
     12        (WebCore::advanceCurrentStream):
     13        (WebCore::formCreate):
     14
    1152013-09-05  Andreas Kling  <akling@apple.com>
    216
  • trunk/Source/WebCore/platform/network/cf/FormDataStreamCFNet.cpp

    r149255 r155121  
    108108    long long currentStreamRangeLength;
    109109#endif
    110     char* currentData;
     110    OwnPtr<char> currentData;
    111111    CFReadStreamRef formStream;
    112112    unsigned long long streamLength;
     
    125125#endif
    126126    }
    127     if (form->currentData) {
    128         fastFree(form->currentData);
    129         form->currentData = 0;
    130     }
     127
     128    form->currentData = nullptr;
    131129}
    132130
     
    144142    if (nextInput.m_type == FormDataElement::data) {
    145143        size_t size = nextInput.m_data.size();
    146         char* data = nextInput.m_data.releaseBuffer();
    147         form->currentStream = CFReadStreamCreateWithBytesNoCopy(0, reinterpret_cast<const UInt8*>(data), size, kCFAllocatorNull);
    148         form->currentData = data;
     144        OwnPtr<char> data = nextInput.m_data.releaseBuffer();
     145        form->currentStream = CFReadStreamCreateWithBytesNoCopy(0, reinterpret_cast<const UInt8*>(data.get()), size, kCFAllocatorNull);
     146        form->currentData = data.release();
    149147    } else {
    150148#if ENABLE(BLOB)
     
    207205    newInfo->currentStreamRangeLength = BlobDataItem::toEndOfFile;
    208206#endif
    209     newInfo->currentData = 0;
    210207    newInfo->formStream = stream; // Don't retain. That would create a reference cycle.
    211208    newInfo->streamLength = formContext->streamLength;
Note: See TracChangeset for help on using the changeset viewer.