summaryrefslogtreecommitdiffstats
path: root/fuse_sideload
diff options
context:
space:
mode:
authorTianjie Xu <xunchang@google.com>2019-06-21 19:14:10 +0200
committerGerrit Code Review <noreply-gerritcodereview@google.com>2019-06-21 19:14:10 +0200
commit090b62832f1e4507a864373b3e393aaa021a1f12 (patch)
tree79e1d688513da13dcb08a551fa689b17a1b7f2e3 /fuse_sideload
parentMerge "Implement the TargetFile and BuildInfo" (diff)
parentSupport starting fuse from a block map (diff)
downloadandroid_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.cpp7
-rw-r--r--fuse_sideload/include/fuse_provider.h17
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: