diff --git a/applypatch/applypatch.cpp b/applypatch/applypatch.cpp
index 41a8d58..0250407 100644
--- a/applypatch/applypatch.cpp
+++ b/applypatch/applypatch.cpp
@@ -66,7 +66,7 @@
   }
 
   std::vector<unsigned char> data(file->st.st_size);
-  std::unique_ptr<FILE, decltype(&ota_fclose)> f(ota_fopen(filename, "rb"), ota_fclose);
+  std::unique_ptr<FILE, int (*)(FILE*)> f(ota_fopen(filename, "rb"), ota_fclose);
   if (!f) {
     printf("failed to open \"%s\": %s\n", filename, strerror(errno));
     return -1;
@@ -118,7 +118,7 @@
   std::sort(pairs.begin(), pairs.end());
 
   const char* partition = pieces[1].c_str();
-  std::unique_ptr<FILE, decltype(&ota_fclose)> dev(ota_fopen(partition, "rb"), ota_fclose);
+  std::unique_ptr<FILE, int (*)(FILE*)> dev(ota_fopen(partition, "rb"), ota_fclose);
   if (!dev) {
     printf("failed to open emmc partition \"%s\": %s\n", partition, strerror(errno));
     return -1;
@@ -210,7 +210,7 @@
     printf("fsync of \"%s\" failed: %s\n", filename, strerror(errno));
     return -1;
   }
-  if (ota_close(fd.release()) != 0) {
+  if (ota_close(fd) != 0) {
     printf("close of \"%s\" failed: %s\n", filename, strerror(errno));
     return -1;
   }
@@ -268,7 +268,7 @@
       printf("failed to sync to %s: %s\n", partition, strerror(errno));
       return -1;
     }
-    if (ota_close(fd.release()) != 0) {
+    if (ota_close(fd) != 0) {
       printf("failed to close %s: %s\n", partition, strerror(errno));
       return -1;
     }
@@ -287,7 +287,7 @@
     } else {
       printf("  caches dropped\n");
     }
-    ota_close(dc.release());
+    ota_close(dc);
     sleep(1);
 
     // Verify.
@@ -339,7 +339,7 @@
     return -1;
   }
 
-  if (ota_close(fd.release()) == -1) {
+  if (ota_close(fd) == -1) {
     printf("error closing %s: %s\n", partition, strerror(errno));
     return -1;
   }
@@ -782,7 +782,7 @@
         printf("failed to fsync file \"%s\": %s\n", tmp_target_filename.c_str(), strerror(errno));
         result = 1;
       }
-      if (ota_close(output_fd.release()) != 0) {
+      if (ota_close(output_fd) != 0) {
         printf("failed to close file \"%s\": %s\n", tmp_target_filename.c_str(), strerror(errno));
         result = 1;
       }
diff --git a/otafault/ota_io.cpp b/otafault/ota_io.cpp
index 2efd300..874cb1d 100644
--- a/otafault/ota_io.cpp
+++ b/otafault/ota_io.cpp
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-#include <map>
+#include "ota_io.h"
 
 #include <errno.h>
 #include <fcntl.h>
@@ -22,8 +22,10 @@
 #include <sys/stat.h>
 #include <unistd.h>
 
+#include <map>
+#include <memory>
+
 #include "config.h"
-#include "ota_io.h"
 
 static std::map<intptr_t, const char*> filename_cache;
 static std::string read_fault_file_name = "";
@@ -74,11 +76,19 @@
     return close(fd);
 }
 
+int ota_close(unique_fd& fd) {
+    return ota_close(fd.release());
+}
+
 int ota_fclose(FILE* fh) {
     filename_cache.erase((intptr_t)fh);
     return fclose(fh);
 }
 
+int ota_fclose(std::unique_ptr<FILE, int (*)(FILE*)>& fh) {
+    return ota_fclose(fh.release());
+}
+
 size_t ota_fread(void* ptr, size_t size, size_t nitems, FILE* stream) {
     if (should_fault_inject(OTAIO_READ)) {
         auto cached = filename_cache.find((intptr_t)stream);
diff --git a/otafault/ota_io.h b/otafault/ota_io.h
index e119eef..45d17b1 100644
--- a/otafault/ota_io.h
+++ b/otafault/ota_io.h
@@ -26,6 +26,8 @@
 #include <stdio.h>
 #include <sys/stat.h>
 
+#include <memory>
+
 #include <android-base/unique_fd.h>
 
 #define OTAIO_CACHE_FNAME "/cache/saved.file"
@@ -60,4 +62,8 @@
 
 using unique_fd = android::base::unique_fd_impl<OtaCloser>;
 
+int ota_close(unique_fd& fd);
+
+int ota_fclose(std::unique_ptr<FILE, int (*)(FILE*)>& fh);
+
 #endif
