summaryrefslogtreecommitdiff
path: root/Source/WTF/wtf/Compression.cpp
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WTF/wtf/Compression.cpp
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/WTF/wtf/Compression.cpp')
-rw-r--r--Source/WTF/wtf/Compression.cpp179
1 files changed, 0 insertions, 179 deletions
diff --git a/Source/WTF/wtf/Compression.cpp b/Source/WTF/wtf/Compression.cpp
deleted file mode 100644
index f30924b9c..000000000
--- a/Source/WTF/wtf/Compression.cpp
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Copyright (C) 2013 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "Compression.h"
-
-#include "CheckedArithmetic.h"
-
-#if USE(ZLIB) && !COMPILER(MSVC)
-
-#include <string.h>
-#include <zlib.h>
-
-namespace WTF {
-
-static void* zAlloc(void*, uint32_t count, uint32_t size)
-{
- CheckedSize allocSize = count;
- allocSize *= size;
- if (allocSize.hasOverflowed())
- return Z_NULL;
- void* result = 0;
- if (tryFastMalloc(allocSize.unsafeGet()).getValue(result))
- return result;
- return Z_NULL;
-}
-
-static void zFree(void*, void* data)
-{
- fastFree(data);
-}
-
-PassOwnPtr<GenericCompressedData> GenericCompressedData::create(const uint8_t* data, size_t dataLength)
-{
- enum { MinimumSize = sizeof(GenericCompressedData) * 8 };
-
- if (!data || dataLength < MinimumSize)
- return nullptr;
-
- z_stream stream;
- memset(&stream, 0, sizeof(stream));
- stream.zalloc = zAlloc;
- stream.zfree = zFree;
- stream.data_type = Z_BINARY;
- stream.opaque = Z_NULL;
- stream.avail_in = dataLength;
- stream.next_in = const_cast<uint8_t*>(data);
-
- size_t currentOffset = OBJECT_OFFSETOF(GenericCompressedData, m_data);
- size_t currentCapacity = fastMallocGoodSize(MinimumSize);
- Bytef* compressedData = static_cast<Bytef*>(fastMalloc(currentCapacity));
- memset(compressedData, 0, sizeof(GenericCompressedData));
- stream.next_out = compressedData + currentOffset;
- stream.avail_out = currentCapacity - currentOffset;
-
- deflateInit(&stream, Z_BEST_COMPRESSION);
-
- while (true) {
- int deflateResult = deflate(&stream, Z_FINISH);
- if (deflateResult == Z_OK || !stream.avail_out) {
- size_t newCapacity = 0;
- currentCapacity -= stream.avail_out;
- if (!stream.avail_in)
- newCapacity = currentCapacity + 8;
- else {
- // Determine average capacity
- size_t compressedContent = stream.next_in - data;
- double expectedSize = static_cast<double>(dataLength) * compressedContent / currentCapacity;
-
- // Expand capacity by at least 8 bytes so we're always growing, and to
- // compensate for any exaggerated ideas of how effectively we'll compress
- // data in the future.
- newCapacity = std::max(static_cast<size_t>(expectedSize + 8), currentCapacity + 8);
- }
- newCapacity = fastMallocGoodSize(newCapacity);
- if (newCapacity >= dataLength)
- goto fail;
- compressedData = static_cast<Bytef*>(fastRealloc(compressedData, newCapacity));
- currentOffset = currentCapacity - stream.avail_out;
- stream.next_out = compressedData + currentOffset;
- stream.avail_out = newCapacity - currentCapacity;
- currentCapacity = newCapacity;
- continue;
- }
-
- if (deflateResult == Z_STREAM_END) {
- ASSERT(!stream.avail_in);
- break;
- }
-
- ASSERT_NOT_REACHED();
- fail:
- deflateEnd(&stream);
- fastFree(compressedData);
- return nullptr;
- }
- deflateEnd(&stream);
- static int64_t totalCompressed = 0;
- static int64_t totalInput = 0;
-
- totalCompressed += currentCapacity;
- totalInput += dataLength;
- GenericCompressedData* result = new (compressedData) GenericCompressedData(dataLength, stream.total_out);
- return adoptPtr(result);
-}
-
-bool GenericCompressedData::decompress(uint8_t* destination, size_t bufferSize, size_t* decompressedByteCount)
-{
- if (decompressedByteCount)
- *decompressedByteCount = 0;
- z_stream stream;
- memset(&stream, 0, sizeof(stream));
- stream.zalloc = zAlloc;
- stream.zfree = zFree;
- stream.data_type = Z_BINARY;
- stream.opaque = Z_NULL;
- stream.next_out = destination;
- stream.avail_out = bufferSize;
- stream.next_in = m_data;
- stream.avail_in = compressedSize();
- if (inflateInit(&stream) != Z_OK) {
- ASSERT_NOT_REACHED();
- return false;
- }
-
- int inflateResult = inflate(&stream, Z_FINISH);
- inflateEnd(&stream);
-
- ASSERT(stream.total_out <= bufferSize);
- if (decompressedByteCount)
- *decompressedByteCount = stream.total_out;
-
- if (inflateResult != Z_STREAM_END) {
- ASSERT_NOT_REACHED();
- return false;
- }
-
- return true;
-}
-
-}
-
-#else
-
-namespace WTF {
-PassOwnPtr<GenericCompressedData> GenericCompressedData::create(const uint8_t*, size_t)
-{
- return nullptr;
-}
-
-bool GenericCompressedData::decompress(uint8_t*, size_t, size_t*)
-{
- return false;
-}
-}
-
-#endif