diff options
author | Tianjie Xu <xunchang@google.com> | 2019-06-21 19:14:10 +0200 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2019-06-21 19:14:10 +0200 |
commit | 090b62832f1e4507a864373b3e393aaa021a1f12 (patch) | |
tree | 79e1d688513da13dcb08a551fa689b17a1b7f2e3 /fuse_sideload | |
parent | Merge "Implement the TargetFile and BuildInfo" (diff) | |
parent | Support starting fuse from a block map (diff) | |
download | android_bootable_recovery-090b62832f1e4507a864373b3e393aaa021a1f12.tar android_bootable_recovery-090b62832f1e4507a864373b3e393aaa021a1f12.tar.gz android_bootable_recovery-090b62832f1e4507a864373b3e393aaa021a1f12.tar.bz2 android_bootable_recovery-090b62832f1e4507a864373b3e393aaa021a1f12.tar.lz android_bootable_recovery-090b62832f1e4507a864373b3e393aaa021a1f12.tar.xz android_bootable_recovery-090b62832f1e4507a864373b3e393aaa021a1f12.tar.zst android_bootable_recovery-090b62832f1e4507a864373b3e393aaa021a1f12.zip |
Diffstat (limited to 'fuse_sideload')
-rw-r--r-- | fuse_sideload/fuse_provider.cpp | 7 | ||||
-rw-r--r-- | fuse_sideload/include/fuse_provider.h | 17 |
2 files changed, 20 insertions, 4 deletions
diff --git a/fuse_sideload/fuse_provider.cpp b/fuse_sideload/fuse_provider.cpp index 5ee6e247f..8fa1b5c2e 100644 --- a/fuse_sideload/fuse_provider.cpp +++ b/fuse_sideload/fuse_provider.cpp @@ -49,6 +49,11 @@ FuseFileDataProvider::FuseFileDataProvider(const std::string& path, uint32_t blo fuse_block_size_ = block_size; } +std::unique_ptr<FuseDataProvider> FuseFileDataProvider::CreateFromFile(const std::string& path, + uint32_t block_size) { + return std::make_unique<FuseFileDataProvider>(path, block_size); +} + bool FuseFileDataProvider::ReadBlockAlignedData(uint8_t* buffer, uint32_t fetch_size, uint32_t start_block) const { uint64_t offset = static_cast<uint64_t>(start_block) * fuse_block_size_; @@ -127,7 +132,7 @@ bool FuseBlockDataProvider::ReadBlockAlignedData(uint8_t* buffer, uint32_t fetch return true; } -std::unique_ptr<FuseBlockDataProvider> FuseBlockDataProvider::CreateFromBlockMap( +std::unique_ptr<FuseDataProvider> FuseBlockDataProvider::CreateFromBlockMap( const std::string& block_map_path, uint32_t fuse_block_size) { auto block_map = BlockMapData::ParseBlockMapFile(block_map_path); if (!block_map) { diff --git a/fuse_sideload/include/fuse_provider.h b/fuse_sideload/include/fuse_provider.h index 8d4ea4073..3cdaef33d 100644 --- a/fuse_sideload/include/fuse_provider.h +++ b/fuse_sideload/include/fuse_provider.h @@ -44,6 +44,8 @@ class FuseDataProvider { virtual bool ReadBlockAlignedData(uint8_t* buffer, uint32_t fetch_size, uint32_t start_block) const = 0; + virtual bool Valid() const = 0; + virtual void Close() {} protected: @@ -60,10 +62,13 @@ class FuseFileDataProvider : public FuseDataProvider { public: FuseFileDataProvider(const std::string& path, uint32_t block_size); + static std::unique_ptr<FuseDataProvider> CreateFromFile(const std::string& path, + uint32_t block_size); + bool ReadBlockAlignedData(uint8_t* buffer, uint32_t fetch_size, uint32_t start_block) const override; - bool Valid() const { + bool Valid() const override { return fd_ != -1; } @@ -78,14 +83,20 @@ class FuseFileDataProvider : public FuseDataProvider { class FuseBlockDataProvider : public FuseDataProvider { public: // Constructs the fuse provider from the block map. - static std::unique_ptr<FuseBlockDataProvider> CreateFromBlockMap( - const std::string& block_map_path, uint32_t fuse_block_size); + static std::unique_ptr<FuseDataProvider> CreateFromBlockMap(const std::string& block_map_path, + uint32_t fuse_block_size); RangeSet ranges() const { return ranges_; } + bool ReadBlockAlignedData(uint8_t* buffer, uint32_t fetch_size, uint32_t start_block) const override; + + bool Valid() const override { + return fd_ != -1; + } + void Close() override; private: |