From c00587048251ff0b2484c21549f380573a123f62 Mon Sep 17 00:00:00 2001 From: thexai <58434170+thexai@users.noreply.github.com> Date: Sat, 15 Nov 2025 10:52:11 +0100 Subject: [PATCH 1/2] Fix build with current CMake versions --- .github/workflows/build.yml | 4 ---- patches/libbluray.diff | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7f9d5b0..ef83160 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -36,10 +36,6 @@ jobs: choco install nasm ${{ matrix.platform.arch == 'win32' && '--x86' || '' }} "C:\Program Files${{ matrix.platform.arch == 'win32' && ' (x86)' || '' }}\NASM" | Out-File -FilePath "$env:GITHUB_PATH" -Append - - name: Install CMake v3.28.3 - # libbluray fails to build with CMake 3.29.0 - run: choco install -y CMake --version 3.28.3 --force - - name: Build # Build your program with the given configuration run: .\DoRelease.ps1 -Platforms ${{ matrix.arch }} ${{ matrix.platform }} -VsVersion ${{ env.VS_VERSION }} -SdkVersion "${{ env.SDK_VERSION }}" diff --git a/patches/libbluray.diff b/patches/libbluray.diff index 72bffaf..4594cdb 100644 --- a/patches/libbluray.diff +++ b/patches/libbluray.diff @@ -1,7 +1,7 @@ --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,291 @@ -+cmake_minimum_required(VERSION 3.0) ++cmake_minimum_required(VERSION 3.15) + +set(BLURAY_VERSION_MAJOR 1) +set(BLURAY_VERSION_MINOR 3) From f644012e5aa7e81e6b598aa133ca9c09d95d5eb9 Mon Sep 17 00:00:00 2001 From: thexai <58434170+thexai@users.noreply.github.com> Date: Sun, 12 Oct 2025 09:14:23 +0200 Subject: [PATCH 2/2] Bump Python to 3.14.0 Bump Pillow to 12.0.0 Add new dependency zstd 1.5.7 Bump xz to 5.8.1 Bump libffi to 3.4.4 --- BuildAllPlatforms.ps1 | 1 + CMakeLists.txt | 44 +++++-- patches/libffi.diff | 27 ++++- patches/xz.diff | 260 ++---------------------------------------- patches/zstd.diff | 54 +++++++++ 5 files changed, 119 insertions(+), 267 deletions(-) create mode 100644 patches/zstd.diff diff --git a/BuildAllPlatforms.ps1 b/BuildAllPlatforms.ps1 index 57ea7b5..3c9d6e4 100644 --- a/BuildAllPlatforms.ps1 +++ b/BuildAllPlatforms.ps1 @@ -64,6 +64,7 @@ Param( 'winflexbison', 'xz', 'zlib', + 'zstd', 'uwp_compat', 'DependenciesRequired', 'DependenciesRequiredDebug' diff --git a/CMakeLists.txt b/CMakeLists.txt index d91652e..ae1827d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -197,14 +197,19 @@ add_dependency_project_package(zlib 1.3.1) ExternalProject_Add(xz DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/downloads - URL https://netix.dl.sourceforge.net/project/lzmautils/xz-5.2.5.tar.gz - URL_HASH SHA256=f6f4910fd033078738bd82bfba4f49219d03b17eb0794eb91efbae419f4aba10 + URL https://github.com/tukaani-project/xz/releases/download/v5.8.1/xz-5.8.1.tar.gz + URL_HASH SHA256=507825b599356c10dca1cd720c9d0d0c9d5400b9de300af00e4d1ea150795543 PATCH_COMMAND ${PATCH} -p1 -i ${CMAKE_SOURCE_DIR}/patches/$(TargetName).diff CMAKE_ARGS ${ADDITIONAL_ARGS} -DCMAKE_INSTALL_PREFIX:PATH=${INSTALL_PREFIX} + -DXZ_TOOL_XZ:BOOL=OFF + -DXZ_TOOL_LZMAINFO:BOOL=OFF + -DXZ_TOOL_XZDEC:BOOL=OFF + -DXZ_TOOL_LZMADEC:BOOL=OFF + -DXZ_DOC:BOOL=OFF ) -add_dependency_project_package(xz 5.2.5) +add_dependency_project_package(xz 5.8.1) ExternalProject_Add(miniwdk GIT_REPOSITORY https://github.com/Paxxi/miniwdk @@ -548,26 +553,40 @@ add_dependency_project_package(mariadb-connector-c 3.3.17) ExternalProject_Add(libffi DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/downloads - URL https://github.com/libffi/libffi/archive/refs/tags/v3.3-rc1.tar.gz - URL_HASH SHA256=87cbd612fa20f8eb7b91a3e996c5032b813644deee6c2d96724b50752296737e + URL https://github.com/libffi/libffi/archive/refs/tags/v3.4.4.tar.gz + URL_HASH SHA256=828639972716ed18833df7b659b32060591fe0eb625a8d34078920d33c2dc867 PATCH_COMMAND ${PATCH} -p1 -i ${CMAKE_SOURCE_DIR}/patches/$(TargetName).diff CMAKE_ARGS ${ADDITIONAL_ARGS} -DCMAKE_INSTALL_PREFIX:PATH=${INSTALL_PREFIX} ) -add_dependency_project_package(libffi 3.3.0) +add_dependency_project_package(libffi 3.4.4) + +ExternalProject_Add(zstd + DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/downloads + URL https://github.com/facebook/zstd/releases/download/v1.5.7/zstd-1.5.7.tar.gz + URL_HASH SHA256=eb33e51f49a15e023950cd7825ca74a4a2b43db8354825ac24fc1b7ee09e6fa3 + PATCH_COMMAND ${PATCH} -p1 -i ${CMAKE_SOURCE_DIR}/patches/$(TargetName).diff + SOURCE_SUBDIR build/cmake + CMAKE_ARGS + ${ADDITIONAL_ARGS} + -DCMAKE_INSTALL_PREFIX:PATH=${INSTALL_PREFIX} + -DZSTD_BUILD_STATIC:BOOL=ON + -DZSTD_BUILD_DYNAMIC:BOOL=OFF +) +add_dependency_project_package(zstd 1.5.7) ExternalProject_Add(python - DEPENDS bzip2 openssl sqlite zlib expat libffi xz + DEPENDS bzip2 openssl sqlite zlib expat libffi xz zstd GIT_REPOSITORY https://github.com/thexai/cpython - GIT_TAG 09051503302b44a5df9f174154b98c5607542719 + GIT_TAG 99807d137c8f7cf125156613d3e3efc4d3fe0007 GIT_SHALLOW ON CMAKE_ARGS ${ADDITIONAL_ARGS} -DCMAKE_INSTALL_PREFIX:PATH=${INSTALL_PREFIX} - -DCMAKE_PREFIX_PATH:PATH=${PREFIX}%3B%3B${PREFIX}/bzip2%3B%3B${PREFIX}/openssl%3B%3B${PREFIX}/sqlite%3B%3B${PREFIX}/zlib%3B%3B${PREFIX}/libffi%3B%3B${PREFIX}/xz%3B%3B${PREFIX}/expat + -DCMAKE_PREFIX_PATH:PATH=${PREFIX}%3B%3B${PREFIX}/bzip2%3B%3B${PREFIX}/openssl%3B%3B${PREFIX}/sqlite%3B%3B${PREFIX}/zlib%3B%3B${PREFIX}/libffi%3B%3B${PREFIX}/xz%3B%3B${PREFIX}/expat%3B%3B${PREFIX}/zstd ) -add_dependency_project_package(python 3.13.9) +add_dependency_project_package(python 3.14.0) ExternalProject_Add(libjpeg-turbo GIT_REPOSITORY https://github.com/Paxxi/libjpeg-turbo @@ -587,14 +606,14 @@ add_dependency_project_package(libjpeg-turbo 2.0.3) ExternalProject_Add(pillow DEPENDS freetype libjpeg-turbo python zlib GIT_REPOSITORY https://github.com/thexai/Pillow - GIT_TAG dbde60e30ffc8bfe8c461b576d41343f46e9553e + GIT_TAG 31fd143d0e8338a0c226321cd18f00bec3cbeaf1 GIT_SHALLOW ON CMAKE_ARGS ${ADDITIONAL_ARGS} -DCMAKE_INSTALL_PREFIX:PATH=${INSTALL_PREFIX} -DCMAKE_PREFIX_PATH:PATH=${PREFIX}%3B%3B${PREFIX}/freetype%3B%3B${PREFIX}/libjpeg-turbo%3B%3B${PREFIX}/python%3B%3B${PREFIX}/zlib ) -add_dependency_project_package(pillow 11.2.1) +add_dependency_project_package(pillow 12.0.0) ExternalProject_Add(pycryptodome DEPENDS python @@ -731,6 +750,7 @@ add_custom_target(DependenciesRequired winflexbison xz zlib + zstd uwp_compat ) diff --git a/patches/libffi.diff b/patches/libffi.diff index d47bb3b..c835b6a 100644 --- a/patches/libffi.diff +++ b/patches/libffi.diff @@ -5,13 +5,13 @@ index 0000000..9d0f169 +++ b/CMakeLists.txt @@ -0,0 +1,209 @@ +cmake_minimum_required(VERSION 3.9) -+project(libffi VERSION 3.3 LANGUAGES C ASM) ++project(libffi VERSION 3.4.4 LANGUAGES C ASM) + +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules) + + +# config variables for ffi.h.in -+set(VERSION 3.3) ++set(VERSION 3.4.4) + + +set(HAVE_LONG_DOUBLE 0) @@ -243,6 +243,23 @@ index 0000000..5e58503 +include(CMakeASMInformation) +set(ASM_DIALECT) \ No newline at end of file +diff --git a/cmake/modules/CMakeASM_ARMASMLinkerInformation.cmake b/cmake/modules/CMakeASM_ARMASMLinkerInformation.cmake +new file mode 100644 +index 0000000..7049623 +--- /dev/null ++++ b/cmake/modules/CMakeASM_ARMASMLinkerInformation.cmake +@@ -0,0 +1,10 @@ ++# Distributed under the OSI-approved BSD 3-Clause License. See accompanying ++# file LICENSE.rst or https://cmake.org/licensing for details. ++ ++ ++# support for the MS assembler, masm and masm64 ++ ++# Load the generic ASMInformation file: ++set(ASM_DIALECT "_MASM") ++include(Internal/CMakeASMLinkerInformation) ++set(ASM_DIALECT) +\ No newline at end of file diff --git a/cmake/modules/CMakeDetermineASM_ARMASMCompiler.cmake b/cmake/modules/CMakeDetermineASM_ARMASMCompiler.cmake new file mode 100644 index 0000000..9ba81be @@ -321,10 +338,10 @@ index 0000000..8461c3b +#define PACKAGE "libffi" +#define PACKAGE_BUGREPORT "http://github.com/atgreen/libffi/issues" +#define PACKAGE_NAME "libffi" -+#define PACKAGE_STRING "libffi 3.3" ++#define PACKAGE_STRING "libffi 3.4.4" +#define PACKAGE_TARNAME "libffi" +#define PACKAGE_URL "" -+#define PACKAGE_VERSION "3.3" ++#define PACKAGE_VERSION "3.4.4" +#define SIZEOF_DOUBLE 8 +#define SIZEOF_LONG_DOUBLE 8 +#ifndef _WIN64 @@ -338,7 +355,7 @@ index 0000000..8461c3b +#define SYMBOL_UNDERSCORE 1 +#endif +#endif -+#define VERSION "3.3" ++#define VERSION "3.4.4" +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 diff --git a/patches/xz.diff b/patches/xz.diff index 2e99515..9c34ce0 100644 --- a/patches/xz.diff +++ b/patches/xz.diff @@ -1,255 +1,15 @@ diff --git a/CMakeLists.txt b/CMakeLists.txt -new file mode 100644 -index 0000000..4c6e540 ---- /dev/null +index 32506cdd..1f25e806 100644 +--- a/CMakeLists.txt +++ b/CMakeLists.txt -@@ -0,0 +1,240 @@ -+cmake_minimum_required(VERSION 3.2) -+ -+project(xz VERSION 5.2.5 LANGUAGES C) -+ +@@ -1814,6 +1814,10 @@ if(NOT HAVE_GETOPT_LONG) + ) + endif() + +if(MSVC) -+ set(CMAKE_DEBUG_POSTFIX "d") -+endif() -+ -+add_library(lzma -+ src/common/tuklib_cpucores.c -+ src/common/tuklib_physmem.c -+ src/liblzma/check/check.c -+ src/liblzma/check/crc32_fast.c -+ src/liblzma/check/crc32_table.c -+ src/liblzma/check/crc64_fast.c -+ src/liblzma/check/crc64_table.c -+ src/liblzma/check/sha256.c -+ src/liblzma/common/alone_decoder.c -+ src/liblzma/common/alone_encoder.c -+ src/liblzma/common/auto_decoder.c -+ src/liblzma/common/block_buffer_decoder.c -+ src/liblzma/common/block_buffer_encoder.c -+ src/liblzma/common/block_decoder.c -+ src/liblzma/common/block_encoder.c -+ src/liblzma/common/block_header_decoder.c -+ src/liblzma/common/block_header_encoder.c -+ src/liblzma/common/block_util.c -+ src/liblzma/common/common.c -+ src/liblzma/common/easy_buffer_encoder.c -+ src/liblzma/common/easy_decoder_memusage.c -+ src/liblzma/common/easy_encoder.c -+ src/liblzma/common/easy_encoder_memusage.c -+ src/liblzma/common/easy_preset.c -+ src/liblzma/common/filter_buffer_decoder.c -+ src/liblzma/common/filter_buffer_encoder.c -+ src/liblzma/common/filter_common.c -+ src/liblzma/common/filter_decoder.c -+ src/liblzma/common/filter_encoder.c -+ src/liblzma/common/filter_flags_decoder.c -+ src/liblzma/common/filter_flags_encoder.c -+ src/liblzma/common/hardware_cputhreads.c -+ src/liblzma/common/hardware_physmem.c -+ src/liblzma/common/index.c -+ src/liblzma/common/index_decoder.c -+ src/liblzma/common/index_encoder.c -+ src/liblzma/common/index_hash.c -+ src/liblzma/common/outqueue.c -+ src/liblzma/common/stream_buffer_decoder.c -+ src/liblzma/common/stream_buffer_encoder.c -+ src/liblzma/common/stream_decoder.c -+ src/liblzma/common/stream_encoder.c -+ src/liblzma/common/stream_encoder_mt.c -+ src/liblzma/common/stream_flags_common.c -+ src/liblzma/common/stream_flags_decoder.c -+ src/liblzma/common/stream_flags_encoder.c -+ src/liblzma/common/vli_decoder.c -+ src/liblzma/common/vli_encoder.c -+ src/liblzma/common/vli_size.c -+ src/liblzma/delta/delta_common.c -+ src/liblzma/delta/delta_decoder.c -+ src/liblzma/delta/delta_encoder.c -+ src/liblzma/lzma/fastpos_table.c -+ src/liblzma/lzma/lzma2_decoder.c -+ src/liblzma/lzma/lzma2_encoder.c -+ src/liblzma/lzma/lzma_decoder.c -+ src/liblzma/lzma/lzma_encoder.c -+ src/liblzma/lzma/lzma_encoder_optimum_fast.c -+ src/liblzma/lzma/lzma_encoder_optimum_normal.c -+ src/liblzma/lzma/lzma_encoder_presets.c -+ src/liblzma/lz/lz_decoder.c -+ src/liblzma/lz/lz_encoder.c -+ src/liblzma/lz/lz_encoder_mf.c -+ src/liblzma/rangecoder/price_table.c -+ src/liblzma/simple/arm.c -+ src/liblzma/simple/armthumb.c -+ src/liblzma/simple/ia64.c -+ src/liblzma/simple/powerpc.c -+ src/liblzma/simple/simple_coder.c -+ src/liblzma/simple/simple_decoder.c -+ src/liblzma/simple/simple_encoder.c -+ src/liblzma/simple/sparc.c -+ src/liblzma/simple/x86.c -+ src/common/mythread.h -+ src/common/sysdefs.h -+ src/common/tuklib_common.h -+ src/common/tuklib_config.h -+ src/common/tuklib_cpucores.h -+ src/common/tuklib_integer.h -+ src/common/tuklib_physmem.h -+ src/liblzma/api/lzma.h -+ src/liblzma/api/lzma/base.h -+ src/liblzma/api/lzma/bcj.h -+ src/liblzma/api/lzma/block.h -+ src/liblzma/api/lzma/check.h -+ src/liblzma/api/lzma/container.h -+ src/liblzma/api/lzma/delta.h -+ src/liblzma/api/lzma/filter.h -+ src/liblzma/api/lzma/hardware.h -+ src/liblzma/api/lzma/index.h -+ src/liblzma/api/lzma/index_hash.h -+ src/liblzma/api/lzma/lzma12.h -+ src/liblzma/api/lzma/stream_flags.h -+ src/liblzma/api/lzma/version.h -+ src/liblzma/api/lzma/vli.h -+ src/liblzma/check/check.h -+ src/liblzma/check/crc32_table_be.h -+ src/liblzma/check/crc32_table_le.h -+ src/liblzma/check/crc64_table_be.h -+ src/liblzma/check/crc64_table_le.h -+ src/liblzma/check/crc_macros.h -+ src/liblzma/common/alone_decoder.h -+ src/liblzma/common/block_buffer_encoder.h -+ src/liblzma/common/block_decoder.h -+ src/liblzma/common/block_encoder.h -+ src/liblzma/common/common.h -+ src/liblzma/common/easy_preset.h -+ src/liblzma/common/filter_common.h -+ src/liblzma/common/filter_decoder.h -+ src/liblzma/common/filter_encoder.h -+ src/liblzma/common/index.h -+ src/liblzma/common/index_encoder.h -+ src/liblzma/common/memcmplen.h -+ src/liblzma/common/outqueue.h -+ src/liblzma/common/stream_decoder.h -+ src/liblzma/common/stream_flags_common.h -+ src/liblzma/delta/delta_common.h -+ src/liblzma/delta/delta_decoder.h -+ src/liblzma/delta/delta_encoder.h -+ src/liblzma/delta/delta_private.h -+ src/liblzma/lzma/fastpos.h -+ src/liblzma/lzma/lzma2_decoder.h -+ src/liblzma/lzma/lzma2_encoder.h -+ src/liblzma/lzma/lzma_common.h -+ src/liblzma/lzma/lzma_decoder.h -+ src/liblzma/lzma/lzma_encoder.h -+ src/liblzma/lzma/lzma_encoder_private.h -+ src/liblzma/lz/lz_decoder.h -+ src/liblzma/lz/lz_encoder.h -+ src/liblzma/lz/lz_encoder_hash.h -+ src/liblzma/lz/lz_encoder_hash_table.h -+ src/liblzma/rangecoder/price.h -+ src/liblzma/rangecoder/range_common.h -+ src/liblzma/rangecoder/range_decoder.h -+ src/liblzma/rangecoder/range_encoder.h -+ src/liblzma/simple/simple_coder.h -+ src/liblzma/simple/simple_decoder.h -+ src/liblzma/simple/simple_encoder.h -+ src/liblzma/simple/simple_private.h -+) -+ -+if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/windows/vs2019/config.h) -+ target_sources(lzma -+ PRIVATE -+ windows/vs2019/config.h -+ ) -+set(WINDOWS_CONFIG_DIR ${CMAKE_CURRENT_SOURCE_DIR}/windows/vs2019/) -+elseif (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/windows/vs2017/config.h) -+ target_sources(lzma -+ PRIVATE -+ windows/vs2017/config.h -+ ) -+ set(WINDOWS_CONFIG_DIR ${CMAKE_CURRENT_SOURCE_DIR}/windows/vs2017/) ++ add_definitions(-D_CRT_SECURE_NO_WARNINGS) +endif() + -+target_include_directories(lzma -+ PRIVATE -+ $ -+ $ -+ $ -+ $ -+ $ -+ $ -+ $ -+ $ -+ $ -+ $ -+ $ -+ $ -+ $ -+ INTERFACE -+ $ -+ PUBLIC -+ $ -+) -+ -+target_compile_definitions(lzma -+ PRIVATE -+ _CRT_SECURE_NO_WARNINGS -+ _CRT_STDC_NO_DEPRECATE -+ HAVE_CONFIG_H -+ INTERFACE -+ LZMA_API_CALL= -+ LZMA_API_IMPORT= -+) -+ -+include(CMakePackageConfigHelpers) -+write_basic_package_version_file( -+ ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake -+ VERSION ${PROJECT_VERSION} -+ COMPATIBILITY AnyNewerVersion -+) -+ -+install(TARGETS lzma EXPORT lzma -+ RUNTIME DESTINATION bin -+ ARCHIVE DESTINATION lib -+ LIBRARY DESTINATION lib -+) -+ -+if(MSVC) -+ set_target_properties(lzma PROPERTIES COMPILE_PDB_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR} COMPILE_PDB_NAME lzma COMPILE_PDB_NAME_DEBUG lzmad) -+ install(FILES ${PROJECT_BINARY_DIR}/RelWithDebInfo/lzma.pdb DESTINATION lib CONFIGURATIONS RelWithDebInfo) -+ install(FILES ${PROJECT_BINARY_DIR}/Debug/lzmad.pdb DESTINATION lib CONFIGURATIONS Debug) -+endif() -+ -+install(DIRECTORY -+ ${CMAKE_CURRENT_SOURCE_DIR}/src/liblzma/api/ -+ DESTINATION include -+) -+ -+install(EXPORT lzma -+ FILE -+ ${PROJECT_NAME}.cmake -+ NAMESPACE -+ ${PROJECT_NAME}:: -+ DESTINATION -+ lib/cmake/${PROJECT_NAME} -+) -+ -+install(FILES -+ cmake/${PROJECT_NAME}-config.cmake -+ ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake -+ DESTINATION -+ lib/cmake/${PROJECT_NAME} -+) -+ -+export(TARGETS lzma -+ FILE -+ ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake -+ NAMESPACE ${PROJECT_NAME}:: -+) -\ No newline at end of file -diff --git a/cmake/xz-config.cmake b/cmake/xz-config.cmake -new file mode 100644 -index 0000000..7eb2ca2 ---- /dev/null -+++ b/cmake/xz-config.cmake -@@ -0,0 +1 @@ -+include(${CMAKE_CURRENT_LIST_DIR}/xz.cmake) -\ No newline at end of file + + ############################################################################# + # Sandboxing for the command line tools diff --git a/patches/zstd.diff b/patches/zstd.diff new file mode 100644 index 0000000..fc09fd3 --- /dev/null +++ b/patches/zstd.diff @@ -0,0 +1,54 @@ +diff --git a/programs/fileio.c b/programs/fileio.c +index 77f3d35f..6188a8e2 100644 +--- a/programs/fileio.c ++++ b/programs/fileio.c +@@ -799,6 +799,37 @@ static void FIO_munmap(FIO_Dict_t* dict) + dict->dictBuffer = NULL; + dict->dictBufferSize = 0; + } ++#if defined(WINAPI_FAMILY) && WINAPI_FAMILY != WINAPI_FAMILY_DESKTOP_APP ++static inline wchar_t* to_utf16(const char* str) ++{ ++ if (str == NULL) ++ return NULL; ++ ++ size_t length = strlen(str); ++ ++ int result = MultiByteToWideChar(CP_UTF8, 0, str, (int)length, NULL, 0); ++ if (result == 0) ++ return NULL; ++ ++ length = (size_t)result + 1; ++ wchar_t* strW = (wchar_t*)malloc(length * sizeof(wchar_t)); ++ if (strW == NULL) ++ return NULL; ++ ++ result = MultiByteToWideChar(CP_UTF8, 0, str, result, strW, (int)length); ++ ++ if (result == 0) ++ { ++ free(strW); ++ return NULL; ++ } ++ ++ if (strW[length - 1] != L'\0') ++ strW[length - 1] = L'\0'; ++ ++ return strW; ++} ++#endif + static size_t FIO_setDictBufferMMap(FIO_Dict_t* dict, const char* fileName, FIO_prefs_t* const prefs, stat_t* dictFileStat) + { + HANDLE fileHandle, mapping; +@@ -812,7 +843,11 @@ static size_t FIO_setDictBufferMMap(FIO_Dict_t* dict, const char* fileName, FIO_ + + DISPLAYLEVEL(4,"Loading %s as dictionary \n", fileName); + ++#if defined(WINAPI_FAMILY) && WINAPI_FAMILY != WINAPI_FAMILY_DESKTOP_APP ++ fileHandle = CreateFile2(to_utf16(fileName), GENERIC_READ, FILE_SHARE_READ, OPEN_EXISTING, NULL); ++#else + fileHandle = CreateFileA(fileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_READONLY, NULL); ++#endif + + if (fileHandle == INVALID_HANDLE_VALUE) { + EXM_THROW(33, "Couldn't open dictionary %s: %s", fileName, strerror(errno));