libfiemap_writer: Fix bugs in vfat handling.

FIBMAP returns block numbers, whereas fiemap_writer was treating them as
byte offsets.

Bug: 126230649
Test: gsi_tool install to vfat works
Change-Id: Ice80128213425aa9601e381d0fbe53f9581bf596
This commit is contained in:
David Anderson 2019-03-11 18:32:29 -07:00
parent 8a1fb91e14
commit f9134aa1d5

View file

@ -501,12 +501,13 @@ static bool ReadFibmap(int file_fd, const std::string& file_path,
}
if (!extents->empty() && block == last_block + 1) {
extents->back().fe_length++;
extents->back().fe_length += s.st_blksize;
} else {
extents->push_back(fiemap_extent{.fe_logical = block_number,
.fe_physical = block,
.fe_length = 1,
.fe_flags = 0});
extents->push_back(
fiemap_extent{.fe_logical = block_number,
.fe_physical = static_cast<uint64_t>(block) * s.st_blksize,
.fe_length = static_cast<uint64_t>(s.st_blksize),
.fe_flags = 0});
}
last_block = block;
}