diff options
author | David Anderson <dvander@google.com> | 2019-03-11 18:32:29 -0700 |
---|---|---|
committer | David Anderson <dvander@google.com> | 2019-03-11 19:17:01 -0700 |
commit | f9134aa1d5e56c961dfdae00930c04a26cbe39bd (patch) | |
tree | e4a3940d2fb17a335215c1c4dbcb9bc1fb8f41fd /fs_mgr | |
parent | 8a1fb91e14686fe2447e807291bdbf737d930496 (diff) | |
download | system_core-f9134aa1d5e56c961dfdae00930c04a26cbe39bd.tar.gz system_core-f9134aa1d5e56c961dfdae00930c04a26cbe39bd.tar.bz2 system_core-f9134aa1d5e56c961dfdae00930c04a26cbe39bd.zip |
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
Diffstat (limited to 'fs_mgr')
-rw-r--r-- | fs_mgr/libfiemap_writer/fiemap_writer.cpp | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/fs_mgr/libfiemap_writer/fiemap_writer.cpp b/fs_mgr/libfiemap_writer/fiemap_writer.cpp index 99a1a2f51..5b7728021 100644 --- a/fs_mgr/libfiemap_writer/fiemap_writer.cpp +++ b/fs_mgr/libfiemap_writer/fiemap_writer.cpp @@ -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; } |