Add a lower level zlib::uncompress.
SmallVectors are convenient, but they don't cover every use case. In particular, they are fairly large (3 pointers + one element) and there is no way to take ownership of the buffer to put it somewhere else. This patch then adds a lower lever interface that works with any buffer. llvm-svn: 281082
This commit is contained in:
@@ -62,16 +62,23 @@ zlib::Status zlib::compress(StringRef InputBuffer,
|
||||
return Res;
|
||||
}
|
||||
|
||||
zlib::Status zlib::uncompress(StringRef InputBuffer, char *UncompressedBuffer,
|
||||
size_t &UncompressedSize) {
|
||||
Status Res = encodeZlibReturnValue(
|
||||
::uncompress((Bytef *)UncompressedBuffer, (uLongf *)&UncompressedSize,
|
||||
(const Bytef *)InputBuffer.data(), InputBuffer.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;
|
||||
}
|
||||
|
||||
zlib::Status zlib::uncompress(StringRef InputBuffer,
|
||||
SmallVectorImpl<char> &UncompressedBuffer,
|
||||
size_t UncompressedSize) {
|
||||
UncompressedBuffer.resize(UncompressedSize);
|
||||
Status Res = encodeZlibReturnValue(::uncompress(
|
||||
(Bytef *)UncompressedBuffer.data(), (uLongf *)&UncompressedSize,
|
||||
(const Bytef *)InputBuffer.data(), InputBuffer.size()));
|
||||
// Tell MemorySanitizer that zlib output buffer is fully initialized.
|
||||
// This avoids a false report when running LLVM with uninstrumented ZLib.
|
||||
__msan_unpoison(UncompressedBuffer.data(), UncompressedSize);
|
||||
Status Res =
|
||||
uncompress(InputBuffer, UncompressedBuffer.data(), UncompressedSize);
|
||||
UncompressedBuffer.resize(UncompressedSize);
|
||||
return Res;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user