summaryrefslogtreecommitdiffstats
path: root/fs_mgr
diff options
context:
space:
mode:
authorDavid Anderson <dvander@google.com>2019-03-11 18:32:29 -0700
committerDavid Anderson <dvander@google.com>2019-03-11 19:17:01 -0700
commitf9134aa1d5e56c961dfdae00930c04a26cbe39bd (patch)
treee4a3940d2fb17a335215c1c4dbcb9bc1fb8f41fd /fs_mgr
parent8a1fb91e14686fe2447e807291bdbf737d930496 (diff)
downloadsystem_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.cpp11
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;
}