diff --git a/core/src/fxge/ge/fx_ge_fontmap.cpp b/core/src/fxge/ge/fx_ge_fontmap.cpp
index 2e591cd..eefeb5d 100644
--- a/core/src/fxge/ge/fx_ge_fontmap.cpp
+++ b/core/src/fxge/ge/fx_ge_fontmap.cpp
@@ -467,12 +467,13 @@
   return TRUE;
 }
 CFX_FontMapper::CFX_FontMapper(CFX_FontMgr* mgr)
-    : m_pFontInfo(nullptr),
-      m_bListLoaded(FALSE),
+    : m_bListLoaded(FALSE),
+      m_pFontInfo(nullptr),
       m_pFontEnumerator(nullptr),
       m_pFontMgr(mgr) {
-  FXSYS_memset(m_FoxitFaces, 0, sizeof m_FoxitFaces);
-  m_MMFaces[0] = m_MMFaces[1] = NULL;
+  m_MMFaces[0] = nullptr;
+  m_MMFaces[1] = nullptr;
+  FXSYS_memset(m_FoxitFaces, 0, sizeof(m_FoxitFaces));
 }
 CFX_FontMapper::~CFX_FontMapper() {
   for (int i = 0; i < 14; i++)
@@ -1379,7 +1380,7 @@
     CFX_ByteString key;
     void* value;
     m_FontList.GetNextAssoc(pos, key, value);
-    delete (CFontFaceInfo*)value;
+    delete (CFX_FontFaceInfo*)value;
   }
 }
 void CFX_FolderFontInfo::AddPath(const CFX_ByteStringC& path) {
@@ -1493,16 +1494,8 @@
   if (m_FontList.Lookup(facename, p)) {
     return;
   }
-  CFontFaceInfo* pInfo = new CFontFaceInfo;
-  if (!pInfo) {
-    return;
-  }
-  pInfo->m_FilePath = path;
-  pInfo->m_FaceName = facename;
-  pInfo->m_FontTables = tables;
-  pInfo->m_FontOffset = offset;
-  pInfo->m_FileSize = filesize;
-  pInfo->m_Charsets = 0;
+  CFX_FontFaceInfo* pInfo =
+      new CFX_FontFaceInfo(path, facename, tables, offset, filesize);
   CFX_ByteString os2 =
       _FPDF_LoadTableFromTT(pFile, tables, nTables, 0x4f532f32);
   if (os2.GetLength() >= 86) {
@@ -1572,7 +1565,7 @@
   if (hFont == NULL) {
     return 0;
   }
-  CFontFaceInfo* pFont = (CFontFaceInfo*)hFont;
+  CFX_FontFaceInfo* pFont = (CFX_FontFaceInfo*)hFont;
   FXSYS_FILE* pFile = NULL;
   if (size > 0) {
     pFile = FXSYS_fopen(pFont->m_FilePath, "rb");
@@ -1612,7 +1605,7 @@
   if (hFont == NULL) {
     return FALSE;
   }
-  CFontFaceInfo* pFont = (CFontFaceInfo*)hFont;
+  CFX_FontFaceInfo* pFont = (CFX_FontFaceInfo*)hFont;
   name = pFont->m_FaceName;
   return TRUE;
 }
diff --git a/core/src/fxge/ge/fx_ge_linux.cpp b/core/src/fxge/ge/fx_ge_linux.cpp
index cb8a0ad..bad3854 100644
--- a/core/src/fxge/ge/fx_ge_linux.cpp
+++ b/core/src/fxge/ge/fx_ge_linux.cpp
@@ -198,13 +198,13 @@
                                   int pitch_family,
                                   const FX_CHAR* family,
                                   FX_BOOL bMatchName) {
-  CFontFaceInfo* pFind = NULL;
+  CFX_FontFaceInfo* pFind = NULL;
   FX_DWORD charset_flag = _LinuxGetCharset(charset);
   int32_t iBestSimilar = 0;
   FX_POSITION pos = m_FontList.GetStartPosition();
   while (pos) {
     CFX_ByteString bsName;
-    CFontFaceInfo* pFont = NULL;
+    CFX_FontFaceInfo* pFont = NULL;
     m_FontList.GetNextAssoc(pos, bsName, (void*&)pFont);
     if (!(pFont->m_Charsets & charset_flag) &&
         charset != FXFONT_DEFAULT_CHARSET) {
diff --git a/core/src/fxge/ge/text_int.h b/core/src/fxge/ge/text_int.h
index 7cc31fe..3ebd9ae 100644
--- a/core/src/fxge/ge/text_int.h
+++ b/core/src/fxge/ge/text_int.h
@@ -64,20 +64,34 @@
 #define CHARSET_FLAG_BIG5 8
 #define CHARSET_FLAG_GB 16
 #define CHARSET_FLAG_KOREAN 32
-class CFontFaceInfo {
+
+class CFX_FontFaceInfo {
  public:
-  CFX_ByteString m_FilePath;
-  CFX_ByteString m_FaceName;
+  CFX_FontFaceInfo(CFX_ByteString filePath, CFX_ByteString faceName,
+                   CFX_ByteString fontTables, FX_DWORD fontOffset,
+                   FX_DWORD fileSize)
+      : m_FilePath(filePath),
+        m_FaceName(faceName),
+        m_FontTables(fontTables),
+        m_FontOffset(fontOffset),
+        m_FileSize(fileSize),
+        m_Styles(0),
+        m_Charsets(0) {}
+
+  const CFX_ByteString m_FilePath;
+  const CFX_ByteString m_FaceName;
+  const CFX_ByteString m_FontTables;
+  const FX_DWORD m_FontOffset;
+  const FX_DWORD m_FileSize;
   FX_DWORD m_Styles;
   FX_DWORD m_Charsets;
-  FX_DWORD m_FontOffset;
-  FX_DWORD m_FileSize;
-  CFX_ByteString m_FontTables;
 };
+
 class CFontFileFaceInfo {
  public:
   CFontFileFaceInfo();
   ~CFontFileFaceInfo();
+
   IFX_FileStream* m_pFile;
   FXFT_Face m_Face;
   CFX_ByteString m_FaceName;
