diff options
Diffstat (limited to 'llvm/lib/Support/Compression.cpp')
-rw-r--r-- | llvm/lib/Support/Compression.cpp | 52 |
1 files changed, 23 insertions, 29 deletions
diff --git a/llvm/lib/Support/Compression.cpp b/llvm/lib/Support/Compression.cpp index 983a6348bbe4..21191972fb8b 100644 --- a/llvm/lib/Support/Compression.cpp +++ b/llvm/lib/Support/Compression.cpp @@ -22,11 +22,9 @@ #endif using namespace llvm; +using namespace llvm::compression; #if LLVM_ENABLE_ZLIB -static Error createError(StringRef Err) { - return make_error<StringError>(Err, inconvertibleErrorCode()); -} static StringRef convertZlibCodeToString(int Code) { switch (Code) { @@ -46,63 +44,59 @@ static StringRef convertZlibCodeToString(int Code) { bool zlib::isAvailable() { return true; } -void zlib::compress(StringRef InputBuffer, - SmallVectorImpl<char> &CompressedBuffer, int Level) { - unsigned long CompressedSize = ::compressBound(InputBuffer.size()); +void zlib::compress(ArrayRef<uint8_t> Input, + SmallVectorImpl<uint8_t> &CompressedBuffer, int Level) { + unsigned long CompressedSize = ::compressBound(Input.size()); CompressedBuffer.resize_for_overwrite(CompressedSize); - int Res = - ::compress2((Bytef *)CompressedBuffer.data(), &CompressedSize, - (const Bytef *)InputBuffer.data(), InputBuffer.size(), Level); + int Res = ::compress2((Bytef *)CompressedBuffer.data(), &CompressedSize, + (const Bytef *)Input.data(), Input.size(), Level); if (Res == Z_MEM_ERROR) report_bad_alloc_error("Allocation failed"); assert(Res == Z_OK); // Tell MemorySanitizer that zlib output buffer is fully initialized. // This avoids a false report when running LLVM with uninstrumented ZLib. __msan_unpoison(CompressedBuffer.data(), CompressedSize); - CompressedBuffer.truncate(CompressedSize); + if (CompressedSize < CompressedBuffer.size()) + CompressedBuffer.truncate(CompressedSize); } -Error zlib::uncompress(StringRef InputBuffer, char *UncompressedBuffer, +Error zlib::uncompress(ArrayRef<uint8_t> Input, uint8_t *UncompressedBuffer, size_t &UncompressedSize) { int Res = ::uncompress((Bytef *)UncompressedBuffer, (uLongf *)&UncompressedSize, - (const Bytef *)InputBuffer.data(), InputBuffer.size()); + (const Bytef *)Input.data(), Input.size()); // Tell MemorySanitizer that zlib output buffer is fully initialized. // This avoids a false report when running LLVM with uninstrumented ZLib. __msan_unpoison(UncompressedBuffer, UncompressedSize); - return Res ? createError(convertZlibCodeToString(Res)) : Error::success(); + return Res ? make_error<StringError>(convertZlibCodeToString(Res), + inconvertibleErrorCode()) + : Error::success(); } -Error zlib::uncompress(StringRef InputBuffer, - SmallVectorImpl<char> &UncompressedBuffer, +Error zlib::uncompress(ArrayRef<uint8_t> Input, + SmallVectorImpl<uint8_t> &UncompressedBuffer, size_t UncompressedSize) { UncompressedBuffer.resize_for_overwrite(UncompressedSize); Error E = - uncompress(InputBuffer, UncompressedBuffer.data(), UncompressedSize); - UncompressedBuffer.truncate(UncompressedSize); + zlib::uncompress(Input, UncompressedBuffer.data(), UncompressedSize); + if (UncompressedSize < UncompressedBuffer.size()) + UncompressedBuffer.truncate(UncompressedSize); return E; } -uint32_t zlib::crc32(StringRef Buffer) { - return ::crc32(0, (const Bytef *)Buffer.data(), Buffer.size()); -} - #else bool zlib::isAvailable() { return false; } -void zlib::compress(StringRef InputBuffer, - SmallVectorImpl<char> &CompressedBuffer, int Level) { +void zlib::compress(ArrayRef<uint8_t> Input, + SmallVectorImpl<uint8_t> &CompressedBuffer, int Level) { llvm_unreachable("zlib::compress is unavailable"); } -Error zlib::uncompress(StringRef InputBuffer, char *UncompressedBuffer, +Error zlib::uncompress(ArrayRef<uint8_t> Input, uint8_t *UncompressedBuffer, size_t &UncompressedSize) { llvm_unreachable("zlib::uncompress is unavailable"); } -Error zlib::uncompress(StringRef InputBuffer, - SmallVectorImpl<char> &UncompressedBuffer, +Error zlib::uncompress(ArrayRef<uint8_t> Input, + SmallVectorImpl<uint8_t> &UncompressedBuffer, size_t UncompressedSize) { llvm_unreachable("zlib::uncompress is unavailable"); } -uint32_t zlib::crc32(StringRef Buffer) { - llvm_unreachable("zlib::crc32 is unavailable"); -} #endif |