First pass of ImageWriter

Change-Id: I4f189587a2e3cc1c265200b8fa64321b299947eb
diff --git a/src/zip_archive_test.cc b/src/zip_archive_test.cc
index 788e8fc..74b3795 100644
--- a/src/zip_archive_test.cc
+++ b/src/zip_archive_test.cc
@@ -5,6 +5,7 @@
 #include <sys/types.h>
 
 #include "common_test.h"
+#include "os.h"
 #include "zip_archive.h"
 #include "gtest/gtest.h"
 
@@ -12,47 +13,17 @@
 
 class ZipArchiveTest : public RuntimeTest {};
 
-class TmpFile {
- public:
-  TmpFile() {
-    std::string filename_template;
-    filename_template = getenv("ANDROID_DATA");
-    filename_template += "/TmpFile-XXXXXX";
-    filename_.reset(strdup(filename_template.c_str()));
-    CHECK(filename_ != NULL);
-    fd_ = mkstemp(filename_.get());
-    CHECK_NE(-1, fd_);
-  }
-
-  ~TmpFile() {
-    int unlink_result = unlink(filename_.get());
-    CHECK_EQ(0, unlink_result);
-    int close_result = close(fd_);
-    CHECK_EQ(0, close_result);
-  }
-
-  const char* GetFilename() const {
-    return filename_.get();
-  }
-
-  int GetFd() const {
-    return fd_;
-  }
-
- private:
-  scoped_ptr_malloc<char> filename_;
-  int fd_;
-};
-
 TEST_F(ZipArchiveTest, FindAndExtract) {
   scoped_ptr<ZipArchive> zip_archive(ZipArchive::Open(GetLibCoreDexFileName()));
   ASSERT_TRUE(zip_archive != false);
   scoped_ptr<ZipEntry> zip_entry(zip_archive->Find("classes.dex"));
   ASSERT_TRUE(zip_entry != false);
 
-  TmpFile tmp;
+  ScratchFile tmp;
   ASSERT_NE(-1, tmp.GetFd());
-  bool success = zip_entry->Extract(tmp.GetFd());
+  scoped_ptr<File> file(OS::FileFromFd(tmp.GetFilename(), tmp.GetFd()));
+  ASSERT_TRUE(file != NULL);
+  bool success = zip_entry->Extract(*file);
   ASSERT_TRUE(success);
   close(tmp.GetFd());