diff options
author | Treehugger Robot <treehugger-gerrit@google.com> | 2022-03-01 20:51:50 +0100 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2022-03-01 20:51:50 +0100 |
commit | 1f8cb01c694c232a1a7c197a52c0db9eb45dac04 (patch) | |
tree | 23c01d7ca33c930ab8a7ed7daebe1aefc1fee921 | |
parent | Merge "Disable flaky recovery test" am: 3ca4bf9b8c am: 5188d3c59d am: e1abfc8476 (diff) | |
parent | Merge "Fix non-ab fuse ota fail bug" am: 13907aef6b am: 3024caac9a (diff) | |
download | android_bootable_recovery-1f8cb01c694c232a1a7c197a52c0db9eb45dac04.tar android_bootable_recovery-1f8cb01c694c232a1a7c197a52c0db9eb45dac04.tar.gz android_bootable_recovery-1f8cb01c694c232a1a7c197a52c0db9eb45dac04.tar.bz2 android_bootable_recovery-1f8cb01c694c232a1a7c197a52c0db9eb45dac04.tar.lz android_bootable_recovery-1f8cb01c694c232a1a7c197a52c0db9eb45dac04.tar.xz android_bootable_recovery-1f8cb01c694c232a1a7c197a52c0db9eb45dac04.tar.zst android_bootable_recovery-1f8cb01c694c232a1a7c197a52c0db9eb45dac04.zip |
-rw-r--r-- | fuse_sideload/fuse_provider.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/fuse_sideload/fuse_provider.cpp b/fuse_sideload/fuse_provider.cpp index 8fa1b5c2e..2183d0844 100644 --- a/fuse_sideload/fuse_provider.cpp +++ b/fuse_sideload/fuse_provider.cpp @@ -118,11 +118,16 @@ bool FuseBlockDataProvider::ReadBlockAlignedData(uint8_t* buffer, uint32_t fetch } if (uint64_t tailing_bytes = fetch_size % source_block_size_; tailing_bytes != 0) { - // Calculate the offset to last partial block. + // Calculate the offset to last partial block. Two possibilities as below: + // 1: fetch_size < source_block_size_, the read_ranges is a blank range_set. + // Get the last block num through GetBlockNumber() of the offset block. + // 2: fetch_size >= source_block_size_, the last block num is already stored + // in read-ranges by GetSubRanges() above. uint64_t tailing_offset = read_ranges.value() ? static_cast<uint64_t>((read_ranges->cend() - 1)->second) * source_block_size_ - : static_cast<uint64_t>(start_block) * source_block_size_; + : static_cast<uint64_t>(ranges_.GetBlockNumber(offset / source_block_size_)) * + source_block_size_; if (!android::base::ReadFullyAtOffset(fd_, next_out, tailing_bytes, tailing_offset)) { PLOG(ERROR) << "Failed to read tailing " << tailing_bytes << " bytes at offset " << tailing_offset; |