Repository.mk                                  |    2 -
 RepositoryExternal.mk                          |   41 +++++++++++++++++++++----
 configure.ac                                   |   19 ++++++++++-
 desktop/source/lib/init.cxx                    |    5 +--
 include/vcl/virdev.hxx                         |    2 -
 solenv/gbuild/CppunitTest.mk                   |    2 -
 vcl/Library_vcl.mk                             |   12 +++++++
 vcl/Module_vcl.mk                              |    2 -
 vcl/headless/svpframe.cxx                      |    2 -
 vcl/headless/svpinst.cxx                       |    4 +-
 vcl/inc/sft.hxx                                |    3 +
 vcl/inc/unx/freetype_glyphcache.hxx            |    1 
 vcl/inc/unx/freetypetextrender.hxx             |    2 -
 vcl/inc/unx/genprn.h                           |    7 ++++
 vcl/inc/unx/glyphcache.hxx                     |    3 +
 vcl/source/fontsubset/sft.cxx                  |   25 ++++++---------
 vcl/unx/generic/fontmanager/fontmanager.cxx    |    4 +-
 vcl/unx/generic/fontmanager/helper.cxx         |    7 ++--
 vcl/unx/generic/glyphs/freetype_glyphcache.cxx |   23 +++++++-------
 vcl/unx/generic/print/genprnpsp.cxx            |    3 -
 vcl/unx/generic/print/genpspgraphics.cxx       |    5 ---
 21 files changed, 117 insertions(+), 57 deletions(-)

New commits:
commit 2275d6ff2ffbcec6bf0053ad3553977b3b98835e
Author:     Tor Lillqvist <[email protected]>
AuthorDate: Tue Feb 25 19:52:15 2025 +0200
Commit:     Caolán McNamara <[email protected]>
CommitDate: Tue Dec 2 09:32:28 2025 +0100

    Make --enable-headless possible also on Windows, for CODA-W
    
    We variously look at both ENABLE_HEADLESS and USE_HEADLESS_CODE to
    check for the --enable-headless case. Are both really needed?
    
    In the --enable-headless case, freetype, fontconfig and cairo are
    built. For now, cairo is built as a Library (DLL), but fontconfig and
    freetype as StaticLibrary. Possibly should change these to DLLs,
    too. (See preceding commits.) Do not build the vclplug_win.
    
    Windows-specific fixes to the headless vcl code, and headless-specific
    fixes to some Win32 vcl code. Use <tools/UnixWrappers.h> where
    appropriate instead of <unistd.h>, <sys/mman.h>, etc.
    
    fontconfig already has code for Windows, but likely things will break
    on machines with a non-ASCII name for the Windows fonts directory, or
    for funky font names. Should eventually make it use the new
    <tools/UnixWrappers.h>.
    
    Change-Id: Id3a1313083b1c7c44b0b26819c1ffb5138e15bc4
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/194573
    Tested-by: Jenkins CollaboraOffice <[email protected]>
    Reviewed-by: Caolán McNamara <[email protected]>

diff --git a/Repository.mk b/Repository.mk
index 805e362a96ad..799f8de6003d 100644
--- a/Repository.mk
+++ b/Repository.mk
@@ -529,7 +529,7 @@ $(eval $(call 
gb_Helper_register_plugins_for_install,OOOLIBS,ooo, \
     icg \
     sdui \
     $(if $(ENABLE_GEN),vclplug_gen) \
-    $(if $(filter $(OS),WNT),vclplug_win) \
+    $(if $(filter $(OS)-$(USE_HEADLESS_CODE),WNT-),vclplug_win) \
     $(if $(filter $(OS),MACOSX),vclplug_osx) \
 ))
 
diff --git a/RepositoryExternal.mk b/RepositoryExternal.mk
index c075418c55c7..80f0fdee37dc 100644
--- a/RepositoryExternal.mk
+++ b/RepositoryExternal.mk
@@ -1214,13 +1214,33 @@ endef
 
 else # !SYSTEM_CAIRO
 
-ifneq ($(filter-out MACOSX$(ENABLE_HEADLESS) WNT,$(OS)),)
+ifneq ($(filter-out MACOSX$(ENABLE_HEADLESS) WNT$(ENABLE_HEADLESS),$(OS)),)
 
 $(eval $(call gb_Helper_register_packages_for_install,ooo,\
        cairo \
     pixman \
 ))
 
+ifeq ($(COM)-$(ENABLE_HEADLESS),MSC-TRUE)
+
+$(eval $(call gb_Helper_register_libraries_for_install,PLAINLIBS_OOO,ooo,\
+       cairo \
+       pixman \
+))
+
+define gb_LinkTarget__use_pixman
+$(call gb_LinkTarget_set_include,$(1),\
+       -I$(call gb_UnpackedTarball_get_dir,pixman)/pixman \
+       $$(INCLUDE) \
+)
+$(call gb_LinkTarget_use_libraries,$(1),\
+       pixman \
+)
+
+endef
+
+endif
+
 define gb_LinkTarget__use_cairo
 $(call gb_LinkTarget_use_package,$(1),cairo)
 $(call gb_LinkTarget_use_package,$(1),pixman)
@@ -1234,9 +1254,14 @@ $(call gb_LinkTarget_set_include,$(1),\
 $(call gb_LinkTarget_add_libs,$(1),\
        $(if $(filter EMSCRIPTEN,$(OS)), \
                $(gb_UnpackedTarball_workdir)/cairo/src/.libs/libcairo.a \
-               
$(gb_UnpackedTarball_workdir)/pixman/pixman/.libs/libpixman-1.a, \
-               -L$(gb_UnpackedTarball_workdir)/cairo/src/.libs -lcairo \
-               -L$(gb_UnpackedTarball_workdir)/pixman/pixman/.libs -lpixman-1) 
\
+               $(gb_UnpackedTarball_workdir)/pixman/pixman/.libs/libpixman-1.a 
\
+       , \
+               $(if $(filter WNT,$(OS)), \
+                       $(WORKDIR)/LinkTarget/Library/icairo.lib \
+               , \
+                       -L$(gb_UnpackedTarball_workdir)/cairo/src/.libs -lcairo 
\
+                       -L$(gb_UnpackedTarball_workdir)/pixman/pixman/.libs 
-lpixman-1) \
+               ) \
 )
 
 endef
@@ -1323,7 +1348,11 @@ $(call gb_LinkTarget_set_include,$(1),\
 )
 
 $(call gb_LinkTarget_add_libs,$(1),\
-    -L$(gb_UnpackedTarball_workdir)/fontconfig/src/.libs -lfontconfig \
+       $(if $(filter WNT,$(OS)), \
+               $(WORKDIR)/LinkTarget/StaticLibrary/fontconfig.lib \
+       , \
+               -L$(gb_UnpackedTarball_workdir)/fontconfig/src/.libs 
-lfontconfig \
+       ) \
 )
 
 endef
@@ -4050,7 +4079,7 @@ $(call gb_Executable_add_runtime_dependencies,gengal,\
        $(call gb_Library_get_target_for_build,$(CPPU_ENV_FOR_BUILD)_uno) \
        $(call gb_Library_get_target_for_build,localedata_en) \
        $(if $(filter MACOSX,$(OS_FOR_BUILD)),$(call 
gb_Library_get_target_for_build,vclplug_osx)) \
-       $(if $(filter WNT,$(OS_FOR_BUILD)),$(call 
gb_Library_get_target_for_build,vclplug_win)) \
+       $(if $(filter WNT-,$(OS_FOR_BUILD)-$(USE_HEADLESS_CODE)),$(call 
gb_Library_get_target_for_build,vclplug_win)) \
        $(if $(filter host,$(gb_Side)),$(call 
gb_Package_get_target,postprocess_images)) \
        $(call gb_Package_get_target_for_build,postprocess_registry) \
        $(INSTROOT_FOR_BUILD)/$(LIBO_URE_ETC_FOLDER)/$(call 
gb_Helper_get_rcfile,uno) \
diff --git a/configure.ac b/configure.ac
index 47d8b8b8a2c9..ae1a9ceca39b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -989,7 +989,11 @@ cygwin*|wsl*)
     # look at $host etc that much, it mostly uses its own $_os
     # variable, set here in this case statement.
 
-    using_freetype_fontconfig=no
+    if test "$enable_headless" != "yes"; then
+        using_freetype_fontconfig=no
+    else
+        using_freetype_fontconfig=yes
+    fi
     using_x11=no
     test_unix_dlapi=no
     test_openldap=no
@@ -1263,6 +1267,14 @@ if test "$using_freetype_fontconfig" = yes; then
         AC_DEFINE(ENABLE_HEADLESS)
         ENABLE_HEADLESS=TRUE
     fi
+    if test "$_os" = "WINNT" -a "$enable_headless" = yes; then
+        # We build them, don't do any pkg-config checks
+        test_fontconfig=no
+        test_freetype=no
+        ENBALE_FONTCONFIG=TRUE
+        ENBALE_FREETYPE=TRUE
+        BUILD_TYPE="$BUILD_TYPE FONTCONFIG FREETYPE"
+    fi
 else
     test_fontconfig=no
     test_freetype=no
@@ -1861,7 +1873,7 @@ AC_ARG_ENABLE(gen,
 
 AC_ARG_ENABLE(headless,
     AS_HELP_STRING([--enable-headless],
-        [Enable headless plugin (svp) even on macOS.]),
+        [Enable headless plugin (svp) even on macOS or Windows.]),
 ,using_headless_plugin=yes)
 
 AC_ARG_ENABLE(gui,
@@ -10269,6 +10281,9 @@ else
     FREETYPE_LIBS_internal="-L${WORKDIR}/UnpackedTarball/freetype/instdir/lib 
-lfreetype"
 fi
 libo_CHECK_SYSTEM_MODULE([freetype],[FREETYPE],[freetype2 >= 
9.9.3],,system,TRUE)
+if test "$_os" = WINNT -a "$ENABLE_HEADLESS" = TRUE; then
+    FREETYPE_CFLAGS="$FREETYPE_CFLAGS_internal"
+fi
 
 # ===================================================================
 # Check for system libxslt
diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx
index 1d4281a9c281..7cd8ad4c28ff 100644
--- a/desktop/source/lib/init.cxx
+++ b/desktop/source/lib/init.cxx
@@ -15,6 +15,7 @@
 #include <config_buildconfig.h>
 #include <config_cairo_rgba.h>
 #include <config_features.h>
+#include <config_vclplug.h>
 #include <editeng/unolingu.hxx>
 
 #include <stdio.h>
@@ -180,7 +181,7 @@
 #include <vcl/ImageTree.hxx>
 #include <vcl/ITiledRenderable.hxx>
 #include <vcl/dialoghelper.hxx>
-#ifdef _WIN32
+#if defined(_WIN32) && !USE_HEADLESS_CODE
 #include <vcl/BitmapTools.hxx>
 #endif
 #include <unicode/uchar.h>
@@ -4340,7 +4341,7 @@ static void doc_paintTile(LibreOfficeKitDocument* pThis,
         pDevice->Pop();
     }
 
-#ifdef _WIN32
+#if defined(_WIN32) && !USE_HEADLESS_CODE
     // pBuffer was not used there
     pDevice->EnableMapMode(false);
     BitmapEx aBmpEx = pDevice->GetBitmapEx({ 0, 0 }, { nCanvasWidth, 
nCanvasHeight });
diff --git a/include/vcl/virdev.hxx b/include/vcl/virdev.hxx
index 40cf445f0390..8cb30b70aa97 100644
--- a/include/vcl/virdev.hxx
+++ b/include/vcl/virdev.hxx
@@ -34,7 +34,7 @@ class SAL_WARN_UNUSED VCL_DLLPUBLIC VirtualDevice : public 
OutputDevice
     friend class Application;
     friend class ::OutputDevice;
     friend class Printer;
-    friend cairo_surface_t* get_underlying_cairo_surface(const VirtualDevice&);
+    friend VCL_DLLPUBLIC cairo_surface_t* get_underlying_cairo_surface(const 
VirtualDevice&);
 public:
     // reference device modes for different compatibility levels
     enum class RefDevMode { NONE = 0,
diff --git a/solenv/gbuild/CppunitTest.mk b/solenv/gbuild/CppunitTest.mk
index 7ff3caec5f31..f6bb294d82f0 100644
--- a/solenv/gbuild/CppunitTest.mk
+++ b/solenv/gbuild/CppunitTest.mk
@@ -253,7 +253,7 @@ $(call gb_CppunitTest_get_target,$(1)) : $(if $(filter 
$(2),$(true)),, \
         )
 else ifeq ($(OS),MACOSX)
 $(call gb_CppunitTest_get_target,$(1)): $(call 
gb_Library_get_target,vclplug_osx)
-else ifeq ($(OS),WNT)
+else ifeq ($(OS)-$(USE_HEADLESS_CODE),WNT-)
 $(call gb_CppunitTest_get_target,$(1)): $(call 
gb_Library_get_target,vclplug_win)
 endif
 
diff --git a/vcl/Library_vcl.mk b/vcl/Library_vcl.mk
index 370810e1192e..e08b1955f6e1 100644
--- a/vcl/Library_vcl.mk
+++ b/vcl/Library_vcl.mk
@@ -48,6 +48,7 @@ $(eval $(call gb_Library_add_defs,vcl,\
     -DCUI_DLL_NAME=\"$(call gb_Library_get_runtime_filename,$(call 
gb_Library__get_name,cui))\" \
     -DTK_DLL_NAME=\"$(call gb_Library_get_runtime_filename,$(call 
gb_Library__get_name,tk))\" \
     $(if $(SYSTEM_LIBFIXMATH),-DSYSTEM_LIBFIXMATH) \
+    $(if $(filter WNT-TRUE,$(OS)-$(USE_HEADLESS_CODE)),-DDO_USE_TTF_ON_WIN32) \
 ))
 
 $(eval $(call gb_Library_use_sdk_api,vcl))
@@ -75,8 +76,18 @@ $(eval $(call gb_Library_use_libraries,vcl,\
     ucbhelper \
     utl \
     xmlreader \
+       $(if $(filter WNT-TRUE,$(OS)-$(USE_HEADLESS_CODE)), \
+        cairo \
+       ) \
 ))
 
+$(if $(filter WNT-TRUE,$(OS)-$(USE_HEADLESS_CODE)), \
+       $(eval $(call gb_Library_use_static_libraries,vcl,\
+        fontconfig \
+        freetype \
+       )) \
+)
+
 $(eval $(call gb_Library_use_externals,vcl,\
     boost_headers \
     expat \
@@ -765,6 +776,7 @@ $(eval $(call gb_Library_add_exception_objects,vcl,\
 $(eval $(call gb_Library_use_system_win32_libs,vcl,\
     ole32 \
     setupapi \
+    shell32 \
     version \
 ))
 
diff --git a/vcl/Module_vcl.mk b/vcl/Module_vcl.mk
index 21225339f266..2a9aa6e20753 100644
--- a/vcl/Module_vcl.mk
+++ b/vcl/Module_vcl.mk
@@ -140,7 +140,7 @@ $(eval $(call gb_Module_add_targets,vcl,\
 ))
 endif
 
-ifeq ($(OS),WNT)
+ifeq ($(OS)-$(USE_HEADLESS_CODE),WNT-)
 $(eval $(call gb_Module_add_targets,vcl,\
     WinResTarget_vcl \
     Library_vclplug_win \
diff --git a/vcl/headless/svpframe.cxx b/vcl/headless/svpframe.cxx
index 74862859f11c..e123cad3b66a 100644
--- a/vcl/headless/svpframe.cxx
+++ b/vcl/headless/svpframe.cxx
@@ -54,7 +54,7 @@ SvpSalFrame::SvpSalFrame( SvpSalInstance* pInstance,
     m_nMaxWidth( 0 ),
     m_nMaxHeight( 0 )
 {
-#if !defined(IOS) && !defined(MACOSX) && !defined(ANDROID)
+#if !defined(IOS) && !defined(MACOSX) && !defined(ANDROID) && !defined(_WIN32)
     m_aSystemChildData.pSalFrame    = this;
 #endif
 
diff --git a/vcl/headless/svpinst.cxx b/vcl/headless/svpinst.cxx
index a7c2eeeb266d..b2d750975b47 100644
--- a/vcl/headless/svpinst.cxx
+++ b/vcl/headless/svpinst.cxx
@@ -21,7 +21,7 @@
 
 #include <mutex>
 
-#if !defined(ANDROID) && !defined(IOS) && !defined(EMSCRIPTEN)
+#if !defined(ANDROID) && !defined(IOS) && !defined(EMSCRIPTEN) && 
!defined(_WIN32)
 #include <pthread.h>
 #endif
 
@@ -97,7 +97,7 @@ SvpSalInstance::SvpSalInstance( 
std::unique_ptr<SalYieldMutex> pMutex )
     m_MainThread = osl::Thread::getCurrentIdentifier();
     if( s_pDefaultInstance == nullptr )
         s_pDefaultInstance = this;
-#if !defined(ANDROID) && !defined(IOS) && !defined(EMSCRIPTEN)
+#if !defined(ANDROID) && !defined(IOS) && !defined(EMSCRIPTEN) && 
!defined(_WIN32)
     pthread_atfork(nullptr, nullptr, atfork_child);
 #endif
 #if defined EMSCRIPTEN
diff --git a/vcl/inc/sft.hxx b/vcl/inc/sft.hxx
index 3927f76f0532..81bfae94f808 100644
--- a/vcl/inc/sft.hxx
+++ b/vcl/inc/sft.hxx
@@ -469,7 +469,7 @@ class TrueTypeFont;
  */
     SFErrCodes VCL_DLLPUBLIC OpenTTFontBuffer(const void* pBuffer, sal_uInt32 
nLen, sal_uInt32 facenum,
                                               TrueTypeFont** ttf, const 
FontCharMapRef xCharMap = nullptr);
-#if !defined(_WIN32)
+#if !defined(_WIN32) || defined(DO_USE_TTF_ON_WIN32)
 /**
  * TrueTypeFont constructor.
  * Reads the font file and allocates the memory for the structure.
@@ -686,6 +686,7 @@ class TrueTypeFont final : public AbstractTrueTypeFont
 
 public:
         sal_Int32   fsize;
+        intptr_t    mmhandle;
         sal_uInt8   *ptr;
         sal_uInt32  ntables;
 
diff --git a/vcl/inc/unx/freetype_glyphcache.hxx 
b/vcl/inc/unx/freetype_glyphcache.hxx
index 7a13fca8329d..de91c86358a7 100644
--- a/vcl/inc/unx/freetype_glyphcache.hxx
+++ b/vcl/inc/unx/freetype_glyphcache.hxx
@@ -50,6 +50,7 @@ private:
     int                     mnFileSize;
     int                     mnRefCount;
     int                     mnLangBoost;
+    intptr_t                mnHandle;
 };
 
 // FreetypeFontInfo corresponds to an unscaled font face
diff --git a/vcl/inc/unx/freetypetextrender.hxx 
b/vcl/inc/unx/freetypetextrender.hxx
index 055b5ddf7a14..e3bba325c9cf 100644
--- a/vcl/inc/unx/freetypetextrender.hxx
+++ b/vcl/inc/unx/freetypetextrender.hxx
@@ -23,7 +23,7 @@
 
 #include <textrender.hxx>
 
-class FreetypeFontInstance;
+#include <unx/freetype_glyphcache.hxx>
 
 // Generic implementation that uses freetype, but DrawTextLayout()
 // still needs implementing (e.g. by Cairo or Skia).
diff --git a/vcl/inc/unx/genprn.h b/vcl/inc/unx/genprn.h
index bc63899c759f..e3733a1ec806 100644
--- a/vcl/inc/unx/genprn.h
+++ b/vcl/inc/unx/genprn.h
@@ -22,6 +22,13 @@
 #include <jobdata.hxx>
 #include <salprn.hxx>
 
+#if defined GetDefaultPrinter
+#  undef GetDefaultPrinter
+#endif
+#if defined SetPrinterData
+#  undef SetPrinterData
+#endif
+
 class GenPspGraphics;
 class VCL_DLLPUBLIC PspSalInfoPrinter : public SalInfoPrinter
 {
diff --git a/vcl/inc/unx/glyphcache.hxx b/vcl/inc/unx/glyphcache.hxx
index 2c10fe7ff2b5..625d075bb8bf 100644
--- a/vcl/inc/unx/glyphcache.hxx
+++ b/vcl/inc/unx/glyphcache.hxx
@@ -75,6 +75,9 @@ namespace vcl { struct FontCapabilities; }
 class VCL_DLLPUBLIC FreetypeManager final
 {
 public:
+    FreetypeManager(const FreetypeManager&) = delete;
+    FreetypeManager& operator=(const FreetypeManager&) = delete;
+
     SAL_DLLPRIVATE ~FreetypeManager();
 
     static FreetypeManager& get();
diff --git a/vcl/source/fontsubset/sft.cxx b/vcl/source/fontsubset/sft.cxx
index dfd15a78d554..0c04719adc75 100644
--- a/vcl/source/fontsubset/sft.cxx
+++ b/vcl/source/fontsubset/sft.cxx
@@ -28,12 +28,6 @@
 
 #include <stdlib.h>
 #include <string.h>
-#include <fcntl.h>
-#ifdef UNX
-#include <sys/mman.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#endif
 #include <sft.hxx>
 #include <impfontcharmap.hxx>
 #ifdef SYSTEM_LIBFIXMATH
@@ -51,6 +45,7 @@
 #include <o3tl/string_view.hxx>
 #include <osl/endian.h>
 #include <osl/thread.h>
+#include <tools/UnixWrappers.h>
 #include <unotools/tempfile.hxx>
 #include <fontsubset.hxx>
 #include <algorithm>
@@ -841,7 +836,7 @@ int CountTTCFonts(const char* fname)
     }
     else
 #endif
-        fd = fopen(fname, "rb");
+        fd = wrap_fopen(fname, "rb");
 
     if (!fd)
         return 0;
@@ -878,7 +873,7 @@ int CountTTCFonts(const char* fname)
     return nFonts;
 }
 
-#if !defined(_WIN32)
+#if !defined(_WIN32) || defined(DO_USE_TTF_ON_WIN32)
 SFErrCodes OpenTTFontFile(const char* fname, sal_uInt32 facenum, 
TrueTypeFont** ttf,
                           const FontCharMapRef xCharMap)
 {
@@ -898,6 +893,7 @@ SFErrCodes OpenTTFontFile(const char* fname, sal_uInt32 
facenum, TrueTypeFont**
         goto cleanup;
     }
 
+#ifdef LINUX
     int nFD;
     int n;
     if (sscanf(fname, "/:FD:/%d%n", &nFD, &n) == 1 && fname[n] == '
@@ -906,14 +902,15 @@ SFErrCodes OpenTTFontFile(const char* fname, sal_uInt32 
facenum, TrueTypeFont**
         fd = dup(nFD);
     }
     else
-        fd = open(fname, O_RDONLY);
+#endif
+        fd = wrap_open(fname, O_RDONLY, 0);
 
     if (fd == -1) {
         ret = SFErrCodes::BadFile;
         goto cleanup;
     }
 
-    if (fstat(fd, &st) == -1) {
+    if (wrap_fstat(fd, &st) == -1) {
         ret = SFErrCodes::FileIo;
         goto cleanup;
     }
@@ -929,7 +926,7 @@ SFErrCodes OpenTTFontFile(const char* fname, sal_uInt32 
facenum, TrueTypeFont**
         goto cleanup;
     }
 
-    if (((*ttf)->ptr = static_cast<sal_uInt8 *>(mmap(nullptr, (*ttf)->fsize, 
PROT_READ, MAP_SHARED, fd, 0))) == MAP_FAILED) {
+    if (((*ttf)->ptr = static_cast<sal_uInt8 *>(wrap_mmap((*ttf)->fsize, fd, 
&(*ttf)->mmhandle))) == MAP_FAILED) {
         ret = SFErrCodes::Memory;
         goto cleanup;
     }
@@ -937,7 +934,7 @@ SFErrCodes OpenTTFontFile(const char* fname, sal_uInt32 
facenum, TrueTypeFont**
     ret = (*ttf)->open(facenum);
 
 cleanup:
-    if (fd != -1) close(fd);
+    if (fd != -1) wrap_close(fd);
     if (ret != SFErrCodes::Ok)
     {
         delete *ttf;
@@ -1005,9 +1002,9 @@ TrueTypeFont::TrueTypeFont(const char* pFileName, const 
FontCharMapRef xCharMap)
 
 TrueTypeFont::~TrueTypeFont()
 {
-#if !defined(_WIN32)
+#if !defined(_WIN32) || defined(DO_USE_TTF_ON_WIN32)
     if (!fileName().empty())
-        munmap(ptr, fsize);
+        wrap_munmap(ptr, fsize, mmhandle);
 #endif
 }
 
diff --git a/vcl/unx/generic/fontmanager/fontmanager.cxx 
b/vcl/unx/generic/fontmanager/fontmanager.cxx
index 28ebe7abaf6f..22e60a46c2a7 100644
--- a/vcl/unx/generic/fontmanager/fontmanager.cxx
+++ b/vcl/unx/generic/fontmanager/fontmanager.cxx
@@ -18,7 +18,6 @@
  */
 
 #include <memory>
-#include <unistd.h>
 #include <osl/thread.h>
 
 #include <unx/fontmanager.hxx>
@@ -29,6 +28,7 @@
 #include <vcl/fontcharmap.hxx>
 
 #include <tools/urlobj.hxx>
+#include <tools/UnixWrappers.h>
 
 #include <o3tl/string_view.hxx>
 #include <osl/file.hxx>
@@ -202,7 +202,7 @@ std::vector<PrintFontManager::PrintFont> 
PrintFontManager::analyzeFontFile( int
     else
     {
         // #i1872# reject unreadable files
-        if( access( aFullPath.getStr(), R_OK ) )
+        if( wrap_access( aFullPath.getStr(), R_OK ) )
             return aNewFonts;
 
         bSupported = false;
diff --git a/vcl/unx/generic/fontmanager/helper.cxx 
b/vcl/unx/generic/fontmanager/helper.cxx
index 65365e2cc91c..4b699665fb0a 100644
--- a/vcl/unx/generic/fontmanager/helper.cxx
+++ b/vcl/unx/generic/fontmanager/helper.cxx
@@ -28,6 +28,7 @@
 #include <rtl/ustring.hxx>
 #include <sal/log.hxx>
 #include <tools/urlobj.hxx>
+#include <tools/UnixWrappers.h>
 #include <unx/helper.hxx>
 
 #include <tuple>
@@ -140,7 +141,7 @@ void psp::getPrinterPathList( std::vector< OUString >& 
rPathList, const char* pS
             aDir += OString::Concat("/") + pSubDir;
         }
         struct stat aStat;
-        if( stat( aDir.getStr(), &aStat ) || ! S_ISDIR( aStat.st_mode ) )
+        if( wrap_stat( aDir.getStr(), &aStat ) || ! S_ISDIR( aStat.st_mode ) )
             continue;
 
         rPathList.push_back( OStringToOUString( aDir, aEncoding ) );
@@ -195,7 +196,7 @@ OUString const & psp::getFontPath()
             OUString sPath = aConfigPath + "/" LIBO_SHARE_FOLDER "/fonts";
             // check existence of config path
             struct stat aStat;
-            if( 0 != stat( OUStringToOString( sPath, 
osl_getThreadTextEncoding() ).getStr(), &aStat )
+            if( 0 != wrap_stat( OUStringToOString( sPath, 
osl_getThreadTextEncoding() ).getStr(), &aStat )
                 || ! S_ISDIR( aStat.st_mode ) )
                 aConfigPath.clear();
             else
@@ -236,7 +237,7 @@ void psp::normPath( OString& rPath )
 
     if( ( aPath.indexOf("./") != -1 ||
           aPath.indexOf( '~' ) != -1 )
-        && realpath( aPath.getStr(), buf ) )
+        && wrap_realpath( aPath.getStr(), buf ) )
     {
         rPath = buf;
     }
diff --git a/vcl/unx/generic/glyphs/freetype_glyphcache.cxx 
b/vcl/unx/generic/glyphs/freetype_glyphcache.cxx
index 39c2c784b3b1..aa6da15885ff 100644
--- a/vcl/unx/generic/glyphs/freetype_glyphcache.cxx
+++ b/vcl/unx/generic/glyphs/freetype_glyphcache.cxx
@@ -51,17 +51,18 @@
 
 #include <vector>
 
-// TODO: move file mapping stuff to OSL
-#include <unistd.h>
-#include <dlfcn.h>
+#include <tools/UnixWrappers.h>
 #include <fcntl.h>
 #include <sys/stat.h>
-#include <sys/mman.h>
 #include <unx/fontmanager.hxx>
 #include <impfontcharmap.hxx>
 
 static FT_Library aLibFT = nullptr;
 
+#ifdef _WIN32
+#define strncasecmp(x,y,z) _strnicmp(x,y,z)
+#endif
+
 // TODO: remove when the priorities are selected by UI
 // if (AH==0) => disable autohinting
 // if (AA==0) => disable antialiasing
@@ -109,10 +110,10 @@ bool FreetypeFontFile::Map()
         if( sscanf( pFileName, "/:FD:/%d%n", &nFD, &n ) == 1 && pFileName[n] 
== '
         {
             lseek( nFD, 0, SEEK_SET );
-            nFile = dup( nFD );
+            nFile = wrap_dup( nFD );
         }
         else
-            nFile = open( pFileName, O_RDONLY );
+            nFile = wrap_open( pFileName, O_RDONLY, 0 );
         if( nFile < 0 )
         {
             SAL_WARN("vcl.unx.freetype", "open('" << maNativeFileName << "') 
failed: " << strerror(errno));
@@ -120,16 +121,16 @@ bool FreetypeFontFile::Map()
         }
 
         struct stat aStat;
-        int nRet = fstat( nFile, &aStat );
+        int nRet = wrap_fstat( nFile, &aStat );
         if (nRet < 0)
         {
             SAL_WARN("vcl.unx.freetype", "fstat on '" << maNativeFileName << 
"' failed: " << strerror(errno));
-            close (nFile);
+            wrap_close (nFile);
             return false;
         }
         mnFileSize = aStat.st_size;
         mpFileMap = static_cast<unsigned char*>(
-            mmap( nullptr, mnFileSize, PROT_READ, MAP_SHARED, nFile, 0 ));
+            wrap_mmap( mnFileSize, nFile, &mnHandle ));
         if( mpFileMap == MAP_FAILED )
         {
             SAL_WARN("vcl.unx.freetype", "mmap of '" << maNativeFileName << "' 
failed: " << strerror(errno));
@@ -137,7 +138,7 @@ bool FreetypeFontFile::Map()
         }
         else
             SAL_INFO("vcl.unx.freetype", "mmap'ed '" << maNativeFileName << "' 
successfully");
-        close( nFile );
+        wrap_close( nFile );
     }
 
     return (mpFileMap != nullptr);
@@ -150,7 +151,7 @@ void FreetypeFontFile::Unmap()
     assert(mnRefCount >= 0 && "how did this go negative
");
     if (mpFileMap)
     {
-        munmap(mpFileMap, mnFileSize);
+        wrap_munmap(mpFileMap, mnFileSize, mnHandle);
         mpFileMap = nullptr;
     }
 }
diff --git a/vcl/unx/generic/print/genprnpsp.cxx 
b/vcl/unx/generic/print/genprnpsp.cxx
index bbba1230b624..e02280b95d12 100644
--- a/vcl/unx/generic/print/genprnpsp.cxx
+++ b/vcl/unx/generic/print/genprnpsp.cxx
@@ -34,9 +34,6 @@
 #include <string_view>
 
 // For spawning PDF and FAX generation
-#include <unistd.h>
-#include <sys/wait.h>
-#include <sys/stat.h>
 
 #include <comphelper/fileurl.hxx>
 #include <o3tl/safeint.hxx>
diff --git a/vcl/unx/generic/print/genpspgraphics.cxx 
b/vcl/unx/generic/print/genpspgraphics.cxx
index ecff3110f51e..ad21cde20ba9 100644
--- a/vcl/unx/generic/print/genpspgraphics.cxx
+++ b/vcl/unx/generic/print/genpspgraphics.cxx
@@ -24,11 +24,6 @@
 
 #include <sal/types.h>
 
-#include <unistd.h>
-#include <fcntl.h>
-#include <sys/mman.h>
-#include <sys/stat.h>
-
 #include <i18nlangtag/mslangid.hxx>
 #include <jobdata.hxx>
 #include <vcl/settings.hxx>

Reply via email to