diff options
Diffstat (limited to 'table/format.cc')
-rw-r--r-- | table/format.cc | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/table/format.cc b/table/format.cc index e183977..7647372 100644 --- a/table/format.cc +++ b/table/format.cc @@ -5,6 +5,7 @@ #include "table/format.h" #include "leveldb/env.h" +#include "leveldb/options.h" #include "port/port.h" #include "table/block.h" #include "util/coding.h" @@ -116,13 +117,31 @@ Status ReadBlock(RandomAccessFile* file, const ReadOptions& options, size_t ulength = 0; if (!port::Snappy_GetUncompressedLength(data, n, &ulength)) { delete[] buf; - return Status::Corruption("corrupted compressed block contents"); + return Status::Corruption("corrupted snappy compressed block length"); } char* ubuf = new char[ulength]; if (!port::Snappy_Uncompress(data, n, ubuf)) { delete[] buf; delete[] ubuf; - return Status::Corruption("corrupted compressed block contents"); + return Status::Corruption("corrupted snappy compressed block contents"); + } + delete[] buf; + result->data = Slice(ubuf, ulength); + result->heap_allocated = true; + result->cachable = true; + break; + } + case kZstdCompression: { + size_t ulength = 0; + if (!port::Zstd_GetUncompressedLength(data, n, &ulength)) { + delete[] buf; + return Status::Corruption("corrupted zstd compressed block length"); + } + char* ubuf = new char[ulength]; + if (!port::Zstd_Uncompress(data, n, ubuf)) { + delete[] buf; + delete[] ubuf; + return Status::Corruption("corrupted zstd compressed block contents"); } delete[] buf; result->data = Slice(ubuf, ulength); |