From f9134aa1d5e56c961dfdae00930c04a26cbe39bd Mon Sep 17 00:00:00 2001 From: David Anderson Date: Mon, 11 Mar 2019 18:32:29 -0700 Subject: [PATCH] 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 --- fs_mgr/libfiemap_writer/fiemap_writer.cpp | 11 ++++++----- 1 file 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(block) * s.st_blksize, + .fe_length = static_cast(s.st_blksize), + .fe_flags = 0}); } last_block = block; }