diff options
Diffstat (limited to 'xpcom')
-rw-r--r-- | xpcom/glue/nsTArray-inl.h | 26 | ||||
-rw-r--r-- | xpcom/io/SpecialSystemDirectory.cpp | 4 |
2 files changed, 23 insertions, 7 deletions
diff --git a/xpcom/glue/nsTArray-inl.h b/xpcom/glue/nsTArray-inl.h index 7e667a327..6fdfdcb7c 100644 --- a/xpcom/glue/nsTArray-inl.h +++ b/xpcom/glue/nsTArray-inl.h @@ -249,12 +249,28 @@ nsTArray_base<Alloc, Copy>::ShrinkCapacity(size_type aElemSize, return; } - size_type size = sizeof(Header) + length * aElemSize; - void* ptr = nsTArrayFallibleAllocator::Realloc(mHdr, size); - if (!ptr) { - return; + size_type newSize = sizeof(Header) + length * aElemSize; + + Header* newHeader; + if (!Copy::allowRealloc) { + // Malloc() and copy + newHeader = static_cast<Header*>(nsTArrayFallibleAllocator::Malloc(newSize)); + if (!newHeader) { + return; + } + + Copy::MoveNonOverlappingRegionWithHeader(newHeader, mHdr, Length(), aElemSize); + + nsTArrayFallibleAllocator::Free(mHdr); + } else { + // Realloc() existing data + newHeader = static_cast<Header*>(nsTArrayFallibleAllocator::Realloc(mHdr, newSize)); + if (!newHeader) { + return; + } } - mHdr = static_cast<Header*>(ptr); + + mHdr = newHeader; mHdr->mCapacity = length; } diff --git a/xpcom/io/SpecialSystemDirectory.cpp b/xpcom/io/SpecialSystemDirectory.cpp index c174b4ac7..1c020c426 100644 --- a/xpcom/io/SpecialSystemDirectory.cpp +++ b/xpcom/io/SpecialSystemDirectory.cpp @@ -76,9 +76,9 @@ GetWindowsFolder(int aFolder, nsIFile** aFile) { WCHAR path_orig[MAX_PATH + 3]; WCHAR* path = path_orig + 1; - HRESULT result = SHGetSpecialFolderPathW(nullptr, path, aFolder, true); + BOOL result = SHGetSpecialFolderPathW(nullptr, path, aFolder, true); - if (!SUCCEEDED(result)) { + if (!result) { return NS_ERROR_FAILURE; } |