mk_payload: create zero-filler as sparse file
Bug: n/a
Test: MicrodroidHostTestCases
Test: $ echo asdf >> my.apk
$ mk_payload config payload.img (with my.apk)
$ du payload.img.0
0
Change-Id: If7b298e307cc8cee3a4b0db3d3db0e595db83a8c
diff --git a/microdroid/payload/mk_payload.cc b/microdroid/payload/mk_payload.cc
index c3db122..c31dcff 100644
--- a/microdroid/payload/mk_payload.cc
+++ b/microdroid/payload/mk_payload.cc
@@ -278,13 +278,12 @@
if (disk_size <= *file_size) {
return false;
}
-
unique_fd fd(TEMP_FAILURE_RETRY(open(filler_path.c_str(), O_CREAT | O_WRONLY | O_TRUNC, 0600)));
if (fd.get() == -1) {
return ErrnoError() << "open(" << filler_path << ") failed.";
}
- if (!android::base::WriteStringToFd(std::string(disk_size - *file_size, '\0'), fd)) {
- return ErrnoError() << "write(" << filler_path << ") failed.";
+ if (ftruncate(fd.get(), disk_size - *file_size) == -1) {
+ return ErrnoError() << "ftruncate(" << filler_path << ") failed.";
}
return true;
}
@@ -297,8 +296,6 @@
return false;
}
-// fill zeros to align |file_path|'s size to BLOCK_SIZE(4096) boundary.
-// return true when the filler is generated.
Result<void> MakePayload(const Config& config, const std::string& metadata_file,
const std::string& output_file) {
std::vector<MultipleImagePartition> partitions;