Add FxFolderHandleCloser for use with std::unique_ptr.

Use it in a couple of places. Make the similar code in the two places
even more so.

Change-Id: I3fc6a567088217e24506cdf7ab927b94cb5a4d52
Reviewed-on: https://pdfium-review.googlesource.com/43330
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fxcrt/fx_stream.h b/core/fxcrt/fx_stream.h
index b41d413..5d47378 100644
--- a/core/fxcrt/fx_stream.h
+++ b/core/fxcrt/fx_stream.h
@@ -28,6 +28,11 @@
 bool FX_GetNextFile(FX_FileHandle* handle, ByteString* filename, bool* bFolder);
 void FX_CloseFolder(FX_FileHandle* handle);
 
+// Used with std::unique_ptr to automatically call FX_CloseFolder().
+struct FxFolderHandleCloser {
+  inline void operator()(FX_FileHandle* h) const { FX_CloseFolder(h); }
+};
+
 #define FX_FILEMODE_ReadOnly 1
 #define FX_FILEMODE_Truncate 2
 
diff --git a/core/fxge/android/cfpf_skiafontmgr.cpp b/core/fxge/android/cfpf_skiafontmgr.cpp
index 2288a86..2aec56a 100644
--- a/core/fxge/android/cfpf_skiafontmgr.cpp
+++ b/core/fxge/android/cfpf_skiafontmgr.cpp
@@ -348,12 +348,14 @@
 }
 
 void CFPF_SkiaFontMgr::ScanPath(const ByteString& path) {
-  DIR* handle = FX_OpenFolder(path.c_str());
+  std::unique_ptr<FX_FileHandle, FxFolderHandleCloser> handle(
+      FX_OpenFolder(path.c_str()));
   if (!handle)
     return;
+
   ByteString filename;
   bool bFolder = false;
-  while (FX_GetNextFile(handle, &filename, &bFolder)) {
+  while (FX_GetNextFile(handle.get(), &filename, &bFolder)) {
     if (bFolder) {
       if (filename == "." || filename == "..")
         continue;
@@ -371,7 +373,6 @@
     else
       ScanFile(fullpath);
   }
-  FX_CloseFolder(handle);
 }
 
 void CFPF_SkiaFontMgr::ScanFile(const ByteString& file) {
diff --git a/core/fxge/cfx_folderfontinfo.cpp b/core/fxge/cfx_folderfontinfo.cpp
index b39c576..bbd1f24 100644
--- a/core/fxge/cfx_folderfontinfo.cpp
+++ b/core/fxge/cfx_folderfontinfo.cpp
@@ -131,20 +131,21 @@
 }
 
 void CFX_FolderFontInfo::ScanPath(const ByteString& path) {
-  FX_FileHandle* handle = FX_OpenFolder(path.c_str());
+  std::unique_ptr<FX_FileHandle, FxFolderHandleCloser> handle(
+      FX_OpenFolder(path.c_str()));
   if (!handle)
     return;
 
   ByteString filename;
   bool bFolder;
-  while (FX_GetNextFile(handle, &filename, &bFolder)) {
+  while (FX_GetNextFile(handle.get(), &filename, &bFolder)) {
     if (bFolder) {
       if (filename == "." || filename == "..")
         continue;
     } else {
       ByteString ext = filename.Right(4);
-      ext.MakeUpper();
-      if (ext != ".TTF" && ext != ".OTF" && ext != ".TTC")
+      ext.MakeLower();
+      if (ext != ".ttf" && ext != ".ttc" && ext != ".otf")
         continue;
     }
 
@@ -158,7 +159,6 @@
     fullpath += filename;
     bFolder ? ScanPath(fullpath) : ScanFile(fullpath);
   }
-  FX_CloseFolder(handle);
 }
 
 void CFX_FolderFontInfo::ScanFile(const ByteString& path) {