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>
