Bug 27526 - Compatibility fix for old windows sytems
Patch from Gianluigi Tiesi
This commit is contained in:
parent
ac6271dbac
commit
470e92c9db
|
@ -36,9 +36,6 @@
|
|||
#if defined(HAVE_MMAP) || defined(__CYGWIN__)
|
||||
# include <unistd.h>
|
||||
# include <sys/mman.h>
|
||||
#elif defined(_WIN32)
|
||||
# define _WIN32_WINNT 0x0500
|
||||
# include <windows.h>
|
||||
#endif
|
||||
|
||||
#ifndef O_BINARY
|
||||
|
|
12
src/fcint.h
12
src/fcint.h
|
@ -55,9 +55,17 @@
|
|||
#endif
|
||||
|
||||
#ifdef _WIN32
|
||||
#define FC_SEARCH_PATH_SEPARATOR ';'
|
||||
# define _WIN32_WINNT 0x0500
|
||||
# define WIN32_LEAN_AND_MEAN
|
||||
# define STRICT
|
||||
# include <windows.h>
|
||||
typedef UINT (WINAPI *pfnGetSystemWindowsDirectory)(LPSTR, UINT);
|
||||
typedef HRESULT (WINAPI *pfnSHGetFolderPathA)(HWND, int, HANDLE, DWORD, LPSTR);
|
||||
extern pfnGetSystemWindowsDirectory pGetSystemWindowsDirectory;
|
||||
extern pfnSHGetFolderPathA pSHGetFolderPathA;
|
||||
# define FC_SEARCH_PATH_SEPARATOR ';'
|
||||
#else
|
||||
#define FC_SEARCH_PATH_SEPARATOR ':'
|
||||
# define FC_SEARCH_PATH_SEPARATOR ':'
|
||||
#endif
|
||||
|
||||
#define FC_DBG_MATCH 1
|
||||
|
|
52
src/fcxml.c
52
src/fcxml.c
|
@ -53,10 +53,6 @@
|
|||
#endif /* ENABLE_LIBXML2 */
|
||||
|
||||
#ifdef _WIN32
|
||||
#define _WIN32_WINNT 0x0500
|
||||
#define STRICT
|
||||
#include <windows.h>
|
||||
#undef STRICT
|
||||
#include <mbstring.h>
|
||||
#endif
|
||||
|
||||
|
@ -2327,11 +2323,7 @@ FcEndElement(void *userData, const XML_Char *name)
|
|||
{
|
||||
int rc;
|
||||
data = buffer;
|
||||
#if _WIN32_WINNT >= 0x0500
|
||||
rc = GetSystemWindowsDirectory (buffer, sizeof (buffer) - 20);
|
||||
#else
|
||||
rc = GetWindowsDirectory (buffer, sizeof (buffer) - 20);
|
||||
#endif
|
||||
rc = pGetSystemWindowsDirectory (buffer, sizeof (buffer) - 20);
|
||||
if (rc == 0 || rc > sizeof (buffer) - 20)
|
||||
{
|
||||
FcConfigMessage (parse, FcSevereError, "GetSystemWindowsDirectory failed");
|
||||
|
@ -2381,6 +2373,27 @@ FcEndElement(void *userData, const XML_Char *name)
|
|||
strcat (data, "\\");
|
||||
strcat (data, "fontconfig\\cache");
|
||||
}
|
||||
else if (strcmp (data, "LOCAL_APPDATA_FONTCONFIG_CACHE") == 0)
|
||||
{
|
||||
char szFPath[MAX_PATH + 1];
|
||||
size_t len;
|
||||
FcStrFree (data);
|
||||
if (!(pSHGetFolderPathA && SUCCEEDED(pSHGetFolderPathA(NULL, /* CSIDL_LOCAL_APPDATA */ 28, NULL, 0, szFPath))))
|
||||
{
|
||||
FcConfigMessage (parse, FcSevereError, "SHGetFolderPathA failed");
|
||||
break;
|
||||
}
|
||||
strncat(szFPath, "\\fontconfig\\cache", MAX_PATH - 1 - strlen(szFPath));
|
||||
len = strlen(szFPath) + 1;
|
||||
data = malloc(len);
|
||||
if (!data)
|
||||
{
|
||||
FcConfigMessage (parse, FcSevereError, "out of memory");
|
||||
break;
|
||||
}
|
||||
FcMemAlloc (FC_MEM_STRING, len);
|
||||
strncpy(data, szFPath, len);
|
||||
}
|
||||
#endif
|
||||
if (!FcStrUsesHome (data) || FcConfigHome ())
|
||||
{
|
||||
|
@ -2694,6 +2707,11 @@ bail0:
|
|||
return ret || !complain;
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
pfnGetSystemWindowsDirectory pGetSystemWindowsDirectory = NULL;
|
||||
pfnSHGetFolderPathA pSHGetFolderPathA = NULL;
|
||||
#endif
|
||||
|
||||
FcBool
|
||||
FcConfigParseAndLoad (FcConfig *config,
|
||||
const FcChar8 *name,
|
||||
|
@ -2714,6 +2732,22 @@ FcConfigParseAndLoad (FcConfig *config,
|
|||
void *buf;
|
||||
#endif
|
||||
|
||||
#ifdef _WIN32
|
||||
if (!pGetSystemWindowsDirectory)
|
||||
{
|
||||
HMODULE hk32 = GetModuleHandleA("kernel32.dll");
|
||||
if (!(pGetSystemWindowsDirectory = (pfnGetSystemWindowsDirectory) GetProcAddress(hk32, "GetSystemWindowsDirectoryA")))
|
||||
pGetSystemWindowsDirectory = (pfnGetSystemWindowsDirectory) GetWindowsDirectory;
|
||||
}
|
||||
if (!pSHGetFolderPathA)
|
||||
{
|
||||
HMODULE hSh = LoadLibraryA("shfolder.dll");
|
||||
/* the check is done later, because there is no provided fallback */
|
||||
if (hSh)
|
||||
pSHGetFolderPathA = (pfnSHGetFolderPathA) GetProcAddress(hSh, "SHGetFolderPathA");
|
||||
}
|
||||
#endif
|
||||
|
||||
filename = FcConfigFilename (name);
|
||||
if (!filename)
|
||||
goto bail0;
|
||||
|
|
Loading…
Reference in New Issue