| // Copyright 2017 The Chromium OS Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #include "bsdiff/decompressor_interface.h" | |
| #include "bsdiff/brotli_decompressor.h" | |
| #include "bsdiff/bz2_decompressor.h" | |
| #include "bsdiff/logging.h" | |
| namespace bsdiff { | |
| std::unique_ptr<DecompressorInterface> CreateDecompressor( | |
| CompressorType type, | |
| const uint8_t* input_data, | |
| size_t size) { | |
| switch (type) { | |
| case CompressorType::kBZ2: { | |
| auto decompressor = std::make_unique<BZ2MemoryDecompressor>(); | |
| if (decompressor->SetInputData(input_data, size)) | |
| return decompressor; | |
| return nullptr; | |
| } | |
| case CompressorType::kBrotli: { | |
| auto decompressor = std::make_unique<BrotliMemoryDecompressor>(); | |
| if (decompressor->SetInputData(input_data, size)) | |
| return decompressor; | |
| return nullptr; | |
| } | |
| default: | |
| LOG(ERROR) << "unsupported compressor type: " | |
| << static_cast<uint8_t>(type); | |
| return nullptr; | |
| } | |
| } | |
| std::unique_ptr<DecompressorInterface> CreateDecompressor(CompressorType type, | |
| int fd, | |
| off_t offset, | |
| size_t size) { | |
| switch (type) { | |
| case CompressorType::kBZ2: { | |
| auto decompressor = std::make_unique<BZ2FileDecompressor>(); | |
| if (decompressor->SetInputFile(fd, offset, size)) { | |
| return decompressor; | |
| } | |
| return nullptr; | |
| } | |
| case CompressorType::kBrotli: { | |
| auto decompressor = std::make_unique<BrotliFileDecompressor>(); | |
| if (decompressor->SetInputFile(fd, offset, size)) { | |
| return decompressor; | |
| } | |
| return nullptr; | |
| } | |
| default: | |
| LOG(ERROR) << "unsupported compressor type: " | |
| << static_cast<uint8_t>(type); | |
| return nullptr; | |
| } | |
| } | |
| } // namespace bsdiff |