poppler/GlobalParamsWin.cc | 34 +++------------------------------- 1 file changed, 3 insertions(+), 31 deletions(-)
New commits: commit 5b476757e70c79e8dca5fe2a3fb69cbbbfe710a9 Author: Albert Astals Cid <[email protected]> Date: Fri Apr 22 17:50:04 2022 +0200 GetWindowsFontDir: Simply call SHGetFolderPathA Instead of all the dance with loading various different dlls We don't support terribly old Windows that don't even have SHGetFolderPathA diff --git a/poppler/GlobalParamsWin.cc b/poppler/GlobalParamsWin.cc index a22bbf79..d33c09bd 100644 --- a/poppler/GlobalParamsWin.cc +++ b/poppler/GlobalParamsWin.cc @@ -26,9 +26,7 @@ description for all fonts available in Windows. That's how MuPDF works. #endif #include <windows.h> -#if !(_WIN32_IE >= 0x0500) -# error "_WIN32_IE must be defined >= 0x0500 for SHGFP_TYPE_CURRENT from shlobj.h" -#endif + #include <shlobj.h> #include <cstring> #include <cstdio> @@ -163,37 +161,11 @@ static std::string GetWindowsFontDir() char winFontDir[MAX_PATH]; winFontDir[0] = '\0'; - // SHGetSpecialFolderPath isn't available in older versions of shell32.dll (Win95 and - // WinNT4), so do a dynamic load of ANSI versions. - HMODULE hLib = LoadLibraryA("shell32.dll"); - if (hLib) { - auto SHGetFolderPathFunc = reinterpret_cast<HRESULT(__stdcall *)(HWND, int, HANDLE, DWORD, LPSTR)>(GetProcAddress(hLib, "SHGetFolderPathA")); - if (SHGetFolderPathFunc) - (*SHGetFolderPathFunc)(nullptr, CSIDL_FONTS, nullptr, SHGFP_TYPE_CURRENT, winFontDir); - - if (!winFontDir[0]) { - // Try an older function - auto SHGetSpecialFolderPathFunc = reinterpret_cast<BOOL(__stdcall *)(HWND, LPSTR, int, BOOL)>(GetProcAddress(hLib, "SHGetSpecialFolderPathA")); - if (SHGetSpecialFolderPathFunc) - (*SHGetSpecialFolderPathFunc)(nullptr, winFontDir, CSIDL_FONTS, FALSE); - } - FreeLibrary(hLib); - } - if (winFontDir[0]) + if (SHGetFolderPathA(nullptr, CSIDL_FONTS, nullptr, SHGFP_TYPE_CURRENT, winFontDir) == S_OK) { return winFontDir; - - // Try older DLL - hLib = LoadLibraryA("SHFolder.dll"); - if (hLib) { - auto SHGetFolderPathFunc = reinterpret_cast<HRESULT(__stdcall *)(HWND, int, HANDLE, DWORD, LPSTR)>(GetProcAddress(hLib, "SHGetFolderPathA")); - if (SHGetFolderPathFunc) - (*SHGetFolderPathFunc)(nullptr, CSIDL_FONTS, nullptr, SHGFP_TYPE_CURRENT, winFontDir); - FreeLibrary(hLib); } - if (winFontDir[0]) - return winFontDir; - // Everything else failed so the standard fonts directory. + // return the windows directory + fonts GetWindowsDirectoryA(winFontDir, MAX_PATH); if (winFontDir[0]) { return std::string(winFontDir) + "\\fonts";
