Fix infinite loop when using extents.

Clearing |buffer_| still actually makes sense because MemoryFile::Close()
is called twice: once explicitly from bspatch to check if Close()
succeeded, once from destructor to ensure that everything is closed. And
if we don't clear |buffer_|, on the second Close(), it will try to write
|buffer_| to |file_| again, and if |file_| is an ExtentsFile, it will
simply return true and set |bytes_written| to 0 on Write() because all
the extents are already written, now WriteAll() became an infinite
loop.
Although returning false if written is 0 in WriteAll() will fix this, but
I think we should not write the same buffer again in the first place.

Test: call bspatch with extents
Bug: 25773600

Change-Id: If3bddcc6e8ca6751c422c066e5b8b02f91086ed5
diff --git a/bspatch.cc b/bspatch.cc
index aae6118..550c6c7 100644
--- a/bspatch.cc
+++ b/bspatch.cc
@@ -112,7 +112,7 @@
               size_t size) {
   size_t offset = 0, written;
   while (offset < size) {
-    if (!file->Write(data + offset, size - offset, &written))
+    if (!file->Write(data + offset, size - offset, &written) || written == 0)
       return false;
     offset += written;
   }
diff --git a/memory_file.cc b/memory_file.cc
index 996a10e..59e2c7d 100644
--- a/memory_file.cc
+++ b/memory_file.cc
@@ -35,6 +35,9 @@
 bool MemoryFile::Close() {
   if (!WriteAll(file_, buffer_.data(), buffer_.size()))
     return false;
+  // Prevent writing |buffer_| to |file_| again if Close() is called more than
+  // once.
+  buffer_.clear();
   return file_->Close();
 }