michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: #include "mozilla/Compression.h" michael@0: #include "mozilla/CheckedInt.h" michael@0: using namespace mozilla::Compression; michael@0: michael@0: namespace { michael@0: michael@0: #include "lz4.c" michael@0: michael@0: }/* anonymous namespace */ michael@0: michael@0: /* Our wrappers */ michael@0: michael@0: size_t michael@0: LZ4::compress(const char* source, size_t inputSize, char* dest) michael@0: { michael@0: CheckedInt inputSizeChecked = inputSize; michael@0: MOZ_ASSERT(inputSizeChecked.isValid()); michael@0: return LZ4_compress(source, dest, inputSizeChecked.value()); michael@0: } michael@0: michael@0: size_t michael@0: LZ4::compressLimitedOutput(const char* source, size_t inputSize, char* dest, size_t maxOutputSize) michael@0: { michael@0: CheckedInt inputSizeChecked = inputSize; michael@0: MOZ_ASSERT(inputSizeChecked.isValid()); michael@0: CheckedInt maxOutputSizeChecked = maxOutputSize; michael@0: MOZ_ASSERT(maxOutputSizeChecked.isValid()); michael@0: return LZ4_compress_limitedOutput(source, dest, inputSizeChecked.value(), michael@0: maxOutputSizeChecked.value()); michael@0: } michael@0: michael@0: bool michael@0: LZ4::decompress(const char* source, char* dest, size_t outputSize) michael@0: { michael@0: CheckedInt outputSizeChecked = outputSize; michael@0: MOZ_ASSERT(outputSizeChecked.isValid()); michael@0: int ret = LZ4_decompress_fast(source, dest, outputSizeChecked.value()); michael@0: return ret >= 0; michael@0: } michael@0: michael@0: bool michael@0: LZ4::decompress(const char* source, size_t inputSize, char* dest, size_t maxOutputSize, michael@0: size_t *outputSize) michael@0: { michael@0: CheckedInt maxOutputSizeChecked = maxOutputSize; michael@0: MOZ_ASSERT(maxOutputSizeChecked.isValid()); michael@0: CheckedInt inputSizeChecked = inputSize; michael@0: MOZ_ASSERT(inputSizeChecked.isValid()); michael@0: michael@0: int ret = LZ4_decompress_safe(source, dest, inputSizeChecked.value(), michael@0: maxOutputSizeChecked.value()); michael@0: if (ret >= 0) { michael@0: *outputSize = ret; michael@0: return true; michael@0: } else { michael@0: *outputSize = 0; michael@0: return false; michael@0: } michael@0: } michael@0: