summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/fxcrt/fx_stream.h5
-rw-r--r--core/fxge/android/cfpf_skiafontmgr.cpp7
-rw-r--r--core/fxge/cfx_folderfontinfo.cpp10
3 files changed, 14 insertions, 8 deletions
diff --git a/core/fxcrt/fx_stream.h b/core/fxcrt/fx_stream.h
index b41d413723..5d473782a4 100644
--- a/core/fxcrt/fx_stream.h
+++ b/core/fxcrt/fx_stream.h
@@ -28,6 +28,11 @@ FX_FileHandle* FX_OpenFolder(const char* path);
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 2288a86e92..2aec56a628 100644
--- a/core/fxge/android/cfpf_skiafontmgr.cpp
+++ b/core/fxge/android/cfpf_skiafontmgr.cpp
@@ -348,12 +348,14 @@ FXFT_Face CFPF_SkiaFontMgr::GetFontFace(const ByteStringView& bsFile,
}
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 @@ void CFPF_SkiaFontMgr::ScanPath(const ByteString& path) {
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 b39c57637f..bbd1f246c9 100644
--- a/core/fxge/cfx_folderfontinfo.cpp
+++ b/core/fxge/cfx_folderfontinfo.cpp
@@ -131,20 +131,21 @@ bool CFX_FolderFontInfo::EnumFontList(CFX_FontMapper* pMapper) {
}
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 @@ void CFX_FolderFontInfo::ScanPath(const ByteString& path) {
fullpath += filename;
bFolder ? ScanPath(fullpath) : ScanFile(fullpath);
}
- FX_CloseFolder(handle);
}
void CFX_FolderFontInfo::ScanFile(const ByteString& path) {