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;