external/fontconfig/windowsfonts.patch | 40 +++++++++++++++------------------ 1 file changed, 19 insertions(+), 21 deletions(-)
New commits: commit 5538c5066b000cdec86246408b194b76b3971272 Author: Tor Lillqvist <[email protected]> AuthorDate: Mon Apr 14 18:54:35 2025 +0300 Commit: Tor Lillqvist <[email protected]> CommitDate: Sun Jan 11 08:41:11 2026 +0100 Make the fontconfig Windows patch apply to fontconfig 2.16.1 Note that this patch is for now just a start of work that is paused for now. The handling of non-ASCII filenames in the external libraries that in the CODA case are now used also on Windows is likely very broken, and needs to be carefully checked and modified. The new <tools/UnixWrappers.h> thing, with additional work, will probably be used. Change-Id: I30cb09747a8de8716608669a75c872b73812b3f0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/194587 Reviewed-by: Caolán McNamara <[email protected]> Tested-by: Jenkins CollaboraOffice <[email protected]> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/196986 Reviewed-by: Tor Lillqvist <[email protected]> Tested-by: Jenkins diff --git a/external/fontconfig/windowsfonts.patch b/external/fontconfig/windowsfonts.patch index feaaf80937c5..dccad99db916 100644 --- a/external/fontconfig/windowsfonts.patch +++ b/external/fontconfig/windowsfonts.patch @@ -12,37 +12,35 @@ well. @@ -58,6 +58,8 @@ #ifdef _WIN32 - #include <mbstring.h> -+#include <wchar.h> -+#include <Shlobj.h> - extern FcChar8 fontconfig_instprefix[]; + # include <mbstring.h> ++# include <wchar.h> ++# include <Shlobj.h> + extern FcChar8 fontconfig_instprefix[]; pfnGetSystemWindowsDirectory pGetSystemWindowsDirectory = NULL; - pfnSHGetFolderPathA pSHGetFolderPathA = NULL; -@@ -1386,18 +1387,25 @@ - } - else if (strcmp ((const char *) path, "WINDOWSFONTDIR") == 0) - { + pfnSHGetFolderPathA pSHGetFolderPathA = NULL; +@@ -1386,17 +1387,23 @@ + } + strcat ((char *)path, "\Microsoft\Windows\Fonts"); + } else if (strcmp ((const char *)path, "WINDOWSFONTDIR") == 0) { - int rc; - path = buffer; - _ensureWin32GettersReady(); -- rc = pGetSystemWindowsDirectory ((LPSTR) buffer, sizeof (buffer) - 20); -- if (rc == 0 || rc > sizeof (buffer) - 20) +- rc = pGetSystemWindowsDirectory ((LPSTR)buffer, sizeof (buffer) - 20); +- if (rc == 0 || rc > sizeof (buffer) - 20) { + wchar_t *wpath; + int size_needed; + -+ if (!SUCCEEDED(SHGetKnownFolderPath(&FOLDERID_Fonts, 0, NULL, &wpath))) - { ++ if (!SUCCEEDED(SHGetKnownFolderPath(&FOLDERID_Fonts, 0, NULL, &wpath))) { - FcConfigMessage (parse, FcSevereError, "GetSystemWindowsDirectory failed"); + FcConfigMessage (parse, FcSevereError, "SHGetKnownFolderPath for FOLDERID_Fonts failed"); return NULL; } -- if (path [strlen ((const char *) path) - 1] != '\') -- strcat ((char *) path, "\"); -- strcat ((char *) path, "fonts"); +- if (path[strlen ((const char *)path) - 1] != '\') +- strcat ((char *)path, "\"); +- strcat ((char *)path, "fonts"); + /* We assume that the code using fontconfig handles UTF-8 strings and not system codepage */ + size_needed = WideCharToMultiByte (CP_UTF8, 0, wpath, wcslen(wpath), NULL, 0, NULL, NULL); -+ if (size_needed <= 0 || size_needed > sizeof(buffer)) -+ { ++ if (size_needed <= 0 || size_needed > sizeof(buffer)) { + FcConfigMessage (parse, FcSevereError, "WideCharToMultiByte failed"); + CoTaskMemFree (wpath); + return NULL; @@ -50,6 +48,6 @@ well. + path = buffer; + WideCharToMultiByte(CP_UTF8, 0, wpath, wcslen(wpath), path, size_needed, NULL, NULL); + CoTaskMemFree (wpath); - } - else - { + } else { + if (!prefix) { + if (!FcStrIsAbsoluteFilename (path) && path[0] != '~')
