mk_payload: create zero-filler as sparse file am: f0f7682fc2

Original change: https://android-review.googlesource.com/c/platform/packages/modules/Virtualization/+/1739253

Change-Id: Ic4de17562b1dfaa0cb05fd2d829d4c2115a687bc
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;