* [PATCH 0/1] assimp: Remove it @ 2021-09-07 9:17 Robert Yang 2021-09-07 9:17 ` [PATCH 1/1] " Robert Yang 2021-09-09 5:06 ` [OE-core] [PATCH 0/1] " Khem Raj 0 siblings, 2 replies; 17+ messages in thread From: Robert Yang @ 2021-09-07 9:17 UTC (permalink / raw) To: openembedded-core The following changes since commit 70de1dbb660461bdf0613494f53ec4c78738ae2a: vim: Add packageconfig for sound notification support (2021-09-06 09:49:13 +0100) are available in the Git repository at: git://git.openembedded.org/openembedded-core-contrib rbt/assimp http://cgit.openembedded.org/openembedded-core-contrib/log/?h=rbt/assimp Robert Yang (1): assimp: Remove it meta/conf/distro/include/maintainers.inc | 1 - ...hared-lib-from-_IMPORT_CHECK_TARGETS.patch | 32 - ...hub.com-assimp-assimp-issues-2733-up.patch | 1664 ----------------- .../use-GNUInstallDirs-where-possible.patch | 257 --- meta/recipes-graphics/vulkan/assimp_5.0.1.bb | 26 - 5 files changed, 1980 deletions(-) delete mode 100644 meta/recipes-graphics/vulkan/assimp/0001-assimp-remove-shared-lib-from-_IMPORT_CHECK_TARGETS.patch delete mode 100644 meta/recipes-graphics/vulkan/assimp/0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch delete mode 100644 meta/recipes-graphics/vulkan/assimp/use-GNUInstallDirs-where-possible.patch delete mode 100644 meta/recipes-graphics/vulkan/assimp_5.0.1.bb -- 2.17.1 ^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH 1/1] assimp: Remove it 2021-09-07 9:17 [PATCH 0/1] assimp: Remove it Robert Yang @ 2021-09-07 9:17 ` Robert Yang 2021-09-07 12:04 ` [OE-core] " Randy MacLeod 2021-09-09 5:06 ` [OE-core] [PATCH 0/1] " Khem Raj 1 sibling, 1 reply; 17+ messages in thread From: Robert Yang @ 2021-09-07 9:17 UTC (permalink / raw) To: openembedded-core Remove it since it has license issues: * scripts/StepImporter/schema_ifc2x3.exp Copyright by: International Alliance for Interoperability, 1996-2005 All rights reserved. No part of this documentation may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, without the prior written permission of the owner * test/models-nonbsd/X/dwarf-Read-Me.txt RESTRICTIONS: This model pack is available for use in freeware, shareware, commercial games/software with the following restrictions:- **You may not sell/re-sell this model pack or claim it as your own. ***You may not redistribute this pack in some other model pack through a website or on a compilation CD of any kind, without my written consent. Psi http://www.psionic3d.co.uk * test/models-nonbsd/B3D/turtle.source.txt Copyright 2004, Psionic Design e-mail: psionic@blueyonder.co.uk Used with permission. RESTRICTIONS: This model pack is available for use in freeware, shareware, commercial games/software with the following restrictions:- **You may not sell/re-sell this model pack or claim it as your own. ***You may not redistribute this pack in some other model pack through a website or on a compilation CD of any kind, without my written consent. And no recipes depend on it, so remove it. Signed-off-by: Robert Yang <liezhi.yang@windriver.com> --- meta/conf/distro/include/maintainers.inc | 1 - ...hared-lib-from-_IMPORT_CHECK_TARGETS.patch | 32 - ...hub.com-assimp-assimp-issues-2733-up.patch | 1664 ----------------- .../use-GNUInstallDirs-where-possible.patch | 257 --- meta/recipes-graphics/vulkan/assimp_5.0.1.bb | 26 - 5 files changed, 1980 deletions(-) delete mode 100644 meta/recipes-graphics/vulkan/assimp/0001-assimp-remove-shared-lib-from-_IMPORT_CHECK_TARGETS.patch delete mode 100644 meta/recipes-graphics/vulkan/assimp/0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch delete mode 100644 meta/recipes-graphics/vulkan/assimp/use-GNUInstallDirs-where-possible.patch delete mode 100644 meta/recipes-graphics/vulkan/assimp_5.0.1.bb diff --git a/meta/conf/distro/include/maintainers.inc b/meta/conf/distro/include/maintainers.inc index 0e8185f4e3..e560ba39dd 100644 --- a/meta/conf/distro/include/maintainers.inc +++ b/meta/conf/distro/include/maintainers.inc @@ -46,7 +46,6 @@ RECIPE_MAINTAINER:pn-apt = "Aníbal Limón <limon.anibal@gmail.com>" RECIPE_MAINTAINER:pn-argp-standalone = "Khem Raj <raj.khem@gmail.com>" RECIPE_MAINTAINER:pn-asciidoc = "Yi Zhao <yi.zhao@windriver.com>" RECIPE_MAINTAINER:pn-aspell = "Anuj Mittal <anuj.mittal@intel.com>" -RECIPE_MAINTAINER:pn-assimp = "Anuj Mittal <anuj.mittal@intel.com>" RECIPE_MAINTAINER:pn-at = "Chen Qi <Qi.Chen@windriver.com>" RECIPE_MAINTAINER:pn-at-spi2-atk = "Tim Orling <timothy.t.orling@intel.com>" RECIPE_MAINTAINER:pn-at-spi2-core = "Tim Orling <timothy.t.orling@intel.com>" diff --git a/meta/recipes-graphics/vulkan/assimp/0001-assimp-remove-shared-lib-from-_IMPORT_CHECK_TARGETS.patch b/meta/recipes-graphics/vulkan/assimp/0001-assimp-remove-shared-lib-from-_IMPORT_CHECK_TARGETS.patch deleted file mode 100644 index 1078148d6b..0000000000 --- a/meta/recipes-graphics/vulkan/assimp/0001-assimp-remove-shared-lib-from-_IMPORT_CHECK_TARGETS.patch +++ /dev/null @@ -1,32 +0,0 @@ -From: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com> -Date: Fri, 13 Aug 2021 16:42:48 +0530 -Subject: [PATCH] assimp: remove shared lib from _IMPORT_CHECK_TARGETS - -In the target assimp::assimp shared library verification removed -as it is giving configuration error when used by 3rd part component to -configure itself using assimp::assimp target - -Upstream-Status: Inappropriate [oe specific] - -Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com> ---- - assimpTargets-release.cmake.in | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/assimpTargets-release.cmake.in b/assimpTargets-release.cmake.in -index cd2fac7e0..52edc7990 100644 ---- a/assimpTargets-release.cmake.in -+++ b/assimpTargets-release.cmake.in -@@ -72,8 +72,8 @@ else() - IMPORTED_SONAME_RELEASE "${sharedLibraryName}" - IMPORTED_LOCATION_RELEASE "@CMAKE_INSTALL_FULL_LIBDIR@/${sharedLibraryName}" - ) -- list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp ) -- list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${sharedLibraryName}" ) -+ #list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp ) -+ #list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${sharedLibraryName}" ) - else() - set(staticLibraryName "libassimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_STATIC_LIBRARY_SUFFIX@") - set_target_properties(assimp::assimp PROPERTIES --- -2.17.1 diff --git a/meta/recipes-graphics/vulkan/assimp/0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch b/meta/recipes-graphics/vulkan/assimp/0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch deleted file mode 100644 index 87a1658710..0000000000 --- a/meta/recipes-graphics/vulkan/assimp/0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch +++ /dev/null @@ -1,1664 +0,0 @@ -From 7fc220b2350d78942fb3935cad0b1564418ebe8f Mon Sep 17 00:00:00 2001 -From: Kim Kulling <kim.kulling@googlemail.com> -Date: Tue, 19 Nov 2019 20:30:40 +0100 -Subject: [PATCH] closes https://github.com/assimp/assimp/issues/2733: update - of zlip to fix gcc build for v9.2.0 32 bit - -Upstream-Status: Backport [https://github.com/assimp/assimp/commit/f78446b14aff46db2ef27d062a275b6a01fd68b1] -Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com> ---- - contrib/zip/.gitignore | 2 + - contrib/zip/CMakeLists.txt | 83 +++++- - contrib/zip/README.md | 12 +- - contrib/zip/appveyor.yml | 2 +- - contrib/zip/src/miniz.h | 457 ++++++++++++++++++++++++++++---- - contrib/zip/src/zip.c | 62 +++-- - contrib/zip/src/zip.h | 457 ++++++++++++++++---------------- - contrib/zip/test/CMakeLists.txt | 27 +- - contrib/zip/test/test.c | 38 ++- - contrib/zip/test/test_miniz.c | 25 +- - 10 files changed, 821 insertions(+), 344 deletions(-) - -diff --git a/contrib/zip/.gitignore b/contrib/zip/.gitignore -index a7904a1e..49b2cb2f 100644 ---- a/contrib/zip/.gitignore -+++ b/contrib/zip/.gitignore -@@ -1,6 +1,7 @@ - /build/ - /test/build/ - /xcodeproj/ -+.vscode/ - - # Object files - *.o -@@ -54,3 +55,4 @@ zip.dir/ - test/test.exe.vcxproj.filters - test/test.exe.vcxproj - test/test.exe.dir/ -+ -diff --git a/contrib/zip/CMakeLists.txt b/contrib/zip/CMakeLists.txt -index b46dbb1d..77916d2e 100644 ---- a/contrib/zip/CMakeLists.txt -+++ b/contrib/zip/CMakeLists.txt -@@ -1,10 +1,14 @@ --cmake_minimum_required(VERSION 2.8) --project(zip) --enable_language(C) -+cmake_minimum_required(VERSION 3.0) -+ -+project(zip -+ LANGUAGES C -+ VERSION "0.1.15") - set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) - -+option(CMAKE_DISABLE_TESTING "Disable test creation" OFF) -+ - if (MSVC) -- # Use secure functions by defaualt and suppress warnings about "deprecated" functions -+ # Use secure functions by default and suppress warnings about "deprecated" functions - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT=1") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D _CRT_NONSTDC_NO_WARNINGS=1 /D _CRT_SECURE_NO_WARNINGS=1") -@@ -12,28 +16,80 @@ elseif ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" OR - "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" OR - "${CMAKE_C_COMPILER_ID}" STREQUAL "AppleClang") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -Wall -Wextra -Werror -pedantic") -+ if(ENABLE_COVERAGE) -+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 -fprofile-arcs -ftest-coverage") -+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage") -+ endif() - endif (MSVC) - - # zip - set(SRC src/miniz.h src/zip.h src/zip.c) - add_library(${PROJECT_NAME} ${SRC}) --target_include_directories(${PROJECT_NAME} INTERFACE src) -+target_include_directories(${PROJECT_NAME} PUBLIC -+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src> -+ $<INSTALL_INTERFACE:include> -+) - - # test - if (NOT CMAKE_DISABLE_TESTING) - enable_testing() - add_subdirectory(test) - find_package(Sanitizers) -- add_sanitizers(${PROJECT_NAME} test.exe) -- add_sanitizers(${PROJECT_NAME} test_miniz.exe) -+ add_sanitizers(${PROJECT_NAME} ${test_out} ${test_miniz_out}) - endif() - -+#### -+# Installation (https://github.com/forexample/package-example) { -+ -+set(CONFIG_INSTALL_DIR "lib/cmake/${PROJECT_NAME}") -+set(INCLUDE_INSTALL_DIR "include") -+ -+set(GENERATED_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated") -+ -+# Configuration -+set(VERSION_CONFIG "${GENERATED_DIR}/${PROJECT_NAME}ConfigVersion.cmake") -+set(PROJECT_CONFIG "${GENERATED_DIR}/${PROJECT_NAME}Config.cmake") -+set(TARGETS_EXPORT_NAME "${PROJECT_NAME}Targets") -+set(NAMESPACE "${PROJECT_NAME}::") -+ -+# Include module with fuction 'write_basic_package_version_file' -+include(CMakePackageConfigHelpers) -+ -+# Note: PROJECT_VERSION is used as a VERSION -+write_basic_package_version_file( -+ "${VERSION_CONFIG}" COMPATIBILITY SameMajorVersion -+) -+ -+# Use variables: -+# * TARGETS_EXPORT_NAME -+# * PROJECT_NAME -+configure_package_config_file( -+ "cmake/Config.cmake.in" -+ "${PROJECT_CONFIG}" -+ INSTALL_DESTINATION "${CONFIG_INSTALL_DIR}" -+) -+ -+install( -+ FILES "${PROJECT_CONFIG}" "${VERSION_CONFIG}" -+ DESTINATION "${CONFIG_INSTALL_DIR}" -+) -+ -+install( -+ EXPORT "${TARGETS_EXPORT_NAME}" -+ NAMESPACE "${NAMESPACE}" -+ DESTINATION "${CONFIG_INSTALL_DIR}" -+) -+ -+# } -+ - install(TARGETS ${PROJECT_NAME} -+ EXPORT ${TARGETS_EXPORT_NAME} - RUNTIME DESTINATION bin - ARCHIVE DESTINATION lib - LIBRARY DESTINATION lib -- COMPONENT library) --install(FILES ${PROJECT_SOURCE_DIR}/src/zip.h DESTINATION include) -+ INCLUDES DESTINATION ${INCLUDE_INSTALL_DIR} -+) -+install(FILES ${PROJECT_SOURCE_DIR}/src/zip.h DESTINATION ${INCLUDE_INSTALL_DIR}/zip) - - # uninstall target (https://gitlab.kitware.com/cmake/community/wikis/FAQ#can-i-do-make-uninstall-with-cmake) - if(NOT TARGET uninstall) -@@ -45,3 +101,12 @@ if(NOT TARGET uninstall) - add_custom_target(uninstall - COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake/cmake_uninstall.cmake) - endif() -+ -+find_package(Doxygen) -+if(DOXYGEN_FOUND) -+ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY) -+ add_custom_target(doc -+ ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile -+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} -+ COMMENT "Generating API documentation with Doxygen" VERBATIM) -+endif() -diff --git a/contrib/zip/README.md b/contrib/zip/README.md -index d5fb8cd2..14eb9a34 100644 ---- a/contrib/zip/README.md -+++ b/contrib/zip/README.md -@@ -71,7 +71,7 @@ int arg = 2; - zip_extract("foo.zip", "/tmp", on_extract_entry, &arg); - ``` - --* Extract a zip entry into memory. -+* Extract a zip entry into memory. - ```c - void *buf = NULL; - size_t bufsize; -@@ -89,7 +89,7 @@ zip_close(zip); - free(buf); - ``` - --* Extract a zip entry into memory (no internal allocation). -+* Extract a zip entry into memory (no internal allocation). - ```c - unsigned char *buf; - size_t bufsize; -@@ -110,7 +110,7 @@ zip_close(zip); - free(buf); - ``` - --* Extract a zip entry into memory using callback. -+* Extract a zip entry into memory using callback. - ```c - struct buffer_t { - char *data; -@@ -144,7 +144,7 @@ free(buf.data); - ``` - - --* Extract a zip entry into a file. -+* Extract a zip entry into a file. - ```c - struct zip_t *zip = zip_open("foo.zip", 0, 'r'); - { -@@ -157,7 +157,7 @@ struct zip_t *zip = zip_open("foo.zip", 0, 'r'); - zip_close(zip); - ``` - --* List of all zip entries -+* List of all zip entries - ```c - struct zip_t *zip = zip_open("foo.zip", 0, 'r'); - int i, n = zip_total_entries(zip); -@@ -174,7 +174,7 @@ for (i = 0; i < n; ++i) { - zip_close(zip); - ``` - --## Bindings -+# Bindings - Compile zip library as a dynamic library. - ```shell - $ mkdir build -diff --git a/contrib/zip/appveyor.yml b/contrib/zip/appveyor.yml -index 0be6373c..ea17f5de 100644 ---- a/contrib/zip/appveyor.yml -+++ b/contrib/zip/appveyor.yml -@@ -1,4 +1,4 @@ --version: zip-0.1.9.{build} -+version: zip-0.1.15.{build} - build_script: - - cmd: >- - cd c:\projects\zip -diff --git a/contrib/zip/src/miniz.h b/contrib/zip/src/miniz.h -index 2c27a94d..c4fcfb83 100644 ---- a/contrib/zip/src/miniz.h -+++ b/contrib/zip/src/miniz.h -@@ -221,6 +221,7 @@ - #ifndef MINIZ_HEADER_INCLUDED - #define MINIZ_HEADER_INCLUDED - -+#include <stdint.h> - #include <stdlib.h> - - // Defines to completely disable specific portions of miniz.c: -@@ -284,7 +285,8 @@ - /* Set MINIZ_USE_UNALIGNED_LOADS_AND_STORES only if not set */ - #if !defined(MINIZ_USE_UNALIGNED_LOADS_AND_STORES) - #if MINIZ_X86_OR_X64_CPU --/* Set MINIZ_USE_UNALIGNED_LOADS_AND_STORES to 1 on CPU's that permit efficient integer loads and stores from unaligned addresses. */ -+/* Set MINIZ_USE_UNALIGNED_LOADS_AND_STORES to 1 on CPU's that permit efficient -+ * integer loads and stores from unaligned addresses. */ - #define MINIZ_USE_UNALIGNED_LOADS_AND_STORES 1 - #define MINIZ_UNALIGNED_USE_MEMCPY - #else -@@ -354,6 +356,44 @@ enum { - MZ_FIXED = 4 - }; - -+/* miniz error codes. Be sure to update mz_zip_get_error_string() if you add or -+ * modify this enum. */ -+typedef enum { -+ MZ_ZIP_NO_ERROR = 0, -+ MZ_ZIP_UNDEFINED_ERROR, -+ MZ_ZIP_TOO_MANY_FILES, -+ MZ_ZIP_FILE_TOO_LARGE, -+ MZ_ZIP_UNSUPPORTED_METHOD, -+ MZ_ZIP_UNSUPPORTED_ENCRYPTION, -+ MZ_ZIP_UNSUPPORTED_FEATURE, -+ MZ_ZIP_FAILED_FINDING_CENTRAL_DIR, -+ MZ_ZIP_NOT_AN_ARCHIVE, -+ MZ_ZIP_INVALID_HEADER_OR_CORRUPTED, -+ MZ_ZIP_UNSUPPORTED_MULTIDISK, -+ MZ_ZIP_DECOMPRESSION_FAILED, -+ MZ_ZIP_COMPRESSION_FAILED, -+ MZ_ZIP_UNEXPECTED_DECOMPRESSED_SIZE, -+ MZ_ZIP_CRC_CHECK_FAILED, -+ MZ_ZIP_UNSUPPORTED_CDIR_SIZE, -+ MZ_ZIP_ALLOC_FAILED, -+ MZ_ZIP_FILE_OPEN_FAILED, -+ MZ_ZIP_FILE_CREATE_FAILED, -+ MZ_ZIP_FILE_WRITE_FAILED, -+ MZ_ZIP_FILE_READ_FAILED, -+ MZ_ZIP_FILE_CLOSE_FAILED, -+ MZ_ZIP_FILE_SEEK_FAILED, -+ MZ_ZIP_FILE_STAT_FAILED, -+ MZ_ZIP_INVALID_PARAMETER, -+ MZ_ZIP_INVALID_FILENAME, -+ MZ_ZIP_BUF_TOO_SMALL, -+ MZ_ZIP_INTERNAL_ERROR, -+ MZ_ZIP_FILE_NOT_FOUND, -+ MZ_ZIP_ARCHIVE_TOO_LARGE, -+ MZ_ZIP_VALIDATION_FAILED, -+ MZ_ZIP_WRITE_CALLBACK_FAILED, -+ MZ_ZIP_TOTAL_ERRORS -+} mz_zip_error; -+ - // Method - #define MZ_DEFLATED 8 - -@@ -696,6 +736,7 @@ typedef size_t (*mz_file_read_func)(void *pOpaque, mz_uint64 file_ofs, - void *pBuf, size_t n); - typedef size_t (*mz_file_write_func)(void *pOpaque, mz_uint64 file_ofs, - const void *pBuf, size_t n); -+typedef mz_bool (*mz_file_needs_keepalive)(void *pOpaque); - - struct mz_zip_internal_state_tag; - typedef struct mz_zip_internal_state_tag mz_zip_internal_state; -@@ -707,13 +748,27 @@ typedef enum { - MZ_ZIP_MODE_WRITING_HAS_BEEN_FINALIZED = 3 - } mz_zip_mode; - --typedef struct mz_zip_archive_tag { -+typedef enum { -+ MZ_ZIP_TYPE_INVALID = 0, -+ MZ_ZIP_TYPE_USER, -+ MZ_ZIP_TYPE_MEMORY, -+ MZ_ZIP_TYPE_HEAP, -+ MZ_ZIP_TYPE_FILE, -+ MZ_ZIP_TYPE_CFILE, -+ MZ_ZIP_TOTAL_TYPES -+} mz_zip_type; -+ -+typedef struct { - mz_uint64 m_archive_size; - mz_uint64 m_central_directory_file_ofs; -- mz_uint m_total_files; -+ -+ /* We only support up to UINT32_MAX files in zip64 mode. */ -+ mz_uint32 m_total_files; - mz_zip_mode m_zip_mode; -+ mz_zip_type m_zip_type; -+ mz_zip_error m_last_error; - -- mz_uint m_file_offset_alignment; -+ mz_uint64 m_file_offset_alignment; - - mz_alloc_func m_pAlloc; - mz_free_func m_pFree; -@@ -722,6 +777,7 @@ typedef struct mz_zip_archive_tag { - - mz_file_read_func m_pRead; - mz_file_write_func m_pWrite; -+ mz_file_needs_keepalive m_pNeeds_keepalive; - void *m_pIO_opaque; - - mz_zip_internal_state *m_pState; -@@ -1263,6 +1319,9 @@ mz_uint tdefl_create_comp_flags_from_zip_params(int level, int window_bits, - int strategy); - #endif // #ifndef MINIZ_NO_ZLIB_APIS - -+#define MZ_UINT16_MAX (0xFFFFU) -+#define MZ_UINT32_MAX (0xFFFFFFFFU) -+ - #ifdef __cplusplus - } - #endif -@@ -1311,6 +1370,11 @@ typedef unsigned char mz_validate_uint64[sizeof(mz_uint64) == 8 ? 1 : -1]; - ((mz_uint32)(((const mz_uint8 *)(p))[3]) << 24U)) - #endif - -+#define MZ_READ_LE64(p) \ -+ (((mz_uint64)MZ_READ_LE32(p)) | \ -+ (((mz_uint64)MZ_READ_LE32((const mz_uint8 *)(p) + sizeof(mz_uint32))) \ -+ << 32U)) -+ - #ifdef _MSC_VER - #define MZ_FORCEINLINE __forceinline - #elif defined(__GNUC__) -@@ -4160,6 +4224,17 @@ enum { - MZ_ZIP_LOCAL_DIR_HEADER_SIZE = 30, - MZ_ZIP_CENTRAL_DIR_HEADER_SIZE = 46, - MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE = 22, -+ -+ /* ZIP64 archive identifier and record sizes */ -+ MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIG = 0x06064b50, -+ MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIG = 0x07064b50, -+ MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE = 56, -+ MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE = 20, -+ MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID = 0x0001, -+ MZ_ZIP_DATA_DESCRIPTOR_ID = 0x08074b50, -+ MZ_ZIP_DATA_DESCRIPTER_SIZE64 = 24, -+ MZ_ZIP_DATA_DESCRIPTER_SIZE32 = 16, -+ - // Central directory header record offsets - MZ_ZIP_CDH_SIG_OFS = 0, - MZ_ZIP_CDH_VERSION_MADE_BY_OFS = 4, -@@ -4199,6 +4274,31 @@ enum { - MZ_ZIP_ECDH_CDIR_SIZE_OFS = 12, - MZ_ZIP_ECDH_CDIR_OFS_OFS = 16, - MZ_ZIP_ECDH_COMMENT_SIZE_OFS = 20, -+ -+ /* ZIP64 End of central directory locator offsets */ -+ MZ_ZIP64_ECDL_SIG_OFS = 0, /* 4 bytes */ -+ MZ_ZIP64_ECDL_NUM_DISK_CDIR_OFS = 4, /* 4 bytes */ -+ MZ_ZIP64_ECDL_REL_OFS_TO_ZIP64_ECDR_OFS = 8, /* 8 bytes */ -+ MZ_ZIP64_ECDL_TOTAL_NUMBER_OF_DISKS_OFS = 16, /* 4 bytes */ -+ -+ /* ZIP64 End of central directory header offsets */ -+ MZ_ZIP64_ECDH_SIG_OFS = 0, /* 4 bytes */ -+ MZ_ZIP64_ECDH_SIZE_OF_RECORD_OFS = 4, /* 8 bytes */ -+ MZ_ZIP64_ECDH_VERSION_MADE_BY_OFS = 12, /* 2 bytes */ -+ MZ_ZIP64_ECDH_VERSION_NEEDED_OFS = 14, /* 2 bytes */ -+ MZ_ZIP64_ECDH_NUM_THIS_DISK_OFS = 16, /* 4 bytes */ -+ MZ_ZIP64_ECDH_NUM_DISK_CDIR_OFS = 20, /* 4 bytes */ -+ MZ_ZIP64_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS = 24, /* 8 bytes */ -+ MZ_ZIP64_ECDH_CDIR_TOTAL_ENTRIES_OFS = 32, /* 8 bytes */ -+ MZ_ZIP64_ECDH_CDIR_SIZE_OFS = 40, /* 8 bytes */ -+ MZ_ZIP64_ECDH_CDIR_OFS_OFS = 48, /* 8 bytes */ -+ MZ_ZIP_VERSION_MADE_BY_DOS_FILESYSTEM_ID = 0, -+ MZ_ZIP_DOS_DIR_ATTRIBUTE_BITFLAG = 0x10, -+ MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_IS_ENCRYPTED = 1, -+ MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_COMPRESSED_PATCH_FLAG = 32, -+ MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_USES_STRONG_ENCRYPTION = 64, -+ MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_LOCAL_DIR_IS_MASKED = 8192, -+ MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_UTF8 = 1 << 11 - }; - - typedef struct { -@@ -4211,7 +4311,24 @@ struct mz_zip_internal_state_tag { - mz_zip_array m_central_dir; - mz_zip_array m_central_dir_offsets; - mz_zip_array m_sorted_central_dir_offsets; -+ -+ /* The flags passed in when the archive is initially opened. */ -+ uint32_t m_init_flags; -+ -+ /* MZ_TRUE if the archive has a zip64 end of central directory headers, etc. -+ */ -+ mz_bool m_zip64; -+ -+ /* MZ_TRUE if we found zip64 extended info in the central directory (m_zip64 -+ * will also be slammed to true too, even if we didn't find a zip64 end of -+ * central dir header, etc.) */ -+ mz_bool m_zip64_has_extended_info_fields; -+ -+ /* These fields are used by the file, FILE, memory, and memory/heap read/write -+ * helpers. */ - MZ_FILE *m_pFile; -+ mz_uint64 m_file_archive_start_ofs; -+ - void *m_pMem; - size_t m_mem_size; - size_t m_mem_capacity; -@@ -4363,6 +4480,13 @@ static mz_bool mz_zip_set_file_times(const char *pFilename, time_t access_time, - #endif /* #ifndef MINIZ_NO_STDIO */ - #endif /* #ifndef MINIZ_NO_TIME */ - -+static MZ_FORCEINLINE mz_bool mz_zip_set_error(mz_zip_archive *pZip, -+ mz_zip_error err_num) { -+ if (pZip) -+ pZip->m_last_error = err_num; -+ return MZ_FALSE; -+} -+ - static mz_bool mz_zip_reader_init_internal(mz_zip_archive *pZip, - mz_uint32 flags) { - (void)flags; -@@ -4480,127 +4604,346 @@ mz_zip_reader_sort_central_dir_offsets_by_filename(mz_zip_archive *pZip) { - } - } - --static mz_bool mz_zip_reader_read_central_dir(mz_zip_archive *pZip, -- mz_uint32 flags) { -- mz_uint cdir_size, num_this_disk, cdir_disk_index; -- mz_uint64 cdir_ofs; -+static mz_bool mz_zip_reader_locate_header_sig(mz_zip_archive *pZip, -+ mz_uint32 record_sig, -+ mz_uint32 record_size, -+ mz_int64 *pOfs) { - mz_int64 cur_file_ofs; -- const mz_uint8 *p; - mz_uint32 buf_u32[4096 / sizeof(mz_uint32)]; - mz_uint8 *pBuf = (mz_uint8 *)buf_u32; -- mz_bool sort_central_dir = -- ((flags & MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY) == 0); -- // Basic sanity checks - reject files which are too small, and check the first -- // 4 bytes of the file to make sure a local header is there. -- if (pZip->m_archive_size < MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) -+ -+ /* Basic sanity checks - reject files which are too small */ -+ if (pZip->m_archive_size < record_size) - return MZ_FALSE; -- // Find the end of central directory record by scanning the file from the end -- // towards the beginning. -+ -+ /* Find the record by scanning the file from the end towards the beginning. */ - cur_file_ofs = - MZ_MAX((mz_int64)pZip->m_archive_size - (mz_int64)sizeof(buf_u32), 0); - for (;;) { - int i, - n = (int)MZ_MIN(sizeof(buf_u32), pZip->m_archive_size - cur_file_ofs); -+ - if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pBuf, n) != (mz_uint)n) - return MZ_FALSE; -- for (i = n - 4; i >= 0; --i) -- if (MZ_READ_LE32(pBuf + i) == MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG) -- break; -+ -+ for (i = n - 4; i >= 0; --i) { -+ mz_uint s = MZ_READ_LE32(pBuf + i); -+ if (s == record_sig) { -+ if ((pZip->m_archive_size - (cur_file_ofs + i)) >= record_size) -+ break; -+ } -+ } -+ - if (i >= 0) { - cur_file_ofs += i; - break; - } -+ -+ /* Give up if we've searched the entire file, or we've gone back "too far" -+ * (~64kb) */ - if ((!cur_file_ofs) || ((pZip->m_archive_size - cur_file_ofs) >= -- (0xFFFF + MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE))) -+ (MZ_UINT16_MAX + record_size))) - return MZ_FALSE; -+ - cur_file_ofs = MZ_MAX(cur_file_ofs - (sizeof(buf_u32) - 3), 0); - } -- // Read and verify the end of central directory record. -+ -+ *pOfs = cur_file_ofs; -+ return MZ_TRUE; -+} -+ -+static mz_bool mz_zip_reader_read_central_dir(mz_zip_archive *pZip, -+ mz_uint flags) { -+ mz_uint cdir_size = 0, cdir_entries_on_this_disk = 0, num_this_disk = 0, -+ cdir_disk_index = 0; -+ mz_uint64 cdir_ofs = 0; -+ mz_int64 cur_file_ofs = 0; -+ const mz_uint8 *p; -+ -+ mz_uint32 buf_u32[4096 / sizeof(mz_uint32)]; -+ mz_uint8 *pBuf = (mz_uint8 *)buf_u32; -+ mz_bool sort_central_dir = -+ ((flags & MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY) == 0); -+ mz_uint32 zip64_end_of_central_dir_locator_u32 -+ [(MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE + sizeof(mz_uint32) - 1) / -+ sizeof(mz_uint32)]; -+ mz_uint8 *pZip64_locator = (mz_uint8 *)zip64_end_of_central_dir_locator_u32; -+ -+ mz_uint32 zip64_end_of_central_dir_header_u32 -+ [(MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE + sizeof(mz_uint32) - 1) / -+ sizeof(mz_uint32)]; -+ mz_uint8 *pZip64_end_of_central_dir = -+ (mz_uint8 *)zip64_end_of_central_dir_header_u32; -+ -+ mz_uint64 zip64_end_of_central_dir_ofs = 0; -+ -+ /* Basic sanity checks - reject files which are too small, and check the first -+ * 4 bytes of the file to make sure a local header is there. */ -+ if (pZip->m_archive_size < MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) -+ return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE); -+ -+ if (!mz_zip_reader_locate_header_sig( -+ pZip, MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG, -+ MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE, &cur_file_ofs)) -+ return mz_zip_set_error(pZip, MZ_ZIP_FAILED_FINDING_CENTRAL_DIR); -+ -+ /* Read and verify the end of central directory record. */ - if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pBuf, - MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) != - MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) -- return MZ_FALSE; -- if ((MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_SIG_OFS) != -- MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG) || -- ((pZip->m_total_files = -- MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_CDIR_TOTAL_ENTRIES_OFS)) != -- MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS))) -- return MZ_FALSE; -+ return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); -+ -+ if (MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_SIG_OFS) != -+ MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG) -+ return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE); -+ -+ if (cur_file_ofs >= (MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE + -+ MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE)) { -+ if (pZip->m_pRead(pZip->m_pIO_opaque, -+ cur_file_ofs - MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE, -+ pZip64_locator, -+ MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE) == -+ MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE) { -+ if (MZ_READ_LE32(pZip64_locator + MZ_ZIP64_ECDL_SIG_OFS) == -+ MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIG) { -+ zip64_end_of_central_dir_ofs = MZ_READ_LE64( -+ pZip64_locator + MZ_ZIP64_ECDL_REL_OFS_TO_ZIP64_ECDR_OFS); -+ if (zip64_end_of_central_dir_ofs > -+ (pZip->m_archive_size - MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE)) -+ return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE); -+ -+ if (pZip->m_pRead(pZip->m_pIO_opaque, zip64_end_of_central_dir_ofs, -+ pZip64_end_of_central_dir, -+ MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE) == -+ MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE) { -+ if (MZ_READ_LE32(pZip64_end_of_central_dir + MZ_ZIP64_ECDH_SIG_OFS) == -+ MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIG) { -+ pZip->m_pState->m_zip64 = MZ_TRUE; -+ } -+ } -+ } -+ } -+ } - -+ pZip->m_total_files = MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_CDIR_TOTAL_ENTRIES_OFS); -+ cdir_entries_on_this_disk = -+ MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS); - num_this_disk = MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_NUM_THIS_DISK_OFS); - cdir_disk_index = MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_NUM_DISK_CDIR_OFS); -+ cdir_size = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_SIZE_OFS); -+ cdir_ofs = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_OFS_OFS); -+ -+ if (pZip->m_pState->m_zip64) { -+ mz_uint32 zip64_total_num_of_disks = -+ MZ_READ_LE32(pZip64_locator + MZ_ZIP64_ECDL_TOTAL_NUMBER_OF_DISKS_OFS); -+ mz_uint64 zip64_cdir_total_entries = MZ_READ_LE64( -+ pZip64_end_of_central_dir + MZ_ZIP64_ECDH_CDIR_TOTAL_ENTRIES_OFS); -+ mz_uint64 zip64_cdir_total_entries_on_this_disk = MZ_READ_LE64( -+ pZip64_end_of_central_dir + MZ_ZIP64_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS); -+ mz_uint64 zip64_size_of_end_of_central_dir_record = MZ_READ_LE64( -+ pZip64_end_of_central_dir + MZ_ZIP64_ECDH_SIZE_OF_RECORD_OFS); -+ mz_uint64 zip64_size_of_central_directory = -+ MZ_READ_LE64(pZip64_end_of_central_dir + MZ_ZIP64_ECDH_CDIR_SIZE_OFS); -+ -+ if (zip64_size_of_end_of_central_dir_record < -+ (MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE - 12)) -+ return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); -+ -+ if (zip64_total_num_of_disks != 1U) -+ return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK); -+ -+ /* Check for miniz's practical limits */ -+ if (zip64_cdir_total_entries > MZ_UINT32_MAX) -+ return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); -+ -+ pZip->m_total_files = (mz_uint32)zip64_cdir_total_entries; -+ -+ if (zip64_cdir_total_entries_on_this_disk > MZ_UINT32_MAX) -+ return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); -+ -+ cdir_entries_on_this_disk = -+ (mz_uint32)zip64_cdir_total_entries_on_this_disk; -+ -+ /* Check for miniz's current practical limits (sorry, this should be enough -+ * for millions of files) */ -+ if (zip64_size_of_central_directory > MZ_UINT32_MAX) -+ return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_CDIR_SIZE); -+ -+ cdir_size = (mz_uint32)zip64_size_of_central_directory; -+ -+ num_this_disk = MZ_READ_LE32(pZip64_end_of_central_dir + -+ MZ_ZIP64_ECDH_NUM_THIS_DISK_OFS); -+ -+ cdir_disk_index = MZ_READ_LE32(pZip64_end_of_central_dir + -+ MZ_ZIP64_ECDH_NUM_DISK_CDIR_OFS); -+ -+ cdir_ofs = -+ MZ_READ_LE64(pZip64_end_of_central_dir + MZ_ZIP64_ECDH_CDIR_OFS_OFS); -+ } -+ -+ if (pZip->m_total_files != cdir_entries_on_this_disk) -+ return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK); -+ - if (((num_this_disk | cdir_disk_index) != 0) && - ((num_this_disk != 1) || (cdir_disk_index != 1))) -- return MZ_FALSE; -+ return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK); - -- if ((cdir_size = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_SIZE_OFS)) < -- pZip->m_total_files * MZ_ZIP_CENTRAL_DIR_HEADER_SIZE) -- return MZ_FALSE; -+ if (cdir_size < pZip->m_total_files * MZ_ZIP_CENTRAL_DIR_HEADER_SIZE) -+ return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); - -- cdir_ofs = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_OFS_OFS); - if ((cdir_ofs + (mz_uint64)cdir_size) > pZip->m_archive_size) -- return MZ_FALSE; -+ return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); - - pZip->m_central_directory_file_ofs = cdir_ofs; - - if (pZip->m_total_files) { - mz_uint i, n; -- -- // Read the entire central directory into a heap block, and allocate another -- // heap block to hold the unsorted central dir file record offsets, and -- // another to hold the sorted indices. -+ /* Read the entire central directory into a heap block, and allocate another -+ * heap block to hold the unsorted central dir file record offsets, and -+ * possibly another to hold the sorted indices. */ - if ((!mz_zip_array_resize(pZip, &pZip->m_pState->m_central_dir, cdir_size, - MZ_FALSE)) || - (!mz_zip_array_resize(pZip, &pZip->m_pState->m_central_dir_offsets, - pZip->m_total_files, MZ_FALSE))) -- return MZ_FALSE; -+ return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); - - if (sort_central_dir) { - if (!mz_zip_array_resize(pZip, - &pZip->m_pState->m_sorted_central_dir_offsets, - pZip->m_total_files, MZ_FALSE)) -- return MZ_FALSE; -+ return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); - } - - if (pZip->m_pRead(pZip->m_pIO_opaque, cdir_ofs, - pZip->m_pState->m_central_dir.m_p, - cdir_size) != cdir_size) -- return MZ_FALSE; -+ return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); - -- // Now create an index into the central directory file records, do some -- // basic sanity checking on each record, and check for zip64 entries (which -- // are not yet supported). -+ /* Now create an index into the central directory file records, do some -+ * basic sanity checking on each record */ - p = (const mz_uint8 *)pZip->m_pState->m_central_dir.m_p; - for (n = cdir_size, i = 0; i < pZip->m_total_files; ++i) { -- mz_uint total_header_size, comp_size, decomp_size, disk_index; -+ mz_uint total_header_size, disk_index, bit_flags, filename_size, -+ ext_data_size; -+ mz_uint64 comp_size, decomp_size, local_header_ofs; -+ - if ((n < MZ_ZIP_CENTRAL_DIR_HEADER_SIZE) || - (MZ_READ_LE32(p) != MZ_ZIP_CENTRAL_DIR_HEADER_SIG)) -- return MZ_FALSE; -+ return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); -+ - MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir_offsets, mz_uint32, - i) = - (mz_uint32)(p - (const mz_uint8 *)pZip->m_pState->m_central_dir.m_p); -+ - if (sort_central_dir) - MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_sorted_central_dir_offsets, - mz_uint32, i) = i; -+ - comp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS); - decomp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS); -- if (((!MZ_READ_LE32(p + MZ_ZIP_CDH_METHOD_OFS)) && -- (decomp_size != comp_size)) || -- (decomp_size && !comp_size) || (decomp_size == 0xFFFFFFFF) || -- (comp_size == 0xFFFFFFFF)) -- return MZ_FALSE; -+ local_header_ofs = MZ_READ_LE32(p + MZ_ZIP_CDH_LOCAL_HEADER_OFS); -+ filename_size = MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS); -+ ext_data_size = MZ_READ_LE16(p + MZ_ZIP_CDH_EXTRA_LEN_OFS); -+ -+ if ((!pZip->m_pState->m_zip64_has_extended_info_fields) && -+ (ext_data_size) && -+ (MZ_MAX(MZ_MAX(comp_size, decomp_size), local_header_ofs) == -+ MZ_UINT32_MAX)) { -+ /* Attempt to find zip64 extended information field in the entry's extra -+ * data */ -+ mz_uint32 extra_size_remaining = ext_data_size; -+ -+ if (extra_size_remaining) { -+ const mz_uint8 *pExtra_data; -+ void *buf = NULL; -+ -+ if (MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + filename_size + ext_data_size > -+ n) { -+ buf = MZ_MALLOC(ext_data_size); -+ if (buf == NULL) -+ return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); -+ -+ if (pZip->m_pRead(pZip->m_pIO_opaque, -+ cdir_ofs + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + -+ filename_size, -+ buf, ext_data_size) != ext_data_size) { -+ MZ_FREE(buf); -+ return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); -+ } -+ -+ pExtra_data = (mz_uint8 *)buf; -+ } else { -+ pExtra_data = p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + filename_size; -+ } -+ -+ do { -+ mz_uint32 field_id; -+ mz_uint32 field_data_size; -+ -+ if (extra_size_remaining < (sizeof(mz_uint16) * 2)) { -+ MZ_FREE(buf); -+ return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); -+ } -+ -+ field_id = MZ_READ_LE16(pExtra_data); -+ field_data_size = MZ_READ_LE16(pExtra_data + sizeof(mz_uint16)); -+ -+ if ((field_data_size + sizeof(mz_uint16) * 2) > -+ extra_size_remaining) { -+ MZ_FREE(buf); -+ return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); -+ } -+ -+ if (field_id == MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID) { -+ /* Ok, the archive didn't have any zip64 headers but it uses a -+ * zip64 extended information field so mark it as zip64 anyway -+ * (this can occur with infozip's zip util when it reads -+ * compresses files from stdin). */ -+ pZip->m_pState->m_zip64 = MZ_TRUE; -+ pZip->m_pState->m_zip64_has_extended_info_fields = MZ_TRUE; -+ break; -+ } -+ -+ pExtra_data += sizeof(mz_uint16) * 2 + field_data_size; -+ extra_size_remaining = -+ extra_size_remaining - sizeof(mz_uint16) * 2 - field_data_size; -+ } while (extra_size_remaining); -+ -+ MZ_FREE(buf); -+ } -+ } -+ -+ /* I've seen archives that aren't marked as zip64 that uses zip64 ext -+ * data, argh */ -+ if ((comp_size != MZ_UINT32_MAX) && (decomp_size != MZ_UINT32_MAX)) { -+ if (((!MZ_READ_LE32(p + MZ_ZIP_CDH_METHOD_OFS)) && -+ (decomp_size != comp_size)) || -+ (decomp_size && !comp_size)) -+ return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); -+ } -+ - disk_index = MZ_READ_LE16(p + MZ_ZIP_CDH_DISK_START_OFS); -- if ((disk_index != num_this_disk) && (disk_index != 1)) -- return MZ_FALSE; -- if (((mz_uint64)MZ_READ_LE32(p + MZ_ZIP_CDH_LOCAL_HEADER_OFS) + -- MZ_ZIP_LOCAL_DIR_HEADER_SIZE + comp_size) > pZip->m_archive_size) -- return MZ_FALSE; -+ if ((disk_index == MZ_UINT16_MAX) || -+ ((disk_index != num_this_disk) && (disk_index != 1))) -+ return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK); -+ -+ if (comp_size != MZ_UINT32_MAX) { -+ if (((mz_uint64)MZ_READ_LE32(p + MZ_ZIP_CDH_LOCAL_HEADER_OFS) + -+ MZ_ZIP_LOCAL_DIR_HEADER_SIZE + comp_size) > pZip->m_archive_size) -+ return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); -+ } -+ -+ bit_flags = MZ_READ_LE16(p + MZ_ZIP_CDH_BIT_FLAG_OFS); -+ if (bit_flags & MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_LOCAL_DIR_IS_MASKED) -+ return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_ENCRYPTION); -+ - if ((total_header_size = MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + - MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS) + - MZ_READ_LE16(p + MZ_ZIP_CDH_EXTRA_LEN_OFS) + - MZ_READ_LE16(p + MZ_ZIP_CDH_COMMENT_LEN_OFS)) > - n) -- return MZ_FALSE; -+ return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); -+ - n -= total_header_size; - p += total_header_size; - } -diff --git a/contrib/zip/src/zip.c b/contrib/zip/src/zip.c -index ff3a8fe1..1abcfd8f 100644 ---- a/contrib/zip/src/zip.c -+++ b/contrib/zip/src/zip.c -@@ -24,7 +24,6 @@ - ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) && \ - (P)[1] == ':') - #define FILESYSTEM_PREFIX_LEN(P) (HAS_DEVICE(P) ? 2 : 0) --#define ISSLASH(C) ((C) == '/' || (C) == '\\') - - #else - -@@ -48,7 +47,7 @@ int symlink(const char *target, const char *linkpath); // needed on Linux - #endif - - #ifndef ISSLASH --#define ISSLASH(C) ((C) == '/') -+#define ISSLASH(C) ((C) == '/' || (C) == '\\') - #endif - - #define CLEANUP(ptr) \ -@@ -78,26 +77,34 @@ static const char *base_name(const char *name) { - return base; - } - --static int mkpath(const char *path) { -- char const *p; -+static int mkpath(char *path) { -+ char *p; - char npath[MAX_PATH + 1]; - int len = 0; - int has_device = HAS_DEVICE(path); - - memset(npath, 0, MAX_PATH + 1); -- --#ifdef _WIN32 -- // only on windows fix the path -- npath[0] = path[0]; -- npath[1] = path[1]; -- len = 2; --#endif // _WIN32 -- -+ if (has_device) { -+ // only on windows -+ npath[0] = path[0]; -+ npath[1] = path[1]; -+ len = 2; -+ } - for (p = path + len; *p && len < MAX_PATH; p++) { - if (ISSLASH(*p) && ((!has_device && len > 0) || (has_device && len > 2))) { -- if (MKDIR(npath) == -1) -- if (errno != EEXIST) -+#if defined(_WIN32) || defined(__WIN32__) || defined(_MSC_VER) || \ -+ defined(__MINGW32__) -+#else -+ if ('\\' == *p) { -+ *p = '/'; -+ } -+#endif -+ -+ if (MKDIR(npath) == -1) { -+ if (errno != EEXIST) { - return -1; -+ } -+ } - } - npath[len++] = *p; - } -@@ -279,7 +286,14 @@ int zip_entry_open(struct zip_t *zip, const char *entryname) { - zip->entry.header_offset = zip->archive.m_archive_size; - memset(zip->entry.header, 0, MZ_ZIP_LOCAL_DIR_HEADER_SIZE * sizeof(mz_uint8)); - zip->entry.method = 0; -+ -+ // UNIX or APPLE -+#if MZ_PLATFORM == 3 || MZ_PLATFORM == 19 -+ // regular file with rw-r--r-- persmissions -+ zip->entry.external_attr = (mz_uint32)(0100644) << 16; -+#else - zip->entry.external_attr = 0; -+#endif - - num_alignment_padding_bytes = - mz_zip_writer_compute_padding_needed_for_file_alignment(pzip); -@@ -660,7 +674,7 @@ ssize_t zip_entry_noallocread(struct zip_t *zip, void *buf, size_t bufsize) { - } - - if (!mz_zip_reader_extract_to_mem_no_alloc(pzip, (mz_uint)zip->entry.index, -- buf, bufsize, 0, NULL, 0)) { -+ buf, bufsize, 0, NULL, 0)) { - return -1; - } - -@@ -670,10 +684,7 @@ ssize_t zip_entry_noallocread(struct zip_t *zip, void *buf, size_t bufsize) { - int zip_entry_fread(struct zip_t *zip, const char *filename) { - mz_zip_archive *pzip = NULL; - mz_uint idx; --#if defined(_MSC_VER) --#else - mz_uint32 xattr = 0; --#endif - mz_zip_archive_file_stat info; - - if (!zip) { -@@ -875,12 +886,19 @@ int zip_extract(const char *zipname, const char *dir, - goto out; - } - -- if ((((info.m_version_made_by >> 8) == 3) || ((info.m_version_made_by >> 8) == 19)) // if zip is produced on Unix or macOS (3 and 19 from section 4.4.2.2 of zip standard) -- && info.m_external_attr & (0x20 << 24)) { // and has sym link attribute (0x80 is file, 0x40 is directory) -+ if ((((info.m_version_made_by >> 8) == 3) || -+ ((info.m_version_made_by >> 8) == -+ 19)) // if zip is produced on Unix or macOS (3 and 19 from -+ // section 4.4.2.2 of zip standard) -+ && info.m_external_attr & -+ (0x20 << 24)) { // and has sym link attribute (0x80 is file, 0x40 -+ // is directory) - #if defined(_WIN32) || defined(__WIN32__) || defined(_MSC_VER) || \ - defined(__MINGW32__) --#else -- if (info.m_uncomp_size > MAX_PATH || !mz_zip_reader_extract_to_mem_no_alloc(&zip_archive, i, symlink_to, MAX_PATH, 0, NULL, 0)) { -+#else -+ if (info.m_uncomp_size > MAX_PATH || -+ !mz_zip_reader_extract_to_mem_no_alloc(&zip_archive, i, symlink_to, -+ MAX_PATH, 0, NULL, 0)) { - goto out; - } - symlink_to[info.m_uncomp_size] = '\0'; -diff --git a/contrib/zip/src/zip.h b/contrib/zip/src/zip.h -index 5f39df50..a48d64d6 100644 ---- a/contrib/zip/src/zip.h -+++ b/contrib/zip/src/zip.h -@@ -20,241 +20,240 @@ extern "C" { - #endif - - #if !defined(_SSIZE_T_DEFINED) && !defined(_SSIZE_T_DEFINED_) && \ -- !defined(_SSIZE_T) && !defined(_SSIZE_T_) && !defined(__ssize_t_defined) --#define _SSIZE_T -+ !defined(__DEFINED_ssize_t) && !defined(__ssize_t_defined) && \ -+ !defined(_SSIZE_T) && !defined(_SSIZE_T_) -+ - // 64-bit Windows is the only mainstream platform - // where sizeof(long) != sizeof(void*) - #ifdef _WIN64 --typedef long long ssize_t; /* byte count or error */ -+typedef long long ssize_t; /* byte count or error */ - #else --typedef long ssize_t; /* byte count or error */ -+typedef long ssize_t; /* byte count or error */ - #endif -+ -+#define _SSIZE_T_DEFINED -+#define _SSIZE_T_DEFINED_ -+#define __DEFINED_ssize_t -+#define __ssize_t_defined -+#define _SSIZE_T -+#define _SSIZE_T_ -+ - #endif - - #ifndef MAX_PATH - #define MAX_PATH 32767 /* # chars in a path name including NULL */ - #endif - -+/** -+ * @mainpage -+ * -+ * Documenation for @ref zip. -+ */ -+ -+/** -+ * @addtogroup zip -+ * @{ -+ */ -+ -+/** -+ * Default zip compression level. -+ */ -+ - #define ZIP_DEFAULT_COMPRESSION_LEVEL 6 - --/* -- This data structure is used throughout the library to represent zip archive -- - forward declaration. --*/ -+/** -+ * @struct zip_t -+ * -+ * This data structure is used throughout the library to represent zip archive - -+ * forward declaration. -+ */ - struct zip_t; - --/* -- Opens zip archive with compression level using the given mode. -- -- Args: -- zipname: zip archive file name. -- level: compression level (0-9 are the standard zlib-style levels). -- mode: file access mode. -- 'r': opens a file for reading/extracting (the file must exists). -- 'w': creates an empty file for writing. -- 'a': appends to an existing archive. -- -- Returns: -- The zip archive handler or NULL on error --*/ -+/** -+ * Opens zip archive with compression level using the given mode. -+ * -+ * @param zipname zip archive file name. -+ * @param level compression level (0-9 are the standard zlib-style levels). -+ * @param mode file access mode. -+ * - 'r': opens a file for reading/extracting (the file must exists). -+ * - 'w': creates an empty file for writing. -+ * - 'a': appends to an existing archive. -+ * -+ * @return the zip archive handler or NULL on error -+ */ - extern struct zip_t *zip_open(const char *zipname, int level, char mode); - --/* -- Closes the zip archive, releases resources - always finalize. -- -- Args: -- zip: zip archive handler. --*/ -+/** -+ * Closes the zip archive, releases resources - always finalize. -+ * -+ * @param zip zip archive handler. -+ */ - extern void zip_close(struct zip_t *zip); - --/* -- Opens an entry by name in the zip archive. -- For zip archive opened in 'w' or 'a' mode the function will append -- a new entry. In readonly mode the function tries to locate the entry -- in global dictionary. -- -- Args: -- zip: zip archive handler. -- entryname: an entry name in local dictionary. -- -- Returns: -- The return code - 0 on success, negative number (< 0) on error. --*/ -+/** -+ * Opens an entry by name in the zip archive. -+ * -+ * For zip archive opened in 'w' or 'a' mode the function will append -+ * a new entry. In readonly mode the function tries to locate the entry -+ * in global dictionary. -+ * -+ * @param zip zip archive handler. -+ * @param entryname an entry name in local dictionary. -+ * -+ * @return the return code - 0 on success, negative number (< 0) on error. -+ */ - extern int zip_entry_open(struct zip_t *zip, const char *entryname); - --/* -- Opens a new entry by index in the zip archive. -- This function is only valid if zip archive was opened in 'r' (readonly) mode. -- -- Args: -- zip: zip archive handler. -- index: index in local dictionary. -- -- Returns: -- The return code - 0 on success, negative number (< 0) on error. --*/ -+/** -+ * Opens a new entry by index in the zip archive. -+ * -+ * This function is only valid if zip archive was opened in 'r' (readonly) mode. -+ * -+ * @param zip zip archive handler. -+ * @param index index in local dictionary. -+ * -+ * @return the return code - 0 on success, negative number (< 0) on error. -+ */ - extern int zip_entry_openbyindex(struct zip_t *zip, int index); - --/* -- Closes a zip entry, flushes buffer and releases resources. -- -- Args: -- zip: zip archive handler. -- -- Returns: -- The return code - 0 on success, negative number (< 0) on error. --*/ -+/** -+ * Closes a zip entry, flushes buffer and releases resources. -+ * -+ * @param zip zip archive handler. -+ * -+ * @return the return code - 0 on success, negative number (< 0) on error. -+ */ - extern int zip_entry_close(struct zip_t *zip); - --/* -- Returns a local name of the current zip entry. -- The main difference between user's entry name and local entry name -- is optional relative path. -- Following .ZIP File Format Specification - the path stored MUST not contain -- a drive or device letter, or a leading slash. -- All slashes MUST be forward slashes '/' as opposed to backwards slashes '\' -- for compatibility with Amiga and UNIX file systems etc. -- -- Args: -- zip: zip archive handler. -- -- Returns: -- The pointer to the current zip entry name, or NULL on error. --*/ -+/** -+ * Returns a local name of the current zip entry. -+ * -+ * The main difference between user's entry name and local entry name -+ * is optional relative path. -+ * Following .ZIP File Format Specification - the path stored MUST not contain -+ * a drive or device letter, or a leading slash. -+ * All slashes MUST be forward slashes '/' as opposed to backwards slashes '\' -+ * for compatibility with Amiga and UNIX file systems etc. -+ * -+ * @param zip: zip archive handler. -+ * -+ * @return the pointer to the current zip entry name, or NULL on error. -+ */ - extern const char *zip_entry_name(struct zip_t *zip); - --/* -- Returns an index of the current zip entry. -- -- Args: -- zip: zip archive handler. -- -- Returns: -- The index on success, negative number (< 0) on error. --*/ -+/** -+ * Returns an index of the current zip entry. -+ * -+ * @param zip zip archive handler. -+ * -+ * @return the index on success, negative number (< 0) on error. -+ */ - extern int zip_entry_index(struct zip_t *zip); - --/* -- Determines if the current zip entry is a directory entry. -- -- Args: -- zip: zip archive handler. -- -- Returns: -- The return code - 1 (true), 0 (false), negative number (< 0) on error. --*/ -+/** -+ * Determines if the current zip entry is a directory entry. -+ * -+ * @param zip zip archive handler. -+ * -+ * @return the return code - 1 (true), 0 (false), negative number (< 0) on -+ * error. -+ */ - extern int zip_entry_isdir(struct zip_t *zip); - --/* -- Returns an uncompressed size of the current zip entry. -- -- Args: -- zip: zip archive handler. -- -- Returns: -- The uncompressed size in bytes. --*/ -+/** -+ * Returns an uncompressed size of the current zip entry. -+ * -+ * @param zip zip archive handler. -+ * -+ * @return the uncompressed size in bytes. -+ */ - extern unsigned long long zip_entry_size(struct zip_t *zip); - --/* -- Returns CRC-32 checksum of the current zip entry. -- -- Args: -- zip: zip archive handler. -- -- Returns: -- The CRC-32 checksum. --*/ -+/** -+ * Returns CRC-32 checksum of the current zip entry. -+ * -+ * @param zip zip archive handler. -+ * -+ * @return the CRC-32 checksum. -+ */ - extern unsigned int zip_entry_crc32(struct zip_t *zip); - --/* -- Compresses an input buffer for the current zip entry. -- -- Args: -- zip: zip archive handler. -- buf: input buffer. -- bufsize: input buffer size (in bytes). -- -- Returns: -- The return code - 0 on success, negative number (< 0) on error. --*/ -+/** -+ * Compresses an input buffer for the current zip entry. -+ * -+ * @param zip zip archive handler. -+ * @param buf input buffer. -+ * @param bufsize input buffer size (in bytes). -+ * -+ * @return the return code - 0 on success, negative number (< 0) on error. -+ */ - extern int zip_entry_write(struct zip_t *zip, const void *buf, size_t bufsize); - --/* -- Compresses a file for the current zip entry. -- -- Args: -- zip: zip archive handler. -- filename: input file. -- -- Returns: -- The return code - 0 on success, negative number (< 0) on error. --*/ -+/** -+ * Compresses a file for the current zip entry. -+ * -+ * @param zip zip archive handler. -+ * @param filename input file. -+ * -+ * @return the return code - 0 on success, negative number (< 0) on error. -+ */ - extern int zip_entry_fwrite(struct zip_t *zip, const char *filename); - --/* -- Extracts the current zip entry into output buffer. -- The function allocates sufficient memory for a output buffer. -- -- Args: -- zip: zip archive handler. -- buf: output buffer. -- bufsize: output buffer size (in bytes). -- -- Note: -- - remember to release memory allocated for a output buffer. -- - for large entries, please take a look at zip_entry_extract function. -- -- Returns: -- The return code - the number of bytes actually read on success. -- Otherwise a -1 on error. --*/ -+/** -+ * Extracts the current zip entry into output buffer. -+ * -+ * The function allocates sufficient memory for a output buffer. -+ * -+ * @param zip zip archive handler. -+ * @param buf output buffer. -+ * @param bufsize output buffer size (in bytes). -+ * -+ * @note remember to release memory allocated for a output buffer. -+ * for large entries, please take a look at zip_entry_extract function. -+ * -+ * @return the return code - the number of bytes actually read on success. -+ * Otherwise a -1 on error. -+ */ - extern ssize_t zip_entry_read(struct zip_t *zip, void **buf, size_t *bufsize); - --/* -- Extracts the current zip entry into a memory buffer using no memory -- allocation. -- -- Args: -- zip: zip archive handler. -- buf: preallocated output buffer. -- bufsize: output buffer size (in bytes). -- -- Note: -- - ensure supplied output buffer is large enough. -- - zip_entry_size function (returns uncompressed size for the current entry) -- can be handy to estimate how big buffer is needed. -- - for large entries, please take a look at zip_entry_extract function. -- -- Returns: -- The return code - the number of bytes actually read on success. -- Otherwise a -1 on error (e.g. bufsize is not large enough). --*/ --extern ssize_t zip_entry_noallocread(struct zip_t *zip, void *buf, size_t bufsize); -- --/* -- Extracts the current zip entry into output file. -- -- Args: -- zip: zip archive handler. -- filename: output file. -- -- Returns: -- The return code - 0 on success, negative number (< 0) on error. --*/ -+/** -+ * Extracts the current zip entry into a memory buffer using no memory -+ * allocation. -+ * -+ * @param zip zip archive handler. -+ * @param buf preallocated output buffer. -+ * @param bufsize output buffer size (in bytes). -+ * -+ * @note ensure supplied output buffer is large enough. -+ * zip_entry_size function (returns uncompressed size for the current -+ * entry) can be handy to estimate how big buffer is needed. for large -+ * entries, please take a look at zip_entry_extract function. -+ * -+ * @return the return code - the number of bytes actually read on success. -+ * Otherwise a -1 on error (e.g. bufsize is not large enough). -+ */ -+extern ssize_t zip_entry_noallocread(struct zip_t *zip, void *buf, -+ size_t bufsize); -+ -+/** -+ * Extracts the current zip entry into output file. -+ * -+ * @param zip zip archive handler. -+ * @param filename output file. -+ * -+ * @return the return code - 0 on success, negative number (< 0) on error. -+ */ - extern int zip_entry_fread(struct zip_t *zip, const char *filename); - --/* -- Extracts the current zip entry using a callback function (on_extract). -- -- Args: -- zip: zip archive handler. -- on_extract: callback function. -- arg: opaque pointer (optional argument, -- which you can pass to the on_extract callback) -- -- Returns: -- The return code - 0 on success, negative number (< 0) on error. -+/** -+ * Extracts the current zip entry using a callback function (on_extract). -+ * -+ * @param zip zip archive handler. -+ * @param on_extract callback function. -+ * @param arg opaque pointer (optional argument, which you can pass to the -+ * on_extract callback) -+ * -+ * @return the return code - 0 on success, negative number (< 0) on error. - */ - extern int - zip_entry_extract(struct zip_t *zip, -@@ -262,53 +261,49 @@ zip_entry_extract(struct zip_t *zip, - const void *data, size_t size), - void *arg); - --/* -- Returns the number of all entries (files and directories) in the zip archive. -- -- Args: -- zip: zip archive handler. -- -- Returns: -- The return code - the number of entries on success, -- negative number (< 0) on error. --*/ -+/** -+ * Returns the number of all entries (files and directories) in the zip archive. -+ * -+ * @param zip zip archive handler. -+ * -+ * @return the return code - the number of entries on success, negative number -+ * (< 0) on error. -+ */ - extern int zip_total_entries(struct zip_t *zip); - --/* -- Creates a new archive and puts files into a single zip archive. -- -- Args: -- zipname: zip archive file. -- filenames: input files. -- len: number of input files. -- -- Returns: -- The return code - 0 on success, negative number (< 0) on error. --*/ -+/** -+ * Creates a new archive and puts files into a single zip archive. -+ * -+ * @param zipname zip archive file. -+ * @param filenames input files. -+ * @param len: number of input files. -+ * -+ * @return the return code - 0 on success, negative number (< 0) on error. -+ */ - extern int zip_create(const char *zipname, const char *filenames[], size_t len); - --/* -- Extracts a zip archive file into directory. -- -- If on_extract_entry is not NULL, the callback will be called after -- successfully extracted each zip entry. -- Returning a negative value from the callback will cause abort and return an -- error. The last argument (void *arg) is optional, which you can use to pass -- data to the on_extract_entry callback. -- -- Args: -- zipname: zip archive file. -- dir: output directory. -- on_extract_entry: on extract callback. -- arg: opaque pointer. -- -- Returns: -- The return code - 0 on success, negative number (< 0) on error. --*/ -+/** -+ * Extracts a zip archive file into directory. -+ * -+ * If on_extract_entry is not NULL, the callback will be called after -+ * successfully extracted each zip entry. -+ * Returning a negative value from the callback will cause abort and return an -+ * error. The last argument (void *arg) is optional, which you can use to pass -+ * data to the on_extract_entry callback. -+ * -+ * @param zipname zip archive file. -+ * @param dir output directory. -+ * @param on_extract_entry on extract callback. -+ * @param arg opaque pointer. -+ * -+ * @return the return code - 0 on success, negative number (< 0) on error. -+ */ - extern int zip_extract(const char *zipname, const char *dir, - int (*on_extract_entry)(const char *filename, void *arg), - void *arg); - -+/** @} */ -+ - #ifdef __cplusplus - } - #endif -diff --git a/contrib/zip/test/CMakeLists.txt b/contrib/zip/test/CMakeLists.txt -index 9b2a8db1..cc060b00 100644 ---- a/contrib/zip/test/CMakeLists.txt -+++ b/contrib/zip/test/CMakeLists.txt -@@ -1,19 +1,16 @@ - cmake_minimum_required(VERSION 2.8) - --if ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "AppleClang") -- if(ENABLE_COVERAGE) -- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g ") -- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0") -- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs") -- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ftest-coverage") -- set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage") -- endif() --endif () -- - # test --include_directories(../src) --add_executable(test.exe test.c ../src/zip.c) --add_executable(test_miniz.exe test_miniz.c) -+set(test_out test.out) -+set(test_miniz_out test_miniz.out) -+ -+add_executable(${test_out} test.c) -+target_link_libraries(${test_out} zip) -+add_executable(${test_miniz_out} test_miniz.c) -+target_link_libraries(${test_miniz_out} zip) -+ -+add_test(NAME ${test_out} COMMAND ${test_out}) -+add_test(NAME ${test_miniz_out} COMMAND ${test_miniz_out}) - --add_test(NAME test COMMAND test.exe) --add_test(NAME test_miniz COMMAND test_miniz.exe) -+set(test_out ${test_out} PARENT_SCOPE) -+set(test_miniz_out ${test_miniz_out} PARENT_SCOPE) -diff --git a/contrib/zip/test/test.c b/contrib/zip/test/test.c -index 45443053..a9b2ddab 100644 ---- a/contrib/zip/test/test.c -+++ b/contrib/zip/test/test.c -@@ -29,6 +29,8 @@ - #define XFILE "7.txt\0" - #define XMODE 0100777 - -+#define UNIXMODE 0100644 -+ - #define UNUSED(x) (void)x - - static int total_entries = 0; -@@ -102,7 +104,8 @@ static void test_read(void) { - assert(0 == zip_entry_close(zip)); - free(buf); - buf = NULL; -- -+ bufsize = 0; -+ - assert(0 == zip_entry_open(zip, "test/test-2.txt")); - assert(strlen(TESTDATA2) == zip_entry_size(zip)); - assert(CRC32DATA2 == zip_entry_crc32(zip)); -@@ -131,7 +134,8 @@ static void test_read(void) { - assert(0 == zip_entry_close(zip)); - free(buf); - buf = NULL; -- -+ bufsize = 0; -+ - buftmp = strlen(TESTDATA1); - buf = calloc(buftmp, sizeof(char)); - assert(0 == zip_entry_open(zip, "test/test-1.txt")); -@@ -433,6 +437,35 @@ static void test_mtime(void) { - remove(ZIPNAME); - } - -+static void test_unix_permissions(void) { -+#if defined(_WIN64) || defined(_WIN32) || defined(__WIN32__) -+#else -+ // UNIX or APPLE -+ struct MZ_FILE_STAT_STRUCT file_stats; -+ -+ remove(ZIPNAME); -+ -+ struct zip_t *zip = zip_open(ZIPNAME, ZIP_DEFAULT_COMPRESSION_LEVEL, 'w'); -+ assert(zip != NULL); -+ -+ assert(0 == zip_entry_open(zip, RFILE)); -+ assert(0 == zip_entry_write(zip, TESTDATA1, strlen(TESTDATA1))); -+ assert(0 == zip_entry_close(zip)); -+ -+ zip_close(zip); -+ -+ remove(RFILE); -+ -+ assert(0 == zip_extract(ZIPNAME, ".", NULL, NULL)); -+ -+ assert(0 == MZ_FILE_STAT(RFILE, &file_stats)); -+ assert(UNIXMODE == file_stats.st_mode); -+ -+ remove(RFILE); -+ remove(ZIPNAME); -+#endif -+} -+ - int main(int argc, char *argv[]) { - UNUSED(argc); - UNUSED(argv); -@@ -453,6 +486,7 @@ int main(int argc, char *argv[]) { - test_write_permissions(); - test_exe_permissions(); - test_mtime(); -+ test_unix_permissions(); - - remove(ZIPNAME); - return 0; -diff --git a/contrib/zip/test/test_miniz.c b/contrib/zip/test/test_miniz.c -index ebc0564d..babcaecd 100644 ---- a/contrib/zip/test/test_miniz.c -+++ b/contrib/zip/test/test_miniz.c -@@ -23,16 +23,39 @@ int main(int argc, char *argv[]) { - uint step = 0; - int cmp_status; - uLong src_len = (uLong)strlen(s_pStr); -- uLong cmp_len = compressBound(src_len); - uLong uncomp_len = src_len; -+ uLong cmp_len; - uint8 *pCmp, *pUncomp; -+ size_t sz; - uint total_succeeded = 0; - (void)argc, (void)argv; - - printf("miniz.c version: %s\n", MZ_VERSION); - - do { -+ pCmp = (uint8 *)tdefl_compress_mem_to_heap(s_pStr, src_len, &cmp_len, 0); -+ if (!pCmp) { -+ printf("tdefl_compress_mem_to_heap failed\n"); -+ return EXIT_FAILURE; -+ } -+ if (src_len <= cmp_len) { -+ printf("tdefl_compress_mem_to_heap failed: from %u to %u bytes\n", -+ (mz_uint32)uncomp_len, (mz_uint32)cmp_len); -+ free(pCmp); -+ return EXIT_FAILURE; -+ } -+ -+ sz = tdefl_compress_mem_to_mem(pCmp, cmp_len, s_pStr, src_len, 0); -+ if (sz != cmp_len) { -+ printf("tdefl_compress_mem_to_mem failed: expected %u, got %u\n", -+ (mz_uint32)cmp_len, (mz_uint32)sz); -+ free(pCmp); -+ return EXIT_FAILURE; -+ } -+ - // Allocate buffers to hold compressed and uncompressed data. -+ free(pCmp); -+ cmp_len = compressBound(src_len); - pCmp = (mz_uint8 *)malloc((size_t)cmp_len); - pUncomp = (mz_uint8 *)malloc((size_t)src_len); - if ((!pCmp) || (!pUncomp)) { diff --git a/meta/recipes-graphics/vulkan/assimp/use-GNUInstallDirs-where-possible.patch b/meta/recipes-graphics/vulkan/assimp/use-GNUInstallDirs-where-possible.patch deleted file mode 100644 index e4f5b9ccbd..0000000000 --- a/meta/recipes-graphics/vulkan/assimp/use-GNUInstallDirs-where-possible.patch +++ /dev/null @@ -1,257 +0,0 @@ -From cbf94fd62ff831879d10f99aa7766d391ae8a9b7 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Victor=20Matar=C3=A9?= <matare@fh-aachen.de> -Date: Tue, 31 Mar 2020 21:30:07 +0200 -Subject: [PATCH] use GNUInstallDirs where possible - -Emulate the CMAKE_INSTALL_FULL_* variables on non-Unix systems and -disable redefining FHS-mandated install locations via user-editable -ASSIMP_*_INSTALL_DIR variables. Instead, if it REALLY proves necessary, -Unix users can edit the advanced, canonical CMAKE_INSTALL_* variables. ---- - CMakeLists.txt | 36 ++++++++++++++++++++++------------ - assimp.pc.in | 6 ++---- - assimpTargets-debug.cmake.in | 20 +++++++++---------- - assimpTargets-release.cmake.in | 18 ++++++++--------- - assimpTargets.cmake.in | 15 +------------- - 5 files changed, 45 insertions(+), 50 deletions(-) - -Upstream-Status: Backport -Comment: Additionally remove setting of ASSIMP_LIBRARY_DIRS, ASSIMP_INCLUDE_DIRS - and INTERFACE_INCLUDE_DIRECTORIES as default cross compile paths are enough - and setting them manually adds non-existing paths to CMake modules - -Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com> - -diff --git a/CMakeLists.txt b/CMakeLists.txt -index dcafb649f5..c23c0df33e 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -230,11 +230,6 @@ SET(LIBASSIMP-DEV_COMPONENT "libassimp${ASSIMP_VERSION_MAJOR}.${ASSIMP_VERSION_M - SET(CPACK_COMPONENTS_ALL assimp-bin ${LIBASSIMP_COMPONENT} ${LIBASSIMP-DEV_COMPONENT} assimp-dev) - SET(ASSIMP_LIBRARY_SUFFIX "" CACHE STRING "Suffix to append to library names") - --IF( UNIX ) -- # Use GNUInstallDirs for Unix predefined directories -- INCLUDE(GNUInstallDirs) --ENDIF( UNIX ) -- - # Grouped compiler settings - IF ((CMAKE_C_COMPILER_ID MATCHES "GNU") AND NOT CMAKE_COMPILER_IS_MINGW) - IF(NOT HUNTER_ENABLED) -@@ -329,14 +324,6 @@ IF ( CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR ) - SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_HOME_DIRECTORY}/bin" ) - ENDIF ( CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR ) - --# Cache these to allow the user to override them manually. --SET( ASSIMP_LIB_INSTALL_DIR "lib" CACHE STRING -- "Path the built library files are installed to." ) --SET( ASSIMP_INCLUDE_INSTALL_DIR "include" CACHE STRING -- "Path the header files are installed to." ) --SET( ASSIMP_BIN_INSTALL_DIR "bin" CACHE STRING -- "Path the tool executables are installed to." ) -- - get_cmake_property(is_multi_config GENERATOR_IS_MULTI_CONFIG) - - IF (INJECT_DEBUG_POSTFIX AND (is_multi_config OR CMAKE_BUILD_TYPE STREQUAL "Debug")) -@@ -391,6 +378,29 @@ IF(HUNTER_ENABLED) - ) - ELSE(HUNTER_ENABLED) - # cmake configuration files -+ -+ IF( UNIX ) -+ # Use GNUInstallDirs for Unix predefined directories -+ INCLUDE(GNUInstallDirs) -+ -+ SET( ASSIMP_LIB_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR}) -+ SET( ASSIMP_INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR}) -+ SET( ASSIMP_BIN_INSTALL_DIR ${CMAKE_INSTALL_BINDIR}) -+ ELSE( UNIX ) -+ # Cache these to allow the user to override them on non-Unix platforms -+ SET( ASSIMP_LIB_INSTALL_DIR "lib" CACHE STRING -+ "Path the built library files are installed to." ) -+ SET( ASSIMP_INCLUDE_INSTALL_DIR "include" CACHE STRING -+ "Path the header files are installed to." ) -+ SET( ASSIMP_BIN_INSTALL_DIR "bin" CACHE STRING -+ "Path the tool executables are installed to." ) -+ -+ SET(CMAKE_INSTALL_FULL_INCLUDEDIR ${CMAKE_INSTALL_PREFIX}/${ASSIMP_INCLUDE_INSTALL_DIR}) -+ SET(CMAKE_INSTALL_FULL_LIBDIR ${CMAKE_INSTALL_PREFIX}/${ASSIMP_LIB_INSTALL_DIR}) -+ SET(CMAKE_INSTALL_FULL_BINDIR ${CMAKE_INSTALL_PREFIX}/${ASSIMP_BIN_INSTALL_DIR}) -+ ENDIF( UNIX ) -+ -+ - CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/assimp-config.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/assimp-config.cmake" @ONLY IMMEDIATE) - CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/assimpTargets.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/assimpTargets.cmake" @ONLY IMMEDIATE) - IF (is_multi_config) -diff --git a/assimp.pc.in b/assimp.pc.in -index c659e19f2c..555a3a1d3b 100644 ---- a/assimp.pc.in -+++ b/assimp.pc.in -@@ -1,7 +1,5 @@ --prefix=@CMAKE_INSTALL_PREFIX@ --exec_prefix=@CMAKE_INSTALL_PREFIX@/ --libdir=@CMAKE_INSTALL_PREFIX@/@ASSIMP_LIB_INSTALL_DIR@ --includedir=@CMAKE_INSTALL_PREFIX@/../include/@ASSIMP_INCLUDE_INSTALL_DIR@ -+libdir=@CMAKE_INSTALL_FULL_LIBDIR@ -+includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@ - - Name: @CMAKE_PROJECT_NAME@ - Description: Import various well-known 3D model formats in an uniform manner. -diff --git a/assimpTargets-debug.cmake.in b/assimpTargets-debug.cmake.in -index 1ebe2a6081..f5034c9349 100644 ---- a/assimpTargets-debug.cmake.in -+++ b/assimpTargets-debug.cmake.in -@@ -42,22 +42,22 @@ if(MSVC) - # Import target "assimp::assimp" for configuration "Debug" - set_property(TARGET assimp::assimp APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG) - set_target_properties(assimp::assimp PROPERTIES -- IMPORTED_IMPLIB_DEBUG "${_IMPORT_PREFIX}/lib/${importLibraryName}" -- IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/bin/${sharedLibraryName}" -+ IMPORTED_IMPLIB_DEBUG "@CMAKE_INSTALL_FULL_LIBDIR@/${importLibraryName}" -+ IMPORTED_LOCATION_DEBUG "@CMAKE_INSTALL_FULL_BINDIR@/${sharedLibraryName}" - ) - list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp ) -- list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/lib/${importLibraryName}") -- list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/bin/${sharedLibraryName}" ) -+ list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${importLibraryName}") -+ list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_BINDIR@/${sharedLibraryName}" ) - else() - set(staticLibraryName "assimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_DEBUG_POSTFIX@@CMAKE_STATIC_LIBRARY_SUFFIX@") - - # Import target "assimp::assimp" for configuration "Debug" - set_property(TARGET assimp::assimp APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG) - set_target_properties(assimp::assimp PROPERTIES -- IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/lib/${staticLibraryName}" -+ IMPORTED_LOCATION_DEBUG "@CMAKE_INSTALL_FULL_LIBDIR@/${staticLibraryName}" - ) - list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp ) -- list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/lib/${staticLibraryName}") -+ list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${staticLibraryName}") - endif() - - else() -@@ -66,17 +66,17 @@ else() - set(sharedLibraryName "libassimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_DEBUG_POSTFIX@@CMAKE_SHARED_LIBRARY_SUFFIX@.@ASSIMP_VERSION_MAJOR@") - set_target_properties(assimp::assimp PROPERTIES - IMPORTED_SONAME_DEBUG "${sharedLibraryName}" -- IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/lib/${sharedLibraryName}" -+ IMPORTED_LOCATION_DEBUG "@CMAKE_INSTALL_FULL_LIBDIR@/${sharedLibraryName}" - ) - list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp ) -- list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/lib/${sharedLibraryName}" ) -+ list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${sharedLibraryName}" ) - else() - set(staticLibraryName "libassimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_DEBUG_POSTFIX@@CMAKE_STATIC_LIBRARY_SUFFIX@") - set_target_properties(assimp::assimp PROPERTIES -- IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/lib/${staticLibraryName}" -+ IMPORTED_LOCATION_DEBUG "@CMAKE_INSTALL_FULL_LIBDIR@/${staticLibraryName}" - ) - list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp ) -- list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/lib/${staticLibraryName}" ) -+ list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${staticLibraryName}" ) - endif() - endif() - -diff --git a/assimpTargets-release.cmake.in b/assimpTargets-release.cmake.in -index f3db8f12cd..a416e8899b 100644 ---- a/assimpTargets-release.cmake.in -+++ b/assimpTargets-release.cmake.in -@@ -42,12 +42,12 @@ if(MSVC) - # Import target "assimp::assimp" for configuration "Release" - set_property(TARGET assimp::assimp APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) - set_target_properties(assimp::assimp PROPERTIES -- IMPORTED_IMPLIB_RELEASE "${_IMPORT_PREFIX}/lib/${importLibraryName}" -- IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/bin/${sharedLibraryName}" -+ IMPORTED_IMPLIB_RELEASE "@CMAKE_INSTALL_FULL_LIBDIR@/${importLibraryName}" -+ IMPORTED_LOCATION_RELEASE "@CMAKE_INSTALL_FULL_BINDIR@/${sharedLibraryName}" - ) - list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp ) -- list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/lib/${importLibraryName}") -- list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/bin/${sharedLibraryName}" ) -+ list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${importLibraryName}") -+ list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_BINDIR@/${sharedLibraryName}" ) - else() - set(staticLibraryName "assimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_STATIC_LIBRARY_SUFFIX@") - -@@ -57,7 +57,7 @@ if(MSVC) - IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/${staticLibraryName}" - ) - list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp ) -- list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/lib/${staticLibraryName}") -+ list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${staticLibraryName}") - endif() - - else() -@@ -70,17 +70,17 @@ else() - endif() - set_target_properties(assimp::assimp PROPERTIES - IMPORTED_SONAME_RELEASE "${sharedLibraryName}" -- IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/${sharedLibraryName}" -+ IMPORTED_LOCATION_RELEASE "@CMAKE_INSTALL_FULL_LIBDIR@/${sharedLibraryName}" - ) - list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp ) -- list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/lib/${sharedLibraryName}" ) -+ list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${sharedLibraryName}" ) - else() - set(staticLibraryName "libassimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_STATIC_LIBRARY_SUFFIX@") - set_target_properties(assimp::assimp PROPERTIES -- IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/${staticLibraryName}" -+ IMPORTED_LOCATION_RELEASE "@CMAKE_INSTALL_FULL_LIBDIR@/${staticLibraryName}" - ) - list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp ) -- list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/lib/${staticLibraryName}" ) -+ list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${staticLibraryName}" ) - endif() - endif() - -@@ -91,8 +91,6 @@ get_filename_component(ASSIMP_ROOT_DIR "@CMAKE_INSTALL_PREFIX@" REALPATH) - - set( ASSIMP_CXX_FLAGS ) # dynamically linked library - set( ASSIMP_LINK_FLAGS "" ) --set( ASSIMP_LIBRARY_DIRS "${ASSIMP_ROOT_DIR}/@ASSIMP_LIB_INSTALL_DIR@") --set( ASSIMP_INCLUDE_DIRS "${ASSIMP_ROOT_DIR}/@ASSIMP_INCLUDE_INSTALL_DIR@") - if(ASSIMP_BUILD_SHARED_LIBS) - set( ASSIMP_LIBRARIES ${sharedLibraryName}) - else() - -diff --git a/assimpTargets.cmake.in b/assimpTargets.cmake.in -index ab1a8d2c7b..ef90c834a6 100644 ---- a/assimpTargets.cmake.in -+++ b/assimpTargets.cmake.in -@@ -40,16 +40,6 @@ unset(_targetsDefined) - unset(_targetsNotDefined) - unset(_expectedTargets) - -- --# Compute the installation prefix relative to this file. --get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) --get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) --get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) --get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) --if(_IMPORT_PREFIX STREQUAL "/") -- set(_IMPORT_PREFIX "") --endif() -- - # Create imported target assimp::assimp - if(@BUILD_SHARED_LIBS@) - add_library(assimp::assimp SHARED IMPORTED) -@@ -60,7 +50,7 @@ endif() - set_target_properties(assimp::assimp PROPERTIES - COMPATIBLE_INTERFACE_STRING "assimp_MAJOR_VERSION" - INTERFACE_assimp_MAJOR_VERSION "1" -- INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include;${_IMPORT_PREFIX}/include" -+ #INTERFACE_INCLUDE_DIRECTORIES "@CMAKE_INSTALL_FULL_INCLUDEDIR@" - #INTERFACE_LINK_LIBRARIES "TxtUtils::TxtUtils;MealyMachine::MealyMachine" - ) - -@@ -75,9 +65,6 @@ foreach(f ${CONFIG_FILES}) - include(${f}) - endforeach() - --# Cleanup temporary variables. --set(_IMPORT_PREFIX) -- - # Loop over all imported files and verify that they actually exist - foreach(target ${_IMPORT_CHECK_TARGETS} ) - foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} ) - diff --git a/meta/recipes-graphics/vulkan/assimp_5.0.1.bb b/meta/recipes-graphics/vulkan/assimp_5.0.1.bb deleted file mode 100644 index 89c555f08e..0000000000 --- a/meta/recipes-graphics/vulkan/assimp_5.0.1.bb +++ /dev/null @@ -1,26 +0,0 @@ -DESCRIPTION = "Open Asset Import Library is a portable Open Source library to import \ - various well-known 3D model formats in a uniform manner." -HOMEPAGE = "http://www.assimp.org/" -SECTION = "devel" - -LICENSE = "BSD-3-Clause" -LIC_FILES_CHKSUM = "file://LICENSE;md5=2119edef0916b0bd511cb3c731076271" - -DEPENDS = "zlib" - -SRC_URI = "git://github.com/assimp/assimp.git;branch=assimp_5.0_release \ - file://0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch \ - file://use-GNUInstallDirs-where-possible.patch \ - file://0001-assimp-remove-shared-lib-from-_IMPORT_CHECK_TARGETS.patch \ - " -UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>(\d+(\.\d+)+))" - -SRCREV = "8f0c6b04b2257a520aaab38421b2e090204b69df" - -S = "${WORKDIR}/git" - -inherit cmake - -EXTRA_OECMAKE = "-DASSIMP_BUILD_ASSIMP_TOOLS=OFF -DASSIMP_BUILD_TESTS=OFF -DASSIMP_LIB_INSTALL_DIR=${baselib}" - -BBCLASSEXTEND = "native nativesdk" -- 2.17.1 ^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: [OE-core] [PATCH 1/1] assimp: Remove it 2021-09-07 9:17 ` [PATCH 1/1] " Robert Yang @ 2021-09-07 12:04 ` Randy MacLeod 2021-09-07 12:10 ` Ross Burton 2021-09-07 12:49 ` Alexander Kanavin 0 siblings, 2 replies; 17+ messages in thread From: Randy MacLeod @ 2021-09-07 12:04 UTC (permalink / raw) To: Robert Yang, openembedded-core On 2021-09-07 5:17 a.m., Robert Yang wrote: > Remove it since it has license issues: > > * scripts/StepImporter/schema_ifc2x3.exp > Copyright by: International Alliance for Interoperability, 1996-2005 All rights > reserved. No part of this documentation may be reproduced, stored in a > retrieval system, or transmitted in any form or by any means, without the prior > written permission of the owner > > * test/models-nonbsd/X/dwarf-Read-Me.txt > RESTRICTIONS: This model pack is available for use in freeware, shareware, > commercial games/software with the following restrictions:- **You may not > sell/re-sell this model pack or claim it as your own. ***You may not > redistribute this pack in some other model pack through a website or on a > compilation CD of any kind, without my written consent. Psi > http://www.psionic3d.co.uk > > * test/models-nonbsd/B3D/turtle.source.txt > Copyright 2004, Psionic Design e-mail: psionic@blueyonder.co.uk Used with > permission. RESTRICTIONS: This model pack is available for use in freeware, > shareware, commercial games/software with the following restrictions:- **You > may not sell/re-sell this model pack or claim it as your own. ***You may not > redistribute this pack in some other model pack through a website or on a > compilation CD of any kind, without my written consent. > > And no recipes depend on it, so remove it. In master, it seems that vulkan* depends on assimp: https://layers.openembedded.org/layerindex/branch/master/recipes/?q=depends%3Aassimp and lots of recipes in meta-qt5 and meta-ros* so removing it here would just push the problem around. I'll look at the sections that you have pointed out later today. ../Randy > > Signed-off-by: Robert Yang <liezhi.yang@windriver.com> > --- > meta/conf/distro/include/maintainers.inc | 1 - > ...hared-lib-from-_IMPORT_CHECK_TARGETS.patch | 32 - > ...hub.com-assimp-assimp-issues-2733-up.patch | 1664 ----------------- > .../use-GNUInstallDirs-where-possible.patch | 257 --- > meta/recipes-graphics/vulkan/assimp_5.0.1.bb | 26 - > 5 files changed, 1980 deletions(-) > delete mode 100644 meta/recipes-graphics/vulkan/assimp/0001-assimp-remove-shared-lib-from-_IMPORT_CHECK_TARGETS.patch > delete mode 100644 meta/recipes-graphics/vulkan/assimp/0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch > delete mode 100644 meta/recipes-graphics/vulkan/assimp/use-GNUInstallDirs-where-possible.patch > delete mode 100644 meta/recipes-graphics/vulkan/assimp_5.0.1.bb > > diff --git a/meta/conf/distro/include/maintainers.inc b/meta/conf/distro/include/maintainers.inc > index 0e8185f4e3..e560ba39dd 100644 > --- a/meta/conf/distro/include/maintainers.inc > +++ b/meta/conf/distro/include/maintainers.inc > @@ -46,7 +46,6 @@ RECIPE_MAINTAINER:pn-apt = "Aníbal Limón <limon.anibal@gmail.com>" > RECIPE_MAINTAINER:pn-argp-standalone = "Khem Raj <raj.khem@gmail.com>" > RECIPE_MAINTAINER:pn-asciidoc = "Yi Zhao <yi.zhao@windriver.com>" > RECIPE_MAINTAINER:pn-aspell = "Anuj Mittal <anuj.mittal@intel.com>" > -RECIPE_MAINTAINER:pn-assimp = "Anuj Mittal <anuj.mittal@intel.com>" > RECIPE_MAINTAINER:pn-at = "Chen Qi <Qi.Chen@windriver.com>" > RECIPE_MAINTAINER:pn-at-spi2-atk = "Tim Orling <timothy.t.orling@intel.com>" > RECIPE_MAINTAINER:pn-at-spi2-core = "Tim Orling <timothy.t.orling@intel.com>" > diff --git a/meta/recipes-graphics/vulkan/assimp/0001-assimp-remove-shared-lib-from-_IMPORT_CHECK_TARGETS.patch b/meta/recipes-graphics/vulkan/assimp/0001-assimp-remove-shared-lib-from-_IMPORT_CHECK_TARGETS.patch > deleted file mode 100644 > index 1078148d6b..0000000000 > --- a/meta/recipes-graphics/vulkan/assimp/0001-assimp-remove-shared-lib-from-_IMPORT_CHECK_TARGETS.patch > +++ /dev/null > @@ -1,32 +0,0 @@ > -From: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com> > -Date: Fri, 13 Aug 2021 16:42:48 +0530 > -Subject: [PATCH] assimp: remove shared lib from _IMPORT_CHECK_TARGETS > - > -In the target assimp::assimp shared library verification removed > -as it is giving configuration error when used by 3rd part component to > -configure itself using assimp::assimp target > - > -Upstream-Status: Inappropriate [oe specific] > - > -Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com> > ---- > - assimpTargets-release.cmake.in | 4 ++-- > - 1 file changed, 2 insertions(+), 2 deletions(-) > - > -diff --git a/assimpTargets-release.cmake.in b/assimpTargets-release.cmake.in > -index cd2fac7e0..52edc7990 100644 > ---- a/assimpTargets-release.cmake.in > -+++ b/assimpTargets-release.cmake.in > -@@ -72,8 +72,8 @@ else() > - IMPORTED_SONAME_RELEASE "${sharedLibraryName}" > - IMPORTED_LOCATION_RELEASE "@CMAKE_INSTALL_FULL_LIBDIR@/${sharedLibraryName}" > - ) > -- list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp ) > -- list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${sharedLibraryName}" ) > -+ #list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp ) > -+ #list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${sharedLibraryName}" ) > - else() > - set(staticLibraryName "libassimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_STATIC_LIBRARY_SUFFIX@") > - set_target_properties(assimp::assimp PROPERTIES > --- > -2.17.1 > diff --git a/meta/recipes-graphics/vulkan/assimp/0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch b/meta/recipes-graphics/vulkan/assimp/0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch > deleted file mode 100644 > index 87a1658710..0000000000 > --- a/meta/recipes-graphics/vulkan/assimp/0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch > +++ /dev/null > @@ -1,1664 +0,0 @@ > -From 7fc220b2350d78942fb3935cad0b1564418ebe8f Mon Sep 17 00:00:00 2001 > -From: Kim Kulling <kim.kulling@googlemail.com> > -Date: Tue, 19 Nov 2019 20:30:40 +0100 > -Subject: [PATCH] closes https://github.com/assimp/assimp/issues/2733: update > - of zlip to fix gcc build for v9.2.0 32 bit > - > -Upstream-Status: Backport [https://github.com/assimp/assimp/commit/f78446b14aff46db2ef27d062a275b6a01fd68b1] > -Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com> > ---- > - contrib/zip/.gitignore | 2 + > - contrib/zip/CMakeLists.txt | 83 +++++- > - contrib/zip/README.md | 12 +- > - contrib/zip/appveyor.yml | 2 +- > - contrib/zip/src/miniz.h | 457 ++++++++++++++++++++++++++++---- > - contrib/zip/src/zip.c | 62 +++-- > - contrib/zip/src/zip.h | 457 ++++++++++++++++---------------- > - contrib/zip/test/CMakeLists.txt | 27 +- > - contrib/zip/test/test.c | 38 ++- > - contrib/zip/test/test_miniz.c | 25 +- > - 10 files changed, 821 insertions(+), 344 deletions(-) > - > -diff --git a/contrib/zip/.gitignore b/contrib/zip/.gitignore > -index a7904a1e..49b2cb2f 100644 > ---- a/contrib/zip/.gitignore > -+++ b/contrib/zip/.gitignore > -@@ -1,6 +1,7 @@ > - /build/ > - /test/build/ > - /xcodeproj/ > -+.vscode/ > - > - # Object files > - *.o > -@@ -54,3 +55,4 @@ zip.dir/ > - test/test.exe.vcxproj.filters > - test/test.exe.vcxproj > - test/test.exe.dir/ > -+ > -diff --git a/contrib/zip/CMakeLists.txt b/contrib/zip/CMakeLists.txt > -index b46dbb1d..77916d2e 100644 > ---- a/contrib/zip/CMakeLists.txt > -+++ b/contrib/zip/CMakeLists.txt > -@@ -1,10 +1,14 @@ > --cmake_minimum_required(VERSION 2.8) > --project(zip) > --enable_language(C) > -+cmake_minimum_required(VERSION 3.0) > -+ > -+project(zip > -+ LANGUAGES C > -+ VERSION "0.1.15") > - set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) > - > -+option(CMAKE_DISABLE_TESTING "Disable test creation" OFF) > -+ > - if (MSVC) > -- # Use secure functions by defaualt and suppress warnings about "deprecated" functions > -+ # Use secure functions by default and suppress warnings about "deprecated" functions > - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1") > - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT=1") > - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D _CRT_NONSTDC_NO_WARNINGS=1 /D _CRT_SECURE_NO_WARNINGS=1") > -@@ -12,28 +16,80 @@ elseif ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" OR > - "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" OR > - "${CMAKE_C_COMPILER_ID}" STREQUAL "AppleClang") > - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -Wall -Wextra -Werror -pedantic") > -+ if(ENABLE_COVERAGE) > -+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 -fprofile-arcs -ftest-coverage") > -+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage") > -+ endif() > - endif (MSVC) > - > - # zip > - set(SRC src/miniz.h src/zip.h src/zip.c) > - add_library(${PROJECT_NAME} ${SRC}) > --target_include_directories(${PROJECT_NAME} INTERFACE src) > -+target_include_directories(${PROJECT_NAME} PUBLIC > -+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src> > -+ $<INSTALL_INTERFACE:include> > -+) > - > - # test > - if (NOT CMAKE_DISABLE_TESTING) > - enable_testing() > - add_subdirectory(test) > - find_package(Sanitizers) > -- add_sanitizers(${PROJECT_NAME} test.exe) > -- add_sanitizers(${PROJECT_NAME} test_miniz.exe) > -+ add_sanitizers(${PROJECT_NAME} ${test_out} ${test_miniz_out}) > - endif() > - > -+#### > -+# Installation (https://github.com/forexample/package-example) { > -+ > -+set(CONFIG_INSTALL_DIR "lib/cmake/${PROJECT_NAME}") > -+set(INCLUDE_INSTALL_DIR "include") > -+ > -+set(GENERATED_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated") > -+ > -+# Configuration > -+set(VERSION_CONFIG "${GENERATED_DIR}/${PROJECT_NAME}ConfigVersion.cmake") > -+set(PROJECT_CONFIG "${GENERATED_DIR}/${PROJECT_NAME}Config.cmake") > -+set(TARGETS_EXPORT_NAME "${PROJECT_NAME}Targets") > -+set(NAMESPACE "${PROJECT_NAME}::") > -+ > -+# Include module with fuction 'write_basic_package_version_file' > -+include(CMakePackageConfigHelpers) > -+ > -+# Note: PROJECT_VERSION is used as a VERSION > -+write_basic_package_version_file( > -+ "${VERSION_CONFIG}" COMPATIBILITY SameMajorVersion > -+) > -+ > -+# Use variables: > -+# * TARGETS_EXPORT_NAME > -+# * PROJECT_NAME > -+configure_package_config_file( > -+ "cmake/Config.cmake.in" > -+ "${PROJECT_CONFIG}" > -+ INSTALL_DESTINATION "${CONFIG_INSTALL_DIR}" > -+) > -+ > -+install( > -+ FILES "${PROJECT_CONFIG}" "${VERSION_CONFIG}" > -+ DESTINATION "${CONFIG_INSTALL_DIR}" > -+) > -+ > -+install( > -+ EXPORT "${TARGETS_EXPORT_NAME}" > -+ NAMESPACE "${NAMESPACE}" > -+ DESTINATION "${CONFIG_INSTALL_DIR}" > -+) > -+ > -+# } > -+ > - install(TARGETS ${PROJECT_NAME} > -+ EXPORT ${TARGETS_EXPORT_NAME} > - RUNTIME DESTINATION bin > - ARCHIVE DESTINATION lib > - LIBRARY DESTINATION lib > -- COMPONENT library) > --install(FILES ${PROJECT_SOURCE_DIR}/src/zip.h DESTINATION include) > -+ INCLUDES DESTINATION ${INCLUDE_INSTALL_DIR} > -+) > -+install(FILES ${PROJECT_SOURCE_DIR}/src/zip.h DESTINATION ${INCLUDE_INSTALL_DIR}/zip) > - > - # uninstall target (https://gitlab.kitware.com/cmake/community/wikis/FAQ#can-i-do-make-uninstall-with-cmake) > - if(NOT TARGET uninstall) > -@@ -45,3 +101,12 @@ if(NOT TARGET uninstall) > - add_custom_target(uninstall > - COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake/cmake_uninstall.cmake) > - endif() > -+ > -+find_package(Doxygen) > -+if(DOXYGEN_FOUND) > -+ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY) > -+ add_custom_target(doc > -+ ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile > -+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} > -+ COMMENT "Generating API documentation with Doxygen" VERBATIM) > -+endif() > -diff --git a/contrib/zip/README.md b/contrib/zip/README.md > -index d5fb8cd2..14eb9a34 100644 > ---- a/contrib/zip/README.md > -+++ b/contrib/zip/README.md > -@@ -71,7 +71,7 @@ int arg = 2; > - zip_extract("foo.zip", "/tmp", on_extract_entry, &arg); > - ``` > - > --* Extract a zip entry into memory. > -+* Extract a zip entry into memory. > - ```c > - void *buf = NULL; > - size_t bufsize; > -@@ -89,7 +89,7 @@ zip_close(zip); > - free(buf); > - ``` > - > --* Extract a zip entry into memory (no internal allocation). > -+* Extract a zip entry into memory (no internal allocation). > - ```c > - unsigned char *buf; > - size_t bufsize; > -@@ -110,7 +110,7 @@ zip_close(zip); > - free(buf); > - ``` > - > --* Extract a zip entry into memory using callback. > -+* Extract a zip entry into memory using callback. > - ```c > - struct buffer_t { > - char *data; > -@@ -144,7 +144,7 @@ free(buf.data); > - ``` > - > - > --* Extract a zip entry into a file. > -+* Extract a zip entry into a file. > - ```c > - struct zip_t *zip = zip_open("foo.zip", 0, 'r'); > - { > -@@ -157,7 +157,7 @@ struct zip_t *zip = zip_open("foo.zip", 0, 'r'); > - zip_close(zip); > - ``` > - > --* List of all zip entries > -+* List of all zip entries > - ```c > - struct zip_t *zip = zip_open("foo.zip", 0, 'r'); > - int i, n = zip_total_entries(zip); > -@@ -174,7 +174,7 @@ for (i = 0; i < n; ++i) { > - zip_close(zip); > - ``` > - > --## Bindings > -+# Bindings > - Compile zip library as a dynamic library. > - ```shell > - $ mkdir build > -diff --git a/contrib/zip/appveyor.yml b/contrib/zip/appveyor.yml > -index 0be6373c..ea17f5de 100644 > ---- a/contrib/zip/appveyor.yml > -+++ b/contrib/zip/appveyor.yml > -@@ -1,4 +1,4 @@ > --version: zip-0.1.9.{build} > -+version: zip-0.1.15.{build} > - build_script: > - - cmd: >- > - cd c:\projects\zip > -diff --git a/contrib/zip/src/miniz.h b/contrib/zip/src/miniz.h > -index 2c27a94d..c4fcfb83 100644 > ---- a/contrib/zip/src/miniz.h > -+++ b/contrib/zip/src/miniz.h > -@@ -221,6 +221,7 @@ > - #ifndef MINIZ_HEADER_INCLUDED > - #define MINIZ_HEADER_INCLUDED > - > -+#include <stdint.h> > - #include <stdlib.h> > - > - // Defines to completely disable specific portions of miniz.c: > -@@ -284,7 +285,8 @@ > - /* Set MINIZ_USE_UNALIGNED_LOADS_AND_STORES only if not set */ > - #if !defined(MINIZ_USE_UNALIGNED_LOADS_AND_STORES) > - #if MINIZ_X86_OR_X64_CPU > --/* Set MINIZ_USE_UNALIGNED_LOADS_AND_STORES to 1 on CPU's that permit efficient integer loads and stores from unaligned addresses. */ > -+/* Set MINIZ_USE_UNALIGNED_LOADS_AND_STORES to 1 on CPU's that permit efficient > -+ * integer loads and stores from unaligned addresses. */ > - #define MINIZ_USE_UNALIGNED_LOADS_AND_STORES 1 > - #define MINIZ_UNALIGNED_USE_MEMCPY > - #else > -@@ -354,6 +356,44 @@ enum { > - MZ_FIXED = 4 > - }; > - > -+/* miniz error codes. Be sure to update mz_zip_get_error_string() if you add or > -+ * modify this enum. */ > -+typedef enum { > -+ MZ_ZIP_NO_ERROR = 0, > -+ MZ_ZIP_UNDEFINED_ERROR, > -+ MZ_ZIP_TOO_MANY_FILES, > -+ MZ_ZIP_FILE_TOO_LARGE, > -+ MZ_ZIP_UNSUPPORTED_METHOD, > -+ MZ_ZIP_UNSUPPORTED_ENCRYPTION, > -+ MZ_ZIP_UNSUPPORTED_FEATURE, > -+ MZ_ZIP_FAILED_FINDING_CENTRAL_DIR, > -+ MZ_ZIP_NOT_AN_ARCHIVE, > -+ MZ_ZIP_INVALID_HEADER_OR_CORRUPTED, > -+ MZ_ZIP_UNSUPPORTED_MULTIDISK, > -+ MZ_ZIP_DECOMPRESSION_FAILED, > -+ MZ_ZIP_COMPRESSION_FAILED, > -+ MZ_ZIP_UNEXPECTED_DECOMPRESSED_SIZE, > -+ MZ_ZIP_CRC_CHECK_FAILED, > -+ MZ_ZIP_UNSUPPORTED_CDIR_SIZE, > -+ MZ_ZIP_ALLOC_FAILED, > -+ MZ_ZIP_FILE_OPEN_FAILED, > -+ MZ_ZIP_FILE_CREATE_FAILED, > -+ MZ_ZIP_FILE_WRITE_FAILED, > -+ MZ_ZIP_FILE_READ_FAILED, > -+ MZ_ZIP_FILE_CLOSE_FAILED, > -+ MZ_ZIP_FILE_SEEK_FAILED, > -+ MZ_ZIP_FILE_STAT_FAILED, > -+ MZ_ZIP_INVALID_PARAMETER, > -+ MZ_ZIP_INVALID_FILENAME, > -+ MZ_ZIP_BUF_TOO_SMALL, > -+ MZ_ZIP_INTERNAL_ERROR, > -+ MZ_ZIP_FILE_NOT_FOUND, > -+ MZ_ZIP_ARCHIVE_TOO_LARGE, > -+ MZ_ZIP_VALIDATION_FAILED, > -+ MZ_ZIP_WRITE_CALLBACK_FAILED, > -+ MZ_ZIP_TOTAL_ERRORS > -+} mz_zip_error; > -+ > - // Method > - #define MZ_DEFLATED 8 > - > -@@ -696,6 +736,7 @@ typedef size_t (*mz_file_read_func)(void *pOpaque, mz_uint64 file_ofs, > - void *pBuf, size_t n); > - typedef size_t (*mz_file_write_func)(void *pOpaque, mz_uint64 file_ofs, > - const void *pBuf, size_t n); > -+typedef mz_bool (*mz_file_needs_keepalive)(void *pOpaque); > - > - struct mz_zip_internal_state_tag; > - typedef struct mz_zip_internal_state_tag mz_zip_internal_state; > -@@ -707,13 +748,27 @@ typedef enum { > - MZ_ZIP_MODE_WRITING_HAS_BEEN_FINALIZED = 3 > - } mz_zip_mode; > - > --typedef struct mz_zip_archive_tag { > -+typedef enum { > -+ MZ_ZIP_TYPE_INVALID = 0, > -+ MZ_ZIP_TYPE_USER, > -+ MZ_ZIP_TYPE_MEMORY, > -+ MZ_ZIP_TYPE_HEAP, > -+ MZ_ZIP_TYPE_FILE, > -+ MZ_ZIP_TYPE_CFILE, > -+ MZ_ZIP_TOTAL_TYPES > -+} mz_zip_type; > -+ > -+typedef struct { > - mz_uint64 m_archive_size; > - mz_uint64 m_central_directory_file_ofs; > -- mz_uint m_total_files; > -+ > -+ /* We only support up to UINT32_MAX files in zip64 mode. */ > -+ mz_uint32 m_total_files; > - mz_zip_mode m_zip_mode; > -+ mz_zip_type m_zip_type; > -+ mz_zip_error m_last_error; > - > -- mz_uint m_file_offset_alignment; > -+ mz_uint64 m_file_offset_alignment; > - > - mz_alloc_func m_pAlloc; > - mz_free_func m_pFree; > -@@ -722,6 +777,7 @@ typedef struct mz_zip_archive_tag { > - > - mz_file_read_func m_pRead; > - mz_file_write_func m_pWrite; > -+ mz_file_needs_keepalive m_pNeeds_keepalive; > - void *m_pIO_opaque; > - > - mz_zip_internal_state *m_pState; > -@@ -1263,6 +1319,9 @@ mz_uint tdefl_create_comp_flags_from_zip_params(int level, int window_bits, > - int strategy); > - #endif // #ifndef MINIZ_NO_ZLIB_APIS > - > -+#define MZ_UINT16_MAX (0xFFFFU) > -+#define MZ_UINT32_MAX (0xFFFFFFFFU) > -+ > - #ifdef __cplusplus > - } > - #endif > -@@ -1311,6 +1370,11 @@ typedef unsigned char mz_validate_uint64[sizeof(mz_uint64) == 8 ? 1 : -1]; > - ((mz_uint32)(((const mz_uint8 *)(p))[3]) << 24U)) > - #endif > - > -+#define MZ_READ_LE64(p) \ > -+ (((mz_uint64)MZ_READ_LE32(p)) | \ > -+ (((mz_uint64)MZ_READ_LE32((const mz_uint8 *)(p) + sizeof(mz_uint32))) \ > -+ << 32U)) > -+ > - #ifdef _MSC_VER > - #define MZ_FORCEINLINE __forceinline > - #elif defined(__GNUC__) > -@@ -4160,6 +4224,17 @@ enum { > - MZ_ZIP_LOCAL_DIR_HEADER_SIZE = 30, > - MZ_ZIP_CENTRAL_DIR_HEADER_SIZE = 46, > - MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE = 22, > -+ > -+ /* ZIP64 archive identifier and record sizes */ > -+ MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIG = 0x06064b50, > -+ MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIG = 0x07064b50, > -+ MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE = 56, > -+ MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE = 20, > -+ MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID = 0x0001, > -+ MZ_ZIP_DATA_DESCRIPTOR_ID = 0x08074b50, > -+ MZ_ZIP_DATA_DESCRIPTER_SIZE64 = 24, > -+ MZ_ZIP_DATA_DESCRIPTER_SIZE32 = 16, > -+ > - // Central directory header record offsets > - MZ_ZIP_CDH_SIG_OFS = 0, > - MZ_ZIP_CDH_VERSION_MADE_BY_OFS = 4, > -@@ -4199,6 +4274,31 @@ enum { > - MZ_ZIP_ECDH_CDIR_SIZE_OFS = 12, > - MZ_ZIP_ECDH_CDIR_OFS_OFS = 16, > - MZ_ZIP_ECDH_COMMENT_SIZE_OFS = 20, > -+ > -+ /* ZIP64 End of central directory locator offsets */ > -+ MZ_ZIP64_ECDL_SIG_OFS = 0, /* 4 bytes */ > -+ MZ_ZIP64_ECDL_NUM_DISK_CDIR_OFS = 4, /* 4 bytes */ > -+ MZ_ZIP64_ECDL_REL_OFS_TO_ZIP64_ECDR_OFS = 8, /* 8 bytes */ > -+ MZ_ZIP64_ECDL_TOTAL_NUMBER_OF_DISKS_OFS = 16, /* 4 bytes */ > -+ > -+ /* ZIP64 End of central directory header offsets */ > -+ MZ_ZIP64_ECDH_SIG_OFS = 0, /* 4 bytes */ > -+ MZ_ZIP64_ECDH_SIZE_OF_RECORD_OFS = 4, /* 8 bytes */ > -+ MZ_ZIP64_ECDH_VERSION_MADE_BY_OFS = 12, /* 2 bytes */ > -+ MZ_ZIP64_ECDH_VERSION_NEEDED_OFS = 14, /* 2 bytes */ > -+ MZ_ZIP64_ECDH_NUM_THIS_DISK_OFS = 16, /* 4 bytes */ > -+ MZ_ZIP64_ECDH_NUM_DISK_CDIR_OFS = 20, /* 4 bytes */ > -+ MZ_ZIP64_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS = 24, /* 8 bytes */ > -+ MZ_ZIP64_ECDH_CDIR_TOTAL_ENTRIES_OFS = 32, /* 8 bytes */ > -+ MZ_ZIP64_ECDH_CDIR_SIZE_OFS = 40, /* 8 bytes */ > -+ MZ_ZIP64_ECDH_CDIR_OFS_OFS = 48, /* 8 bytes */ > -+ MZ_ZIP_VERSION_MADE_BY_DOS_FILESYSTEM_ID = 0, > -+ MZ_ZIP_DOS_DIR_ATTRIBUTE_BITFLAG = 0x10, > -+ MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_IS_ENCRYPTED = 1, > -+ MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_COMPRESSED_PATCH_FLAG = 32, > -+ MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_USES_STRONG_ENCRYPTION = 64, > -+ MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_LOCAL_DIR_IS_MASKED = 8192, > -+ MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_UTF8 = 1 << 11 > - }; > - > - typedef struct { > -@@ -4211,7 +4311,24 @@ struct mz_zip_internal_state_tag { > - mz_zip_array m_central_dir; > - mz_zip_array m_central_dir_offsets; > - mz_zip_array m_sorted_central_dir_offsets; > -+ > -+ /* The flags passed in when the archive is initially opened. */ > -+ uint32_t m_init_flags; > -+ > -+ /* MZ_TRUE if the archive has a zip64 end of central directory headers, etc. > -+ */ > -+ mz_bool m_zip64; > -+ > -+ /* MZ_TRUE if we found zip64 extended info in the central directory (m_zip64 > -+ * will also be slammed to true too, even if we didn't find a zip64 end of > -+ * central dir header, etc.) */ > -+ mz_bool m_zip64_has_extended_info_fields; > -+ > -+ /* These fields are used by the file, FILE, memory, and memory/heap read/write > -+ * helpers. */ > - MZ_FILE *m_pFile; > -+ mz_uint64 m_file_archive_start_ofs; > -+ > - void *m_pMem; > - size_t m_mem_size; > - size_t m_mem_capacity; > -@@ -4363,6 +4480,13 @@ static mz_bool mz_zip_set_file_times(const char *pFilename, time_t access_time, > - #endif /* #ifndef MINIZ_NO_STDIO */ > - #endif /* #ifndef MINIZ_NO_TIME */ > - > -+static MZ_FORCEINLINE mz_bool mz_zip_set_error(mz_zip_archive *pZip, > -+ mz_zip_error err_num) { > -+ if (pZip) > -+ pZip->m_last_error = err_num; > -+ return MZ_FALSE; > -+} > -+ > - static mz_bool mz_zip_reader_init_internal(mz_zip_archive *pZip, > - mz_uint32 flags) { > - (void)flags; > -@@ -4480,127 +4604,346 @@ mz_zip_reader_sort_central_dir_offsets_by_filename(mz_zip_archive *pZip) { > - } > - } > - > --static mz_bool mz_zip_reader_read_central_dir(mz_zip_archive *pZip, > -- mz_uint32 flags) { > -- mz_uint cdir_size, num_this_disk, cdir_disk_index; > -- mz_uint64 cdir_ofs; > -+static mz_bool mz_zip_reader_locate_header_sig(mz_zip_archive *pZip, > -+ mz_uint32 record_sig, > -+ mz_uint32 record_size, > -+ mz_int64 *pOfs) { > - mz_int64 cur_file_ofs; > -- const mz_uint8 *p; > - mz_uint32 buf_u32[4096 / sizeof(mz_uint32)]; > - mz_uint8 *pBuf = (mz_uint8 *)buf_u32; > -- mz_bool sort_central_dir = > -- ((flags & MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY) == 0); > -- // Basic sanity checks - reject files which are too small, and check the first > -- // 4 bytes of the file to make sure a local header is there. > -- if (pZip->m_archive_size < MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) > -+ > -+ /* Basic sanity checks - reject files which are too small */ > -+ if (pZip->m_archive_size < record_size) > - return MZ_FALSE; > -- // Find the end of central directory record by scanning the file from the end > -- // towards the beginning. > -+ > -+ /* Find the record by scanning the file from the end towards the beginning. */ > - cur_file_ofs = > - MZ_MAX((mz_int64)pZip->m_archive_size - (mz_int64)sizeof(buf_u32), 0); > - for (;;) { > - int i, > - n = (int)MZ_MIN(sizeof(buf_u32), pZip->m_archive_size - cur_file_ofs); > -+ > - if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pBuf, n) != (mz_uint)n) > - return MZ_FALSE; > -- for (i = n - 4; i >= 0; --i) > -- if (MZ_READ_LE32(pBuf + i) == MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG) > -- break; > -+ > -+ for (i = n - 4; i >= 0; --i) { > -+ mz_uint s = MZ_READ_LE32(pBuf + i); > -+ if (s == record_sig) { > -+ if ((pZip->m_archive_size - (cur_file_ofs + i)) >= record_size) > -+ break; > -+ } > -+ } > -+ > - if (i >= 0) { > - cur_file_ofs += i; > - break; > - } > -+ > -+ /* Give up if we've searched the entire file, or we've gone back "too far" > -+ * (~64kb) */ > - if ((!cur_file_ofs) || ((pZip->m_archive_size - cur_file_ofs) >= > -- (0xFFFF + MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE))) > -+ (MZ_UINT16_MAX + record_size))) > - return MZ_FALSE; > -+ > - cur_file_ofs = MZ_MAX(cur_file_ofs - (sizeof(buf_u32) - 3), 0); > - } > -- // Read and verify the end of central directory record. > -+ > -+ *pOfs = cur_file_ofs; > -+ return MZ_TRUE; > -+} > -+ > -+static mz_bool mz_zip_reader_read_central_dir(mz_zip_archive *pZip, > -+ mz_uint flags) { > -+ mz_uint cdir_size = 0, cdir_entries_on_this_disk = 0, num_this_disk = 0, > -+ cdir_disk_index = 0; > -+ mz_uint64 cdir_ofs = 0; > -+ mz_int64 cur_file_ofs = 0; > -+ const mz_uint8 *p; > -+ > -+ mz_uint32 buf_u32[4096 / sizeof(mz_uint32)]; > -+ mz_uint8 *pBuf = (mz_uint8 *)buf_u32; > -+ mz_bool sort_central_dir = > -+ ((flags & MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY) == 0); > -+ mz_uint32 zip64_end_of_central_dir_locator_u32 > -+ [(MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE + sizeof(mz_uint32) - 1) / > -+ sizeof(mz_uint32)]; > -+ mz_uint8 *pZip64_locator = (mz_uint8 *)zip64_end_of_central_dir_locator_u32; > -+ > -+ mz_uint32 zip64_end_of_central_dir_header_u32 > -+ [(MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE + sizeof(mz_uint32) - 1) / > -+ sizeof(mz_uint32)]; > -+ mz_uint8 *pZip64_end_of_central_dir = > -+ (mz_uint8 *)zip64_end_of_central_dir_header_u32; > -+ > -+ mz_uint64 zip64_end_of_central_dir_ofs = 0; > -+ > -+ /* Basic sanity checks - reject files which are too small, and check the first > -+ * 4 bytes of the file to make sure a local header is there. */ > -+ if (pZip->m_archive_size < MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) > -+ return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE); > -+ > -+ if (!mz_zip_reader_locate_header_sig( > -+ pZip, MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG, > -+ MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE, &cur_file_ofs)) > -+ return mz_zip_set_error(pZip, MZ_ZIP_FAILED_FINDING_CENTRAL_DIR); > -+ > -+ /* Read and verify the end of central directory record. */ > - if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pBuf, > - MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) != > - MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) > -- return MZ_FALSE; > -- if ((MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_SIG_OFS) != > -- MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG) || > -- ((pZip->m_total_files = > -- MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_CDIR_TOTAL_ENTRIES_OFS)) != > -- MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS))) > -- return MZ_FALSE; > -+ return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); > -+ > -+ if (MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_SIG_OFS) != > -+ MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG) > -+ return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE); > -+ > -+ if (cur_file_ofs >= (MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE + > -+ MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE)) { > -+ if (pZip->m_pRead(pZip->m_pIO_opaque, > -+ cur_file_ofs - MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE, > -+ pZip64_locator, > -+ MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE) == > -+ MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE) { > -+ if (MZ_READ_LE32(pZip64_locator + MZ_ZIP64_ECDL_SIG_OFS) == > -+ MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIG) { > -+ zip64_end_of_central_dir_ofs = MZ_READ_LE64( > -+ pZip64_locator + MZ_ZIP64_ECDL_REL_OFS_TO_ZIP64_ECDR_OFS); > -+ if (zip64_end_of_central_dir_ofs > > -+ (pZip->m_archive_size - MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE)) > -+ return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE); > -+ > -+ if (pZip->m_pRead(pZip->m_pIO_opaque, zip64_end_of_central_dir_ofs, > -+ pZip64_end_of_central_dir, > -+ MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE) == > -+ MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE) { > -+ if (MZ_READ_LE32(pZip64_end_of_central_dir + MZ_ZIP64_ECDH_SIG_OFS) == > -+ MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIG) { > -+ pZip->m_pState->m_zip64 = MZ_TRUE; > -+ } > -+ } > -+ } > -+ } > -+ } > - > -+ pZip->m_total_files = MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_CDIR_TOTAL_ENTRIES_OFS); > -+ cdir_entries_on_this_disk = > -+ MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS); > - num_this_disk = MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_NUM_THIS_DISK_OFS); > - cdir_disk_index = MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_NUM_DISK_CDIR_OFS); > -+ cdir_size = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_SIZE_OFS); > -+ cdir_ofs = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_OFS_OFS); > -+ > -+ if (pZip->m_pState->m_zip64) { > -+ mz_uint32 zip64_total_num_of_disks = > -+ MZ_READ_LE32(pZip64_locator + MZ_ZIP64_ECDL_TOTAL_NUMBER_OF_DISKS_OFS); > -+ mz_uint64 zip64_cdir_total_entries = MZ_READ_LE64( > -+ pZip64_end_of_central_dir + MZ_ZIP64_ECDH_CDIR_TOTAL_ENTRIES_OFS); > -+ mz_uint64 zip64_cdir_total_entries_on_this_disk = MZ_READ_LE64( > -+ pZip64_end_of_central_dir + MZ_ZIP64_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS); > -+ mz_uint64 zip64_size_of_end_of_central_dir_record = MZ_READ_LE64( > -+ pZip64_end_of_central_dir + MZ_ZIP64_ECDH_SIZE_OF_RECORD_OFS); > -+ mz_uint64 zip64_size_of_central_directory = > -+ MZ_READ_LE64(pZip64_end_of_central_dir + MZ_ZIP64_ECDH_CDIR_SIZE_OFS); > -+ > -+ if (zip64_size_of_end_of_central_dir_record < > -+ (MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE - 12)) > -+ return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); > -+ > -+ if (zip64_total_num_of_disks != 1U) > -+ return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK); > -+ > -+ /* Check for miniz's practical limits */ > -+ if (zip64_cdir_total_entries > MZ_UINT32_MAX) > -+ return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); > -+ > -+ pZip->m_total_files = (mz_uint32)zip64_cdir_total_entries; > -+ > -+ if (zip64_cdir_total_entries_on_this_disk > MZ_UINT32_MAX) > -+ return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); > -+ > -+ cdir_entries_on_this_disk = > -+ (mz_uint32)zip64_cdir_total_entries_on_this_disk; > -+ > -+ /* Check for miniz's current practical limits (sorry, this should be enough > -+ * for millions of files) */ > -+ if (zip64_size_of_central_directory > MZ_UINT32_MAX) > -+ return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_CDIR_SIZE); > -+ > -+ cdir_size = (mz_uint32)zip64_size_of_central_directory; > -+ > -+ num_this_disk = MZ_READ_LE32(pZip64_end_of_central_dir + > -+ MZ_ZIP64_ECDH_NUM_THIS_DISK_OFS); > -+ > -+ cdir_disk_index = MZ_READ_LE32(pZip64_end_of_central_dir + > -+ MZ_ZIP64_ECDH_NUM_DISK_CDIR_OFS); > -+ > -+ cdir_ofs = > -+ MZ_READ_LE64(pZip64_end_of_central_dir + MZ_ZIP64_ECDH_CDIR_OFS_OFS); > -+ } > -+ > -+ if (pZip->m_total_files != cdir_entries_on_this_disk) > -+ return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK); > -+ > - if (((num_this_disk | cdir_disk_index) != 0) && > - ((num_this_disk != 1) || (cdir_disk_index != 1))) > -- return MZ_FALSE; > -+ return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK); > - > -- if ((cdir_size = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_SIZE_OFS)) < > -- pZip->m_total_files * MZ_ZIP_CENTRAL_DIR_HEADER_SIZE) > -- return MZ_FALSE; > -+ if (cdir_size < pZip->m_total_files * MZ_ZIP_CENTRAL_DIR_HEADER_SIZE) > -+ return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); > - > -- cdir_ofs = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_OFS_OFS); > - if ((cdir_ofs + (mz_uint64)cdir_size) > pZip->m_archive_size) > -- return MZ_FALSE; > -+ return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); > - > - pZip->m_central_directory_file_ofs = cdir_ofs; > - > - if (pZip->m_total_files) { > - mz_uint i, n; > -- > -- // Read the entire central directory into a heap block, and allocate another > -- // heap block to hold the unsorted central dir file record offsets, and > -- // another to hold the sorted indices. > -+ /* Read the entire central directory into a heap block, and allocate another > -+ * heap block to hold the unsorted central dir file record offsets, and > -+ * possibly another to hold the sorted indices. */ > - if ((!mz_zip_array_resize(pZip, &pZip->m_pState->m_central_dir, cdir_size, > - MZ_FALSE)) || > - (!mz_zip_array_resize(pZip, &pZip->m_pState->m_central_dir_offsets, > - pZip->m_total_files, MZ_FALSE))) > -- return MZ_FALSE; > -+ return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); > - > - if (sort_central_dir) { > - if (!mz_zip_array_resize(pZip, > - &pZip->m_pState->m_sorted_central_dir_offsets, > - pZip->m_total_files, MZ_FALSE)) > -- return MZ_FALSE; > -+ return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); > - } > - > - if (pZip->m_pRead(pZip->m_pIO_opaque, cdir_ofs, > - pZip->m_pState->m_central_dir.m_p, > - cdir_size) != cdir_size) > -- return MZ_FALSE; > -+ return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); > - > -- // Now create an index into the central directory file records, do some > -- // basic sanity checking on each record, and check for zip64 entries (which > -- // are not yet supported). > -+ /* Now create an index into the central directory file records, do some > -+ * basic sanity checking on each record */ > - p = (const mz_uint8 *)pZip->m_pState->m_central_dir.m_p; > - for (n = cdir_size, i = 0; i < pZip->m_total_files; ++i) { > -- mz_uint total_header_size, comp_size, decomp_size, disk_index; > -+ mz_uint total_header_size, disk_index, bit_flags, filename_size, > -+ ext_data_size; > -+ mz_uint64 comp_size, decomp_size, local_header_ofs; > -+ > - if ((n < MZ_ZIP_CENTRAL_DIR_HEADER_SIZE) || > - (MZ_READ_LE32(p) != MZ_ZIP_CENTRAL_DIR_HEADER_SIG)) > -- return MZ_FALSE; > -+ return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); > -+ > - MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir_offsets, mz_uint32, > - i) = > - (mz_uint32)(p - (const mz_uint8 *)pZip->m_pState->m_central_dir.m_p); > -+ > - if (sort_central_dir) > - MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_sorted_central_dir_offsets, > - mz_uint32, i) = i; > -+ > - comp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS); > - decomp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS); > -- if (((!MZ_READ_LE32(p + MZ_ZIP_CDH_METHOD_OFS)) && > -- (decomp_size != comp_size)) || > -- (decomp_size && !comp_size) || (decomp_size == 0xFFFFFFFF) || > -- (comp_size == 0xFFFFFFFF)) > -- return MZ_FALSE; > -+ local_header_ofs = MZ_READ_LE32(p + MZ_ZIP_CDH_LOCAL_HEADER_OFS); > -+ filename_size = MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS); > -+ ext_data_size = MZ_READ_LE16(p + MZ_ZIP_CDH_EXTRA_LEN_OFS); > -+ > -+ if ((!pZip->m_pState->m_zip64_has_extended_info_fields) && > -+ (ext_data_size) && > -+ (MZ_MAX(MZ_MAX(comp_size, decomp_size), local_header_ofs) == > -+ MZ_UINT32_MAX)) { > -+ /* Attempt to find zip64 extended information field in the entry's extra > -+ * data */ > -+ mz_uint32 extra_size_remaining = ext_data_size; > -+ > -+ if (extra_size_remaining) { > -+ const mz_uint8 *pExtra_data; > -+ void *buf = NULL; > -+ > -+ if (MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + filename_size + ext_data_size > > -+ n) { > -+ buf = MZ_MALLOC(ext_data_size); > -+ if (buf == NULL) > -+ return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); > -+ > -+ if (pZip->m_pRead(pZip->m_pIO_opaque, > -+ cdir_ofs + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + > -+ filename_size, > -+ buf, ext_data_size) != ext_data_size) { > -+ MZ_FREE(buf); > -+ return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); > -+ } > -+ > -+ pExtra_data = (mz_uint8 *)buf; > -+ } else { > -+ pExtra_data = p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + filename_size; > -+ } > -+ > -+ do { > -+ mz_uint32 field_id; > -+ mz_uint32 field_data_size; > -+ > -+ if (extra_size_remaining < (sizeof(mz_uint16) * 2)) { > -+ MZ_FREE(buf); > -+ return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); > -+ } > -+ > -+ field_id = MZ_READ_LE16(pExtra_data); > -+ field_data_size = MZ_READ_LE16(pExtra_data + sizeof(mz_uint16)); > -+ > -+ if ((field_data_size + sizeof(mz_uint16) * 2) > > -+ extra_size_remaining) { > -+ MZ_FREE(buf); > -+ return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); > -+ } > -+ > -+ if (field_id == MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID) { > -+ /* Ok, the archive didn't have any zip64 headers but it uses a > -+ * zip64 extended information field so mark it as zip64 anyway > -+ * (this can occur with infozip's zip util when it reads > -+ * compresses files from stdin). */ > -+ pZip->m_pState->m_zip64 = MZ_TRUE; > -+ pZip->m_pState->m_zip64_has_extended_info_fields = MZ_TRUE; > -+ break; > -+ } > -+ > -+ pExtra_data += sizeof(mz_uint16) * 2 + field_data_size; > -+ extra_size_remaining = > -+ extra_size_remaining - sizeof(mz_uint16) * 2 - field_data_size; > -+ } while (extra_size_remaining); > -+ > -+ MZ_FREE(buf); > -+ } > -+ } > -+ > -+ /* I've seen archives that aren't marked as zip64 that uses zip64 ext > -+ * data, argh */ > -+ if ((comp_size != MZ_UINT32_MAX) && (decomp_size != MZ_UINT32_MAX)) { > -+ if (((!MZ_READ_LE32(p + MZ_ZIP_CDH_METHOD_OFS)) && > -+ (decomp_size != comp_size)) || > -+ (decomp_size && !comp_size)) > -+ return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); > -+ } > -+ > - disk_index = MZ_READ_LE16(p + MZ_ZIP_CDH_DISK_START_OFS); > -- if ((disk_index != num_this_disk) && (disk_index != 1)) > -- return MZ_FALSE; > -- if (((mz_uint64)MZ_READ_LE32(p + MZ_ZIP_CDH_LOCAL_HEADER_OFS) + > -- MZ_ZIP_LOCAL_DIR_HEADER_SIZE + comp_size) > pZip->m_archive_size) > -- return MZ_FALSE; > -+ if ((disk_index == MZ_UINT16_MAX) || > -+ ((disk_index != num_this_disk) && (disk_index != 1))) > -+ return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK); > -+ > -+ if (comp_size != MZ_UINT32_MAX) { > -+ if (((mz_uint64)MZ_READ_LE32(p + MZ_ZIP_CDH_LOCAL_HEADER_OFS) + > -+ MZ_ZIP_LOCAL_DIR_HEADER_SIZE + comp_size) > pZip->m_archive_size) > -+ return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); > -+ } > -+ > -+ bit_flags = MZ_READ_LE16(p + MZ_ZIP_CDH_BIT_FLAG_OFS); > -+ if (bit_flags & MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_LOCAL_DIR_IS_MASKED) > -+ return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_ENCRYPTION); > -+ > - if ((total_header_size = MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + > - MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS) + > - MZ_READ_LE16(p + MZ_ZIP_CDH_EXTRA_LEN_OFS) + > - MZ_READ_LE16(p + MZ_ZIP_CDH_COMMENT_LEN_OFS)) > > - n) > -- return MZ_FALSE; > -+ return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); > -+ > - n -= total_header_size; > - p += total_header_size; > - } > -diff --git a/contrib/zip/src/zip.c b/contrib/zip/src/zip.c > -index ff3a8fe1..1abcfd8f 100644 > ---- a/contrib/zip/src/zip.c > -+++ b/contrib/zip/src/zip.c > -@@ -24,7 +24,6 @@ > - ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) && \ > - (P)[1] == ':') > - #define FILESYSTEM_PREFIX_LEN(P) (HAS_DEVICE(P) ? 2 : 0) > --#define ISSLASH(C) ((C) == '/' || (C) == '\\') > - > - #else > - > -@@ -48,7 +47,7 @@ int symlink(const char *target, const char *linkpath); // needed on Linux > - #endif > - > - #ifndef ISSLASH > --#define ISSLASH(C) ((C) == '/') > -+#define ISSLASH(C) ((C) == '/' || (C) == '\\') > - #endif > - > - #define CLEANUP(ptr) \ > -@@ -78,26 +77,34 @@ static const char *base_name(const char *name) { > - return base; > - } > - > --static int mkpath(const char *path) { > -- char const *p; > -+static int mkpath(char *path) { > -+ char *p; > - char npath[MAX_PATH + 1]; > - int len = 0; > - int has_device = HAS_DEVICE(path); > - > - memset(npath, 0, MAX_PATH + 1); > -- > --#ifdef _WIN32 > -- // only on windows fix the path > -- npath[0] = path[0]; > -- npath[1] = path[1]; > -- len = 2; > --#endif // _WIN32 > -- > -+ if (has_device) { > -+ // only on windows > -+ npath[0] = path[0]; > -+ npath[1] = path[1]; > -+ len = 2; > -+ } > - for (p = path + len; *p && len < MAX_PATH; p++) { > - if (ISSLASH(*p) && ((!has_device && len > 0) || (has_device && len > 2))) { > -- if (MKDIR(npath) == -1) > -- if (errno != EEXIST) > -+#if defined(_WIN32) || defined(__WIN32__) || defined(_MSC_VER) || \ > -+ defined(__MINGW32__) > -+#else > -+ if ('\\' == *p) { > -+ *p = '/'; > -+ } > -+#endif > -+ > -+ if (MKDIR(npath) == -1) { > -+ if (errno != EEXIST) { > - return -1; > -+ } > -+ } > - } > - npath[len++] = *p; > - } > -@@ -279,7 +286,14 @@ int zip_entry_open(struct zip_t *zip, const char *entryname) { > - zip->entry.header_offset = zip->archive.m_archive_size; > - memset(zip->entry.header, 0, MZ_ZIP_LOCAL_DIR_HEADER_SIZE * sizeof(mz_uint8)); > - zip->entry.method = 0; > -+ > -+ // UNIX or APPLE > -+#if MZ_PLATFORM == 3 || MZ_PLATFORM == 19 > -+ // regular file with rw-r--r-- persmissions > -+ zip->entry.external_attr = (mz_uint32)(0100644) << 16; > -+#else > - zip->entry.external_attr = 0; > -+#endif > - > - num_alignment_padding_bytes = > - mz_zip_writer_compute_padding_needed_for_file_alignment(pzip); > -@@ -660,7 +674,7 @@ ssize_t zip_entry_noallocread(struct zip_t *zip, void *buf, size_t bufsize) { > - } > - > - if (!mz_zip_reader_extract_to_mem_no_alloc(pzip, (mz_uint)zip->entry.index, > -- buf, bufsize, 0, NULL, 0)) { > -+ buf, bufsize, 0, NULL, 0)) { > - return -1; > - } > - > -@@ -670,10 +684,7 @@ ssize_t zip_entry_noallocread(struct zip_t *zip, void *buf, size_t bufsize) { > - int zip_entry_fread(struct zip_t *zip, const char *filename) { > - mz_zip_archive *pzip = NULL; > - mz_uint idx; > --#if defined(_MSC_VER) > --#else > - mz_uint32 xattr = 0; > --#endif > - mz_zip_archive_file_stat info; > - > - if (!zip) { > -@@ -875,12 +886,19 @@ int zip_extract(const char *zipname, const char *dir, > - goto out; > - } > - > -- if ((((info.m_version_made_by >> 8) == 3) || ((info.m_version_made_by >> 8) == 19)) // if zip is produced on Unix or macOS (3 and 19 from section 4.4.2.2 of zip standard) > -- && info.m_external_attr & (0x20 << 24)) { // and has sym link attribute (0x80 is file, 0x40 is directory) > -+ if ((((info.m_version_made_by >> 8) == 3) || > -+ ((info.m_version_made_by >> 8) == > -+ 19)) // if zip is produced on Unix or macOS (3 and 19 from > -+ // section 4.4.2.2 of zip standard) > -+ && info.m_external_attr & > -+ (0x20 << 24)) { // and has sym link attribute (0x80 is file, 0x40 > -+ // is directory) > - #if defined(_WIN32) || defined(__WIN32__) || defined(_MSC_VER) || \ > - defined(__MINGW32__) > --#else > -- if (info.m_uncomp_size > MAX_PATH || !mz_zip_reader_extract_to_mem_no_alloc(&zip_archive, i, symlink_to, MAX_PATH, 0, NULL, 0)) { > -+#else > -+ if (info.m_uncomp_size > MAX_PATH || > -+ !mz_zip_reader_extract_to_mem_no_alloc(&zip_archive, i, symlink_to, > -+ MAX_PATH, 0, NULL, 0)) { > - goto out; > - } > - symlink_to[info.m_uncomp_size] = '\0'; > -diff --git a/contrib/zip/src/zip.h b/contrib/zip/src/zip.h > -index 5f39df50..a48d64d6 100644 > ---- a/contrib/zip/src/zip.h > -+++ b/contrib/zip/src/zip.h > -@@ -20,241 +20,240 @@ extern "C" { > - #endif > - > - #if !defined(_SSIZE_T_DEFINED) && !defined(_SSIZE_T_DEFINED_) && \ > -- !defined(_SSIZE_T) && !defined(_SSIZE_T_) && !defined(__ssize_t_defined) > --#define _SSIZE_T > -+ !defined(__DEFINED_ssize_t) && !defined(__ssize_t_defined) && \ > -+ !defined(_SSIZE_T) && !defined(_SSIZE_T_) > -+ > - // 64-bit Windows is the only mainstream platform > - // where sizeof(long) != sizeof(void*) > - #ifdef _WIN64 > --typedef long long ssize_t; /* byte count or error */ > -+typedef long long ssize_t; /* byte count or error */ > - #else > --typedef long ssize_t; /* byte count or error */ > -+typedef long ssize_t; /* byte count or error */ > - #endif > -+ > -+#define _SSIZE_T_DEFINED > -+#define _SSIZE_T_DEFINED_ > -+#define __DEFINED_ssize_t > -+#define __ssize_t_defined > -+#define _SSIZE_T > -+#define _SSIZE_T_ > -+ > - #endif > - > - #ifndef MAX_PATH > - #define MAX_PATH 32767 /* # chars in a path name including NULL */ > - #endif > - > -+/** > -+ * @mainpage > -+ * > -+ * Documenation for @ref zip. > -+ */ > -+ > -+/** > -+ * @addtogroup zip > -+ * @{ > -+ */ > -+ > -+/** > -+ * Default zip compression level. > -+ */ > -+ > - #define ZIP_DEFAULT_COMPRESSION_LEVEL 6 > - > --/* > -- This data structure is used throughout the library to represent zip archive > -- - forward declaration. > --*/ > -+/** > -+ * @struct zip_t > -+ * > -+ * This data structure is used throughout the library to represent zip archive - > -+ * forward declaration. > -+ */ > - struct zip_t; > - > --/* > -- Opens zip archive with compression level using the given mode. > -- > -- Args: > -- zipname: zip archive file name. > -- level: compression level (0-9 are the standard zlib-style levels). > -- mode: file access mode. > -- 'r': opens a file for reading/extracting (the file must exists). > -- 'w': creates an empty file for writing. > -- 'a': appends to an existing archive. > -- > -- Returns: > -- The zip archive handler or NULL on error > --*/ > -+/** > -+ * Opens zip archive with compression level using the given mode. > -+ * > -+ * @param zipname zip archive file name. > -+ * @param level compression level (0-9 are the standard zlib-style levels). > -+ * @param mode file access mode. > -+ * - 'r': opens a file for reading/extracting (the file must exists). > -+ * - 'w': creates an empty file for writing. > -+ * - 'a': appends to an existing archive. > -+ * > -+ * @return the zip archive handler or NULL on error > -+ */ > - extern struct zip_t *zip_open(const char *zipname, int level, char mode); > - > --/* > -- Closes the zip archive, releases resources - always finalize. > -- > -- Args: > -- zip: zip archive handler. > --*/ > -+/** > -+ * Closes the zip archive, releases resources - always finalize. > -+ * > -+ * @param zip zip archive handler. > -+ */ > - extern void zip_close(struct zip_t *zip); > - > --/* > -- Opens an entry by name in the zip archive. > -- For zip archive opened in 'w' or 'a' mode the function will append > -- a new entry. In readonly mode the function tries to locate the entry > -- in global dictionary. > -- > -- Args: > -- zip: zip archive handler. > -- entryname: an entry name in local dictionary. > -- > -- Returns: > -- The return code - 0 on success, negative number (< 0) on error. > --*/ > -+/** > -+ * Opens an entry by name in the zip archive. > -+ * > -+ * For zip archive opened in 'w' or 'a' mode the function will append > -+ * a new entry. In readonly mode the function tries to locate the entry > -+ * in global dictionary. > -+ * > -+ * @param zip zip archive handler. > -+ * @param entryname an entry name in local dictionary. > -+ * > -+ * @return the return code - 0 on success, negative number (< 0) on error. > -+ */ > - extern int zip_entry_open(struct zip_t *zip, const char *entryname); > - > --/* > -- Opens a new entry by index in the zip archive. > -- This function is only valid if zip archive was opened in 'r' (readonly) mode. > -- > -- Args: > -- zip: zip archive handler. > -- index: index in local dictionary. > -- > -- Returns: > -- The return code - 0 on success, negative number (< 0) on error. > --*/ > -+/** > -+ * Opens a new entry by index in the zip archive. > -+ * > -+ * This function is only valid if zip archive was opened in 'r' (readonly) mode. > -+ * > -+ * @param zip zip archive handler. > -+ * @param index index in local dictionary. > -+ * > -+ * @return the return code - 0 on success, negative number (< 0) on error. > -+ */ > - extern int zip_entry_openbyindex(struct zip_t *zip, int index); > - > --/* > -- Closes a zip entry, flushes buffer and releases resources. > -- > -- Args: > -- zip: zip archive handler. > -- > -- Returns: > -- The return code - 0 on success, negative number (< 0) on error. > --*/ > -+/** > -+ * Closes a zip entry, flushes buffer and releases resources. > -+ * > -+ * @param zip zip archive handler. > -+ * > -+ * @return the return code - 0 on success, negative number (< 0) on error. > -+ */ > - extern int zip_entry_close(struct zip_t *zip); > - > --/* > -- Returns a local name of the current zip entry. > -- The main difference between user's entry name and local entry name > -- is optional relative path. > -- Following .ZIP File Format Specification - the path stored MUST not contain > -- a drive or device letter, or a leading slash. > -- All slashes MUST be forward slashes '/' as opposed to backwards slashes '\' > -- for compatibility with Amiga and UNIX file systems etc. > -- > -- Args: > -- zip: zip archive handler. > -- > -- Returns: > -- The pointer to the current zip entry name, or NULL on error. > --*/ > -+/** > -+ * Returns a local name of the current zip entry. > -+ * > -+ * The main difference between user's entry name and local entry name > -+ * is optional relative path. > -+ * Following .ZIP File Format Specification - the path stored MUST not contain > -+ * a drive or device letter, or a leading slash. > -+ * All slashes MUST be forward slashes '/' as opposed to backwards slashes '\' > -+ * for compatibility with Amiga and UNIX file systems etc. > -+ * > -+ * @param zip: zip archive handler. > -+ * > -+ * @return the pointer to the current zip entry name, or NULL on error. > -+ */ > - extern const char *zip_entry_name(struct zip_t *zip); > - > --/* > -- Returns an index of the current zip entry. > -- > -- Args: > -- zip: zip archive handler. > -- > -- Returns: > -- The index on success, negative number (< 0) on error. > --*/ > -+/** > -+ * Returns an index of the current zip entry. > -+ * > -+ * @param zip zip archive handler. > -+ * > -+ * @return the index on success, negative number (< 0) on error. > -+ */ > - extern int zip_entry_index(struct zip_t *zip); > - > --/* > -- Determines if the current zip entry is a directory entry. > -- > -- Args: > -- zip: zip archive handler. > -- > -- Returns: > -- The return code - 1 (true), 0 (false), negative number (< 0) on error. > --*/ > -+/** > -+ * Determines if the current zip entry is a directory entry. > -+ * > -+ * @param zip zip archive handler. > -+ * > -+ * @return the return code - 1 (true), 0 (false), negative number (< 0) on > -+ * error. > -+ */ > - extern int zip_entry_isdir(struct zip_t *zip); > - > --/* > -- Returns an uncompressed size of the current zip entry. > -- > -- Args: > -- zip: zip archive handler. > -- > -- Returns: > -- The uncompressed size in bytes. > --*/ > -+/** > -+ * Returns an uncompressed size of the current zip entry. > -+ * > -+ * @param zip zip archive handler. > -+ * > -+ * @return the uncompressed size in bytes. > -+ */ > - extern unsigned long long zip_entry_size(struct zip_t *zip); > - > --/* > -- Returns CRC-32 checksum of the current zip entry. > -- > -- Args: > -- zip: zip archive handler. > -- > -- Returns: > -- The CRC-32 checksum. > --*/ > -+/** > -+ * Returns CRC-32 checksum of the current zip entry. > -+ * > -+ * @param zip zip archive handler. > -+ * > -+ * @return the CRC-32 checksum. > -+ */ > - extern unsigned int zip_entry_crc32(struct zip_t *zip); > - > --/* > -- Compresses an input buffer for the current zip entry. > -- > -- Args: > -- zip: zip archive handler. > -- buf: input buffer. > -- bufsize: input buffer size (in bytes). > -- > -- Returns: > -- The return code - 0 on success, negative number (< 0) on error. > --*/ > -+/** > -+ * Compresses an input buffer for the current zip entry. > -+ * > -+ * @param zip zip archive handler. > -+ * @param buf input buffer. > -+ * @param bufsize input buffer size (in bytes). > -+ * > -+ * @return the return code - 0 on success, negative number (< 0) on error. > -+ */ > - extern int zip_entry_write(struct zip_t *zip, const void *buf, size_t bufsize); > - > --/* > -- Compresses a file for the current zip entry. > -- > -- Args: > -- zip: zip archive handler. > -- filename: input file. > -- > -- Returns: > -- The return code - 0 on success, negative number (< 0) on error. > --*/ > -+/** > -+ * Compresses a file for the current zip entry. > -+ * > -+ * @param zip zip archive handler. > -+ * @param filename input file. > -+ * > -+ * @return the return code - 0 on success, negative number (< 0) on error. > -+ */ > - extern int zip_entry_fwrite(struct zip_t *zip, const char *filename); > - > --/* > -- Extracts the current zip entry into output buffer. > -- The function allocates sufficient memory for a output buffer. > -- > -- Args: > -- zip: zip archive handler. > -- buf: output buffer. > -- bufsize: output buffer size (in bytes). > -- > -- Note: > -- - remember to release memory allocated for a output buffer. > -- - for large entries, please take a look at zip_entry_extract function. > -- > -- Returns: > -- The return code - the number of bytes actually read on success. > -- Otherwise a -1 on error. > --*/ > -+/** > -+ * Extracts the current zip entry into output buffer. > -+ * > -+ * The function allocates sufficient memory for a output buffer. > -+ * > -+ * @param zip zip archive handler. > -+ * @param buf output buffer. > -+ * @param bufsize output buffer size (in bytes). > -+ * > -+ * @note remember to release memory allocated for a output buffer. > -+ * for large entries, please take a look at zip_entry_extract function. > -+ * > -+ * @return the return code - the number of bytes actually read on success. > -+ * Otherwise a -1 on error. > -+ */ > - extern ssize_t zip_entry_read(struct zip_t *zip, void **buf, size_t *bufsize); > - > --/* > -- Extracts the current zip entry into a memory buffer using no memory > -- allocation. > -- > -- Args: > -- zip: zip archive handler. > -- buf: preallocated output buffer. > -- bufsize: output buffer size (in bytes). > -- > -- Note: > -- - ensure supplied output buffer is large enough. > -- - zip_entry_size function (returns uncompressed size for the current entry) > -- can be handy to estimate how big buffer is needed. > -- - for large entries, please take a look at zip_entry_extract function. > -- > -- Returns: > -- The return code - the number of bytes actually read on success. > -- Otherwise a -1 on error (e.g. bufsize is not large enough). > --*/ > --extern ssize_t zip_entry_noallocread(struct zip_t *zip, void *buf, size_t bufsize); > -- > --/* > -- Extracts the current zip entry into output file. > -- > -- Args: > -- zip: zip archive handler. > -- filename: output file. > -- > -- Returns: > -- The return code - 0 on success, negative number (< 0) on error. > --*/ > -+/** > -+ * Extracts the current zip entry into a memory buffer using no memory > -+ * allocation. > -+ * > -+ * @param zip zip archive handler. > -+ * @param buf preallocated output buffer. > -+ * @param bufsize output buffer size (in bytes). > -+ * > -+ * @note ensure supplied output buffer is large enough. > -+ * zip_entry_size function (returns uncompressed size for the current > -+ * entry) can be handy to estimate how big buffer is needed. for large > -+ * entries, please take a look at zip_entry_extract function. > -+ * > -+ * @return the return code - the number of bytes actually read on success. > -+ * Otherwise a -1 on error (e.g. bufsize is not large enough). > -+ */ > -+extern ssize_t zip_entry_noallocread(struct zip_t *zip, void *buf, > -+ size_t bufsize); > -+ > -+/** > -+ * Extracts the current zip entry into output file. > -+ * > -+ * @param zip zip archive handler. > -+ * @param filename output file. > -+ * > -+ * @return the return code - 0 on success, negative number (< 0) on error. > -+ */ > - extern int zip_entry_fread(struct zip_t *zip, const char *filename); > - > --/* > -- Extracts the current zip entry using a callback function (on_extract). > -- > -- Args: > -- zip: zip archive handler. > -- on_extract: callback function. > -- arg: opaque pointer (optional argument, > -- which you can pass to the on_extract callback) > -- > -- Returns: > -- The return code - 0 on success, negative number (< 0) on error. > -+/** > -+ * Extracts the current zip entry using a callback function (on_extract). > -+ * > -+ * @param zip zip archive handler. > -+ * @param on_extract callback function. > -+ * @param arg opaque pointer (optional argument, which you can pass to the > -+ * on_extract callback) > -+ * > -+ * @return the return code - 0 on success, negative number (< 0) on error. > - */ > - extern int > - zip_entry_extract(struct zip_t *zip, > -@@ -262,53 +261,49 @@ zip_entry_extract(struct zip_t *zip, > - const void *data, size_t size), > - void *arg); > - > --/* > -- Returns the number of all entries (files and directories) in the zip archive. > -- > -- Args: > -- zip: zip archive handler. > -- > -- Returns: > -- The return code - the number of entries on success, > -- negative number (< 0) on error. > --*/ > -+/** > -+ * Returns the number of all entries (files and directories) in the zip archive. > -+ * > -+ * @param zip zip archive handler. > -+ * > -+ * @return the return code - the number of entries on success, negative number > -+ * (< 0) on error. > -+ */ > - extern int zip_total_entries(struct zip_t *zip); > - > --/* > -- Creates a new archive and puts files into a single zip archive. > -- > -- Args: > -- zipname: zip archive file. > -- filenames: input files. > -- len: number of input files. > -- > -- Returns: > -- The return code - 0 on success, negative number (< 0) on error. > --*/ > -+/** > -+ * Creates a new archive and puts files into a single zip archive. > -+ * > -+ * @param zipname zip archive file. > -+ * @param filenames input files. > -+ * @param len: number of input files. > -+ * > -+ * @return the return code - 0 on success, negative number (< 0) on error. > -+ */ > - extern int zip_create(const char *zipname, const char *filenames[], size_t len); > - > --/* > -- Extracts a zip archive file into directory. > -- > -- If on_extract_entry is not NULL, the callback will be called after > -- successfully extracted each zip entry. > -- Returning a negative value from the callback will cause abort and return an > -- error. The last argument (void *arg) is optional, which you can use to pass > -- data to the on_extract_entry callback. > -- > -- Args: > -- zipname: zip archive file. > -- dir: output directory. > -- on_extract_entry: on extract callback. > -- arg: opaque pointer. > -- > -- Returns: > -- The return code - 0 on success, negative number (< 0) on error. > --*/ > -+/** > -+ * Extracts a zip archive file into directory. > -+ * > -+ * If on_extract_entry is not NULL, the callback will be called after > -+ * successfully extracted each zip entry. > -+ * Returning a negative value from the callback will cause abort and return an > -+ * error. The last argument (void *arg) is optional, which you can use to pass > -+ * data to the on_extract_entry callback. > -+ * > -+ * @param zipname zip archive file. > -+ * @param dir output directory. > -+ * @param on_extract_entry on extract callback. > -+ * @param arg opaque pointer. > -+ * > -+ * @return the return code - 0 on success, negative number (< 0) on error. > -+ */ > - extern int zip_extract(const char *zipname, const char *dir, > - int (*on_extract_entry)(const char *filename, void *arg), > - void *arg); > - > -+/** @} */ > -+ > - #ifdef __cplusplus > - } > - #endif > -diff --git a/contrib/zip/test/CMakeLists.txt b/contrib/zip/test/CMakeLists.txt > -index 9b2a8db1..cc060b00 100644 > ---- a/contrib/zip/test/CMakeLists.txt > -+++ b/contrib/zip/test/CMakeLists.txt > -@@ -1,19 +1,16 @@ > - cmake_minimum_required(VERSION 2.8) > - > --if ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "AppleClang") > -- if(ENABLE_COVERAGE) > -- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g ") > -- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0") > -- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs") > -- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ftest-coverage") > -- set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage") > -- endif() > --endif () > -- > - # test > --include_directories(../src) > --add_executable(test.exe test.c ../src/zip.c) > --add_executable(test_miniz.exe test_miniz.c) > -+set(test_out test.out) > -+set(test_miniz_out test_miniz.out) > -+ > -+add_executable(${test_out} test.c) > -+target_link_libraries(${test_out} zip) > -+add_executable(${test_miniz_out} test_miniz.c) > -+target_link_libraries(${test_miniz_out} zip) > -+ > -+add_test(NAME ${test_out} COMMAND ${test_out}) > -+add_test(NAME ${test_miniz_out} COMMAND ${test_miniz_out}) > - > --add_test(NAME test COMMAND test.exe) > --add_test(NAME test_miniz COMMAND test_miniz.exe) > -+set(test_out ${test_out} PARENT_SCOPE) > -+set(test_miniz_out ${test_miniz_out} PARENT_SCOPE) > -diff --git a/contrib/zip/test/test.c b/contrib/zip/test/test.c > -index 45443053..a9b2ddab 100644 > ---- a/contrib/zip/test/test.c > -+++ b/contrib/zip/test/test.c > -@@ -29,6 +29,8 @@ > - #define XFILE "7.txt\0" > - #define XMODE 0100777 > - > -+#define UNIXMODE 0100644 > -+ > - #define UNUSED(x) (void)x > - > - static int total_entries = 0; > -@@ -102,7 +104,8 @@ static void test_read(void) { > - assert(0 == zip_entry_close(zip)); > - free(buf); > - buf = NULL; > -- > -+ bufsize = 0; > -+ > - assert(0 == zip_entry_open(zip, "test/test-2.txt")); > - assert(strlen(TESTDATA2) == zip_entry_size(zip)); > - assert(CRC32DATA2 == zip_entry_crc32(zip)); > -@@ -131,7 +134,8 @@ static void test_read(void) { > - assert(0 == zip_entry_close(zip)); > - free(buf); > - buf = NULL; > -- > -+ bufsize = 0; > -+ > - buftmp = strlen(TESTDATA1); > - buf = calloc(buftmp, sizeof(char)); > - assert(0 == zip_entry_open(zip, "test/test-1.txt")); > -@@ -433,6 +437,35 @@ static void test_mtime(void) { > - remove(ZIPNAME); > - } > - > -+static void test_unix_permissions(void) { > -+#if defined(_WIN64) || defined(_WIN32) || defined(__WIN32__) > -+#else > -+ // UNIX or APPLE > -+ struct MZ_FILE_STAT_STRUCT file_stats; > -+ > -+ remove(ZIPNAME); > -+ > -+ struct zip_t *zip = zip_open(ZIPNAME, ZIP_DEFAULT_COMPRESSION_LEVEL, 'w'); > -+ assert(zip != NULL); > -+ > -+ assert(0 == zip_entry_open(zip, RFILE)); > -+ assert(0 == zip_entry_write(zip, TESTDATA1, strlen(TESTDATA1))); > -+ assert(0 == zip_entry_close(zip)); > -+ > -+ zip_close(zip); > -+ > -+ remove(RFILE); > -+ > -+ assert(0 == zip_extract(ZIPNAME, ".", NULL, NULL)); > -+ > -+ assert(0 == MZ_FILE_STAT(RFILE, &file_stats)); > -+ assert(UNIXMODE == file_stats.st_mode); > -+ > -+ remove(RFILE); > -+ remove(ZIPNAME); > -+#endif > -+} > -+ > - int main(int argc, char *argv[]) { > - UNUSED(argc); > - UNUSED(argv); > -@@ -453,6 +486,7 @@ int main(int argc, char *argv[]) { > - test_write_permissions(); > - test_exe_permissions(); > - test_mtime(); > -+ test_unix_permissions(); > - > - remove(ZIPNAME); > - return 0; > -diff --git a/contrib/zip/test/test_miniz.c b/contrib/zip/test/test_miniz.c > -index ebc0564d..babcaecd 100644 > ---- a/contrib/zip/test/test_miniz.c > -+++ b/contrib/zip/test/test_miniz.c > -@@ -23,16 +23,39 @@ int main(int argc, char *argv[]) { > - uint step = 0; > - int cmp_status; > - uLong src_len = (uLong)strlen(s_pStr); > -- uLong cmp_len = compressBound(src_len); > - uLong uncomp_len = src_len; > -+ uLong cmp_len; > - uint8 *pCmp, *pUncomp; > -+ size_t sz; > - uint total_succeeded = 0; > - (void)argc, (void)argv; > - > - printf("miniz.c version: %s\n", MZ_VERSION); > - > - do { > -+ pCmp = (uint8 *)tdefl_compress_mem_to_heap(s_pStr, src_len, &cmp_len, 0); > -+ if (!pCmp) { > -+ printf("tdefl_compress_mem_to_heap failed\n"); > -+ return EXIT_FAILURE; > -+ } > -+ if (src_len <= cmp_len) { > -+ printf("tdefl_compress_mem_to_heap failed: from %u to %u bytes\n", > -+ (mz_uint32)uncomp_len, (mz_uint32)cmp_len); > -+ free(pCmp); > -+ return EXIT_FAILURE; > -+ } > -+ > -+ sz = tdefl_compress_mem_to_mem(pCmp, cmp_len, s_pStr, src_len, 0); > -+ if (sz != cmp_len) { > -+ printf("tdefl_compress_mem_to_mem failed: expected %u, got %u\n", > -+ (mz_uint32)cmp_len, (mz_uint32)sz); > -+ free(pCmp); > -+ return EXIT_FAILURE; > -+ } > -+ > - // Allocate buffers to hold compressed and uncompressed data. > -+ free(pCmp); > -+ cmp_len = compressBound(src_len); > - pCmp = (mz_uint8 *)malloc((size_t)cmp_len); > - pUncomp = (mz_uint8 *)malloc((size_t)src_len); > - if ((!pCmp) || (!pUncomp)) { > diff --git a/meta/recipes-graphics/vulkan/assimp/use-GNUInstallDirs-where-possible.patch b/meta/recipes-graphics/vulkan/assimp/use-GNUInstallDirs-where-possible.patch > deleted file mode 100644 > index e4f5b9ccbd..0000000000 > --- a/meta/recipes-graphics/vulkan/assimp/use-GNUInstallDirs-where-possible.patch > +++ /dev/null > @@ -1,257 +0,0 @@ > -From cbf94fd62ff831879d10f99aa7766d391ae8a9b7 Mon Sep 17 00:00:00 2001 > -From: =?UTF-8?q?Victor=20Matar=C3=A9?= <matare@fh-aachen.de> > -Date: Tue, 31 Mar 2020 21:30:07 +0200 > -Subject: [PATCH] use GNUInstallDirs where possible > - > -Emulate the CMAKE_INSTALL_FULL_* variables on non-Unix systems and > -disable redefining FHS-mandated install locations via user-editable > -ASSIMP_*_INSTALL_DIR variables. Instead, if it REALLY proves necessary, > -Unix users can edit the advanced, canonical CMAKE_INSTALL_* variables. > ---- > - CMakeLists.txt | 36 ++++++++++++++++++++++------------ > - assimp.pc.in | 6 ++---- > - assimpTargets-debug.cmake.in | 20 +++++++++---------- > - assimpTargets-release.cmake.in | 18 ++++++++--------- > - assimpTargets.cmake.in | 15 +------------- > - 5 files changed, 45 insertions(+), 50 deletions(-) > - > -Upstream-Status: Backport > -Comment: Additionally remove setting of ASSIMP_LIBRARY_DIRS, ASSIMP_INCLUDE_DIRS > - and INTERFACE_INCLUDE_DIRECTORIES as default cross compile paths are enough > - and setting them manually adds non-existing paths to CMake modules > - > -Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com> > - > -diff --git a/CMakeLists.txt b/CMakeLists.txt > -index dcafb649f5..c23c0df33e 100644 > ---- a/CMakeLists.txt > -+++ b/CMakeLists.txt > -@@ -230,11 +230,6 @@ SET(LIBASSIMP-DEV_COMPONENT "libassimp${ASSIMP_VERSION_MAJOR}.${ASSIMP_VERSION_M > - SET(CPACK_COMPONENTS_ALL assimp-bin ${LIBASSIMP_COMPONENT} ${LIBASSIMP-DEV_COMPONENT} assimp-dev) > - SET(ASSIMP_LIBRARY_SUFFIX "" CACHE STRING "Suffix to append to library names") > - > --IF( UNIX ) > -- # Use GNUInstallDirs for Unix predefined directories > -- INCLUDE(GNUInstallDirs) > --ENDIF( UNIX ) > -- > - # Grouped compiler settings > - IF ((CMAKE_C_COMPILER_ID MATCHES "GNU") AND NOT CMAKE_COMPILER_IS_MINGW) > - IF(NOT HUNTER_ENABLED) > -@@ -329,14 +324,6 @@ IF ( CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR ) > - SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_HOME_DIRECTORY}/bin" ) > - ENDIF ( CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR ) > - > --# Cache these to allow the user to override them manually. > --SET( ASSIMP_LIB_INSTALL_DIR "lib" CACHE STRING > -- "Path the built library files are installed to." ) > --SET( ASSIMP_INCLUDE_INSTALL_DIR "include" CACHE STRING > -- "Path the header files are installed to." ) > --SET( ASSIMP_BIN_INSTALL_DIR "bin" CACHE STRING > -- "Path the tool executables are installed to." ) > -- > - get_cmake_property(is_multi_config GENERATOR_IS_MULTI_CONFIG) > - > - IF (INJECT_DEBUG_POSTFIX AND (is_multi_config OR CMAKE_BUILD_TYPE STREQUAL "Debug")) > -@@ -391,6 +378,29 @@ IF(HUNTER_ENABLED) > - ) > - ELSE(HUNTER_ENABLED) > - # cmake configuration files > -+ > -+ IF( UNIX ) > -+ # Use GNUInstallDirs for Unix predefined directories > -+ INCLUDE(GNUInstallDirs) > -+ > -+ SET( ASSIMP_LIB_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR}) > -+ SET( ASSIMP_INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR}) > -+ SET( ASSIMP_BIN_INSTALL_DIR ${CMAKE_INSTALL_BINDIR}) > -+ ELSE( UNIX ) > -+ # Cache these to allow the user to override them on non-Unix platforms > -+ SET( ASSIMP_LIB_INSTALL_DIR "lib" CACHE STRING > -+ "Path the built library files are installed to." ) > -+ SET( ASSIMP_INCLUDE_INSTALL_DIR "include" CACHE STRING > -+ "Path the header files are installed to." ) > -+ SET( ASSIMP_BIN_INSTALL_DIR "bin" CACHE STRING > -+ "Path the tool executables are installed to." ) > -+ > -+ SET(CMAKE_INSTALL_FULL_INCLUDEDIR ${CMAKE_INSTALL_PREFIX}/${ASSIMP_INCLUDE_INSTALL_DIR}) > -+ SET(CMAKE_INSTALL_FULL_LIBDIR ${CMAKE_INSTALL_PREFIX}/${ASSIMP_LIB_INSTALL_DIR}) > -+ SET(CMAKE_INSTALL_FULL_BINDIR ${CMAKE_INSTALL_PREFIX}/${ASSIMP_BIN_INSTALL_DIR}) > -+ ENDIF( UNIX ) > -+ > -+ > - CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/assimp-config.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/assimp-config.cmake" @ONLY IMMEDIATE) > - CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/assimpTargets.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/assimpTargets.cmake" @ONLY IMMEDIATE) > - IF (is_multi_config) > -diff --git a/assimp.pc.in b/assimp.pc.in > -index c659e19f2c..555a3a1d3b 100644 > ---- a/assimp.pc.in > -+++ b/assimp.pc.in > -@@ -1,7 +1,5 @@ > --prefix=@CMAKE_INSTALL_PREFIX@ > --exec_prefix=@CMAKE_INSTALL_PREFIX@/ > --libdir=@CMAKE_INSTALL_PREFIX@/@ASSIMP_LIB_INSTALL_DIR@ > --includedir=@CMAKE_INSTALL_PREFIX@/../include/@ASSIMP_INCLUDE_INSTALL_DIR@ > -+libdir=@CMAKE_INSTALL_FULL_LIBDIR@ > -+includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@ > - > - Name: @CMAKE_PROJECT_NAME@ > - Description: Import various well-known 3D model formats in an uniform manner. > -diff --git a/assimpTargets-debug.cmake.in b/assimpTargets-debug.cmake.in > -index 1ebe2a6081..f5034c9349 100644 > ---- a/assimpTargets-debug.cmake.in > -+++ b/assimpTargets-debug.cmake.in > -@@ -42,22 +42,22 @@ if(MSVC) > - # Import target "assimp::assimp" for configuration "Debug" > - set_property(TARGET assimp::assimp APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG) > - set_target_properties(assimp::assimp PROPERTIES > -- IMPORTED_IMPLIB_DEBUG "${_IMPORT_PREFIX}/lib/${importLibraryName}" > -- IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/bin/${sharedLibraryName}" > -+ IMPORTED_IMPLIB_DEBUG "@CMAKE_INSTALL_FULL_LIBDIR@/${importLibraryName}" > -+ IMPORTED_LOCATION_DEBUG "@CMAKE_INSTALL_FULL_BINDIR@/${sharedLibraryName}" > - ) > - list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp ) > -- list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/lib/${importLibraryName}") > -- list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/bin/${sharedLibraryName}" ) > -+ list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${importLibraryName}") > -+ list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_BINDIR@/${sharedLibraryName}" ) > - else() > - set(staticLibraryName "assimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_DEBUG_POSTFIX@@CMAKE_STATIC_LIBRARY_SUFFIX@") > - > - # Import target "assimp::assimp" for configuration "Debug" > - set_property(TARGET assimp::assimp APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG) > - set_target_properties(assimp::assimp PROPERTIES > -- IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/lib/${staticLibraryName}" > -+ IMPORTED_LOCATION_DEBUG "@CMAKE_INSTALL_FULL_LIBDIR@/${staticLibraryName}" > - ) > - list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp ) > -- list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/lib/${staticLibraryName}") > -+ list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${staticLibraryName}") > - endif() > - > - else() > -@@ -66,17 +66,17 @@ else() > - set(sharedLibraryName "libassimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_DEBUG_POSTFIX@@CMAKE_SHARED_LIBRARY_SUFFIX@.@ASSIMP_VERSION_MAJOR@") > - set_target_properties(assimp::assimp PROPERTIES > - IMPORTED_SONAME_DEBUG "${sharedLibraryName}" > -- IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/lib/${sharedLibraryName}" > -+ IMPORTED_LOCATION_DEBUG "@CMAKE_INSTALL_FULL_LIBDIR@/${sharedLibraryName}" > - ) > - list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp ) > -- list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/lib/${sharedLibraryName}" ) > -+ list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${sharedLibraryName}" ) > - else() > - set(staticLibraryName "libassimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_DEBUG_POSTFIX@@CMAKE_STATIC_LIBRARY_SUFFIX@") > - set_target_properties(assimp::assimp PROPERTIES > -- IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/lib/${staticLibraryName}" > -+ IMPORTED_LOCATION_DEBUG "@CMAKE_INSTALL_FULL_LIBDIR@/${staticLibraryName}" > - ) > - list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp ) > -- list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/lib/${staticLibraryName}" ) > -+ list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${staticLibraryName}" ) > - endif() > - endif() > - > -diff --git a/assimpTargets-release.cmake.in b/assimpTargets-release.cmake.in > -index f3db8f12cd..a416e8899b 100644 > ---- a/assimpTargets-release.cmake.in > -+++ b/assimpTargets-release.cmake.in > -@@ -42,12 +42,12 @@ if(MSVC) > - # Import target "assimp::assimp" for configuration "Release" > - set_property(TARGET assimp::assimp APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) > - set_target_properties(assimp::assimp PROPERTIES > -- IMPORTED_IMPLIB_RELEASE "${_IMPORT_PREFIX}/lib/${importLibraryName}" > -- IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/bin/${sharedLibraryName}" > -+ IMPORTED_IMPLIB_RELEASE "@CMAKE_INSTALL_FULL_LIBDIR@/${importLibraryName}" > -+ IMPORTED_LOCATION_RELEASE "@CMAKE_INSTALL_FULL_BINDIR@/${sharedLibraryName}" > - ) > - list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp ) > -- list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/lib/${importLibraryName}") > -- list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/bin/${sharedLibraryName}" ) > -+ list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${importLibraryName}") > -+ list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_BINDIR@/${sharedLibraryName}" ) > - else() > - set(staticLibraryName "assimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_STATIC_LIBRARY_SUFFIX@") > - > -@@ -57,7 +57,7 @@ if(MSVC) > - IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/${staticLibraryName}" > - ) > - list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp ) > -- list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/lib/${staticLibraryName}") > -+ list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${staticLibraryName}") > - endif() > - > - else() > -@@ -70,17 +70,17 @@ else() > - endif() > - set_target_properties(assimp::assimp PROPERTIES > - IMPORTED_SONAME_RELEASE "${sharedLibraryName}" > -- IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/${sharedLibraryName}" > -+ IMPORTED_LOCATION_RELEASE "@CMAKE_INSTALL_FULL_LIBDIR@/${sharedLibraryName}" > - ) > - list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp ) > -- list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/lib/${sharedLibraryName}" ) > -+ list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${sharedLibraryName}" ) > - else() > - set(staticLibraryName "libassimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_STATIC_LIBRARY_SUFFIX@") > - set_target_properties(assimp::assimp PROPERTIES > -- IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/${staticLibraryName}" > -+ IMPORTED_LOCATION_RELEASE "@CMAKE_INSTALL_FULL_LIBDIR@/${staticLibraryName}" > - ) > - list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp ) > -- list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "${_IMPORT_PREFIX}/lib/${staticLibraryName}" ) > -+ list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp "@CMAKE_INSTALL_FULL_LIBDIR@/${staticLibraryName}" ) > - endif() > - endif() > - > -@@ -91,8 +91,6 @@ get_filename_component(ASSIMP_ROOT_DIR "@CMAKE_INSTALL_PREFIX@" REALPATH) > - > - set( ASSIMP_CXX_FLAGS ) # dynamically linked library > - set( ASSIMP_LINK_FLAGS "" ) > --set( ASSIMP_LIBRARY_DIRS "${ASSIMP_ROOT_DIR}/@ASSIMP_LIB_INSTALL_DIR@") > --set( ASSIMP_INCLUDE_DIRS "${ASSIMP_ROOT_DIR}/@ASSIMP_INCLUDE_INSTALL_DIR@") > - if(ASSIMP_BUILD_SHARED_LIBS) > - set( ASSIMP_LIBRARIES ${sharedLibraryName}) > - else() > - > -diff --git a/assimpTargets.cmake.in b/assimpTargets.cmake.in > -index ab1a8d2c7b..ef90c834a6 100644 > ---- a/assimpTargets.cmake.in > -+++ b/assimpTargets.cmake.in > -@@ -40,16 +40,6 @@ unset(_targetsDefined) > - unset(_targetsNotDefined) > - unset(_expectedTargets) > - > -- > --# Compute the installation prefix relative to this file. > --get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) > --get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) > --get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) > --get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) > --if(_IMPORT_PREFIX STREQUAL "/") > -- set(_IMPORT_PREFIX "") > --endif() > -- > - # Create imported target assimp::assimp > - if(@BUILD_SHARED_LIBS@) > - add_library(assimp::assimp SHARED IMPORTED) > -@@ -60,7 +50,7 @@ endif() > - set_target_properties(assimp::assimp PROPERTIES > - COMPATIBLE_INTERFACE_STRING "assimp_MAJOR_VERSION" > - INTERFACE_assimp_MAJOR_VERSION "1" > -- INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include;${_IMPORT_PREFIX}/include" > -+ #INTERFACE_INCLUDE_DIRECTORIES "@CMAKE_INSTALL_FULL_INCLUDEDIR@" > - #INTERFACE_LINK_LIBRARIES "TxtUtils::TxtUtils;MealyMachine::MealyMachine" > - ) > - > -@@ -75,9 +65,6 @@ foreach(f ${CONFIG_FILES}) > - include(${f}) > - endforeach() > - > --# Cleanup temporary variables. > --set(_IMPORT_PREFIX) > -- > - # Loop over all imported files and verify that they actually exist > - foreach(target ${_IMPORT_CHECK_TARGETS} ) > - foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} ) > - > diff --git a/meta/recipes-graphics/vulkan/assimp_5.0.1.bb b/meta/recipes-graphics/vulkan/assimp_5.0.1.bb > deleted file mode 100644 > index 89c555f08e..0000000000 > --- a/meta/recipes-graphics/vulkan/assimp_5.0.1.bb > +++ /dev/null > @@ -1,26 +0,0 @@ > -DESCRIPTION = "Open Asset Import Library is a portable Open Source library to import \ > - various well-known 3D model formats in a uniform manner." > -HOMEPAGE = "http://www.assimp.org/" > -SECTION = "devel" > - > -LICENSE = "BSD-3-Clause" > -LIC_FILES_CHKSUM = "file://LICENSE;md5=2119edef0916b0bd511cb3c731076271" > - > -DEPENDS = "zlib" > - > -SRC_URI = "git://github.com/assimp/assimp.git;branch=assimp_5.0_release \ > - file://0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch \ > - file://use-GNUInstallDirs-where-possible.patch \ > - file://0001-assimp-remove-shared-lib-from-_IMPORT_CHECK_TARGETS.patch \ > - " > -UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>(\d+(\.\d+)+))" > - > -SRCREV = "8f0c6b04b2257a520aaab38421b2e090204b69df" > - > -S = "${WORKDIR}/git" > - > -inherit cmake > - > -EXTRA_OECMAKE = "-DASSIMP_BUILD_ASSIMP_TOOLS=OFF -DASSIMP_BUILD_TESTS=OFF -DASSIMP_LIB_INSTALL_DIR=${baselib}" > - > -BBCLASSEXTEND = "native nativesdk" > > > > > -- # Randy MacLeod # Wind River Linux ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [OE-core] [PATCH 1/1] assimp: Remove it 2021-09-07 12:04 ` [OE-core] " Randy MacLeod @ 2021-09-07 12:10 ` Ross Burton 2021-09-07 19:01 ` Khem Raj 2021-09-08 8:55 ` Robert Yang 2021-09-07 12:49 ` Alexander Kanavin 1 sibling, 2 replies; 17+ messages in thread From: Ross Burton @ 2021-09-07 12:10 UTC (permalink / raw) To: Randy MacLeod; +Cc: Robert Yang, OE-core On Tue, 7 Sept 2021 at 13:04, Randy MacLeod <randy.macleod@windriver.com> wrote: > I'll look at the sections that you have pointed out later today. Debian is always worth looking at when there's license issues. https://salsa.debian.org/debian/assimp/-/blob/master/debian/README.source Specifically: https://salsa.debian.org/debian/assimp/-/blob/master/debian/README.source#L81 They strip non-free components from the tarball before importing into their git repository. We can delete the same files during the build so they don't get redistributed. Ross ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [OE-core] [PATCH 1/1] assimp: Remove it 2021-09-07 12:10 ` Ross Burton @ 2021-09-07 19:01 ` Khem Raj 2021-09-08 8:55 ` Robert Yang 1 sibling, 0 replies; 17+ messages in thread From: Khem Raj @ 2021-09-07 19:01 UTC (permalink / raw) To: Ross Burton; +Cc: Randy MacLeod, Robert Yang, OE-core On Tue, Sep 7, 2021 at 5:10 AM Ross Burton <ross@burtonini.com> wrote: > > On Tue, 7 Sept 2021 at 13:04, Randy MacLeod <randy.macleod@windriver.com> wrote: > > I'll look at the sections that you have pointed out later today. > > Debian is always worth looking at when there's license issues. > > https://salsa.debian.org/debian/assimp/-/blob/master/debian/README.source > > Specifically: > > https://salsa.debian.org/debian/assimp/-/blob/master/debian/README.source#L81 > > They strip non-free components from the tarball before importing into > their git repository. We can delete the same files during the build > so they don't get redistributed. yeah that seems a sensible approach to me. > > Ross > > > ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [OE-core] [PATCH 1/1] assimp: Remove it 2021-09-07 12:10 ` Ross Burton 2021-09-07 19:01 ` Khem Raj @ 2021-09-08 8:55 ` Robert Yang 2021-09-08 9:33 ` Mikko Rapeli 1 sibling, 1 reply; 17+ messages in thread From: Robert Yang @ 2021-09-08 8:55 UTC (permalink / raw) To: Ross Burton, Randy MacLeod; +Cc: OE-core Hi Ross, On 9/7/21 8:10 PM, Ross Burton wrote: > On Tue, 7 Sept 2021 at 13:04, Randy MacLeod <randy.macleod@windriver.com> wrote: >> I'll look at the sections that you have pointed out later today. > > Debian is always worth looking at when there's license issues. > > https://salsa.debian.org/debian/assimp/-/blob/master/debian/README.source > > Specifically: > > https://salsa.debian.org/debian/assimp/-/blob/master/debian/README.source#L81 > > They strip non-free components from the tarball before importing into > their git repository. We can delete the same files during the build > so they don't get redistributed. According to the license, those non-free files can't be saved anywhere such as the mirrors, I think that we need a special do_fetch command for assimp to make those files won't be saved to DL_DIR or the mirror? // Robert > > Ross > ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [OE-core] [PATCH 1/1] assimp: Remove it 2021-09-08 8:55 ` Robert Yang @ 2021-09-08 9:33 ` Mikko Rapeli 2021-09-08 9:41 ` Robert Yang 0 siblings, 1 reply; 17+ messages in thread From: Mikko Rapeli @ 2021-09-08 9:33 UTC (permalink / raw) To: liezhi.yang; +Cc: ross, randy.macleod, openembedded-core Hi, On Wed, Sep 08, 2021 at 04:55:35PM +0800, Robert Yang wrote: > On 9/7/21 8:10 PM, Ross Burton wrote: > > On Tue, 7 Sept 2021 at 13:04, Randy MacLeod <randy.macleod@windriver.com> wrote: > > > I'll look at the sections that you have pointed out later today. > > > > Debian is always worth looking at when there's license issues. > > > > https://salsa.debian.org/debian/assimp/-/blob/master/debian/README.source > > > > Specifically: > > > > https://salsa.debian.org/debian/assimp/-/blob/master/debian/README.source#L81 > > > > They strip non-free components from the tarball before importing into > > their git repository. We can delete the same files during the build > > so they don't get redistributed. > > According to the license, those non-free files can't be saved anywhere such > as the mirrors, I think that we need a special do_fetch command for assimp to > make those files won't be saved to DL_DIR or the mirror? Maybe just use the Debian original tarball, and possible patches to fix issues in assimp? That should be ok for all mirrors. Cheers, -Mikko ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [OE-core] [PATCH 1/1] assimp: Remove it 2021-09-08 9:33 ` Mikko Rapeli @ 2021-09-08 9:41 ` Robert Yang 0 siblings, 0 replies; 17+ messages in thread From: Robert Yang @ 2021-09-08 9:41 UTC (permalink / raw) To: Mikko.Rapeli; +Cc: ross, randy.macleod, openembedded-core On 9/8/21 5:33 PM, Mikko.Rapeli@bmw.de wrote: > Hi, > > On Wed, Sep 08, 2021 at 04:55:35PM +0800, Robert Yang wrote: >> On 9/7/21 8:10 PM, Ross Burton wrote: >>> On Tue, 7 Sept 2021 at 13:04, Randy MacLeod <randy.macleod@windriver.com> wrote: >>>> I'll look at the sections that you have pointed out later today. >>> >>> Debian is always worth looking at when there's license issues. >>> >>> https://salsa.debian.org/debian/assimp/-/blob/master/debian/README.source >>> >>> Specifically: >>> >>> https://salsa.debian.org/debian/assimp/-/blob/master/debian/README.source#L81 >>> >>> They strip non-free components from the tarball before importing into >>> their git repository. We can delete the same files during the build >>> so they don't get redistributed. >> >> According to the license, those non-free files can't be saved anywhere such >> as the mirrors, I think that we need a special do_fetch command for assimp to >> make those files won't be saved to DL_DIR or the mirror? > > Maybe just use the Debian original tarball, and possible patches to fix issues > in assimp? > > That should be ok for all mirrors. Yes, that's a good idea, thanks Debian. // Robert > > Cheers, > > -Mikko > ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [OE-core] [PATCH 1/1] assimp: Remove it 2021-09-07 12:04 ` [OE-core] " Randy MacLeod 2021-09-07 12:10 ` Ross Burton @ 2021-09-07 12:49 ` Alexander Kanavin 2021-09-08 10:08 ` Ross Burton 1 sibling, 1 reply; 17+ messages in thread From: Alexander Kanavin @ 2021-09-07 12:49 UTC (permalink / raw) To: Randy MacLeod; +Cc: Robert Yang, OE-core [-- Attachment #1: Type: text/plain, Size: 88580 bytes --] On Tue, 7 Sept 2021 at 14:04, Randy MacLeod <randy.macleod@windriver.com> wrote: > In master, it seems that vulkan* depends on assimp: > > > https://layers.openembedded.org/layerindex/branch/master/recipes/?q=depends%3Aassimp > > and lots of recipes in meta-qt5 and meta-ros* so removing it here > would just push the problem around. > I'm not sure why layerindex says otherewise, but neither vulkan nor anything in meta-qt5 actually depend on assimp. qt5/6 has an option, off by default, to use external assimp, vulkan has no dependency at all. This leaves basically meta-ros, so carrying assimp for the benefit of a single layer is dubious at best. Alex > > I'll look at the sections that you have pointed out later today. > > ../Randy > > > > > Signed-off-by: Robert Yang <liezhi.yang@windriver.com> > > --- > > meta/conf/distro/include/maintainers.inc | 1 - > > ...hared-lib-from-_IMPORT_CHECK_TARGETS.patch | 32 - > > ...hub.com-assimp-assimp-issues-2733-up.patch | 1664 ----------------- > > .../use-GNUInstallDirs-where-possible.patch | 257 --- > > meta/recipes-graphics/vulkan/assimp_5.0.1.bb | 26 - > > 5 files changed, 1980 deletions(-) > > delete mode 100644 > meta/recipes-graphics/vulkan/assimp/0001-assimp-remove-shared-lib-from-_IMPORT_CHECK_TARGETS.patch > > delete mode 100644 > meta/recipes-graphics/vulkan/assimp/0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch > > delete mode 100644 > meta/recipes-graphics/vulkan/assimp/use-GNUInstallDirs-where-possible.patch > > delete mode 100644 meta/recipes-graphics/vulkan/assimp_5.0.1.bb > > > > diff --git a/meta/conf/distro/include/maintainers.inc > b/meta/conf/distro/include/maintainers.inc > > index 0e8185f4e3..e560ba39dd 100644 > > --- a/meta/conf/distro/include/maintainers.inc > > +++ b/meta/conf/distro/include/maintainers.inc > > @@ -46,7 +46,6 @@ RECIPE_MAINTAINER:pn-apt = "Aníbal Limón < > limon.anibal@gmail.com>" > > RECIPE_MAINTAINER:pn-argp-standalone = "Khem Raj <raj.khem@gmail.com>" > > RECIPE_MAINTAINER:pn-asciidoc = "Yi Zhao <yi.zhao@windriver.com>" > > RECIPE_MAINTAINER:pn-aspell = "Anuj Mittal <anuj.mittal@intel.com>" > > -RECIPE_MAINTAINER:pn-assimp = "Anuj Mittal <anuj.mittal@intel.com>" > > RECIPE_MAINTAINER:pn-at = "Chen Qi <Qi.Chen@windriver.com>" > > RECIPE_MAINTAINER:pn-at-spi2-atk = "Tim Orling < > timothy.t.orling@intel.com>" > > RECIPE_MAINTAINER:pn-at-spi2-core = "Tim Orling < > timothy.t.orling@intel.com>" > > diff --git > a/meta/recipes-graphics/vulkan/assimp/0001-assimp-remove-shared-lib-from-_IMPORT_CHECK_TARGETS.patch > b/meta/recipes-graphics/vulkan/assimp/0001-assimp-remove-shared-lib-from-_IMPORT_CHECK_TARGETS.patch > > deleted file mode 100644 > > index 1078148d6b..0000000000 > > --- > a/meta/recipes-graphics/vulkan/assimp/0001-assimp-remove-shared-lib-from-_IMPORT_CHECK_TARGETS.patch > > +++ /dev/null > > @@ -1,32 +0,0 @@ > > -From: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com> > > -Date: Fri, 13 Aug 2021 16:42:48 +0530 > > -Subject: [PATCH] assimp: remove shared lib from _IMPORT_CHECK_TARGETS > > - > > -In the target assimp::assimp shared library verification removed > > -as it is giving configuration error when used by 3rd part component to > > -configure itself using assimp::assimp target > > - > > -Upstream-Status: Inappropriate [oe specific] > > - > > -Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com> > > ---- > > - assimpTargets-release.cmake.in | 4 ++-- > > - 1 file changed, 2 insertions(+), 2 deletions(-) > > - > > -diff --git a/assimpTargets-release.cmake.in b/ > assimpTargets-release.cmake.in > > -index cd2fac7e0..52edc7990 100644 > > ---- a/assimpTargets-release.cmake.in > > -+++ b/assimpTargets-release.cmake.in > > -@@ -72,8 +72,8 @@ else() > > - IMPORTED_SONAME_RELEASE "${sharedLibraryName}" > > - IMPORTED_LOCATION_RELEASE "@CMAKE_INSTALL_FULL_LIBDIR@ > /${sharedLibraryName}" > > - ) > > -- list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp ) > > -- list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp > "@CMAKE_INSTALL_FULL_LIBDIR@/${sharedLibraryName}" ) > > -+ #list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp ) > > -+ #list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp > "@CMAKE_INSTALL_FULL_LIBDIR@/${sharedLibraryName}" ) > > - else() > > - set(staticLibraryName > "libassimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_STATIC_LIBRARY_SUFFIX@") > > - set_target_properties(assimp::assimp PROPERTIES > > --- > > -2.17.1 > > diff --git > a/meta/recipes-graphics/vulkan/assimp/0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch > b/meta/recipes-graphics/vulkan/assimp/0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch > > deleted file mode 100644 > > index 87a1658710..0000000000 > > --- > a/meta/recipes-graphics/vulkan/assimp/0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch > > +++ /dev/null > > @@ -1,1664 +0,0 @@ > > -From 7fc220b2350d78942fb3935cad0b1564418ebe8f Mon Sep 17 00:00:00 2001 > > -From: Kim Kulling <kim.kulling@googlemail.com> > > -Date: Tue, 19 Nov 2019 20:30:40 +0100 > > -Subject: [PATCH] closes https://github.com/assimp/assimp/issues/2733: > update > > - of zlip to fix gcc build for v9.2.0 32 bit > > - > > -Upstream-Status: Backport [ > https://github.com/assimp/assimp/commit/f78446b14aff46db2ef27d062a275b6a01fd68b1 > ] > > -Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com> > > ---- > > - contrib/zip/.gitignore | 2 + > > - contrib/zip/CMakeLists.txt | 83 +++++- > > - contrib/zip/README.md | 12 +- > > - contrib/zip/appveyor.yml | 2 +- > > - contrib/zip/src/miniz.h | 457 ++++++++++++++++++++++++++++---- > > - contrib/zip/src/zip.c | 62 +++-- > > - contrib/zip/src/zip.h | 457 ++++++++++++++++---------------- > > - contrib/zip/test/CMakeLists.txt | 27 +- > > - contrib/zip/test/test.c | 38 ++- > > - contrib/zip/test/test_miniz.c | 25 +- > > - 10 files changed, 821 insertions(+), 344 deletions(-) > > - > > -diff --git a/contrib/zip/.gitignore b/contrib/zip/.gitignore > > -index a7904a1e..49b2cb2f 100644 > > ---- a/contrib/zip/.gitignore > > -+++ b/contrib/zip/.gitignore > > -@@ -1,6 +1,7 @@ > > - /build/ > > - /test/build/ > > - /xcodeproj/ > > -+.vscode/ > > - > > - # Object files > > - *.o > > -@@ -54,3 +55,4 @@ zip.dir/ > > - test/test.exe.vcxproj.filters > > - test/test.exe.vcxproj > > - test/test.exe.dir/ > > -+ > > -diff --git a/contrib/zip/CMakeLists.txt b/contrib/zip/CMakeLists.txt > > -index b46dbb1d..77916d2e 100644 > > ---- a/contrib/zip/CMakeLists.txt > > -+++ b/contrib/zip/CMakeLists.txt > > -@@ -1,10 +1,14 @@ > > --cmake_minimum_required(VERSION 2.8) > > --project(zip) > > --enable_language(C) > > -+cmake_minimum_required(VERSION 3.0) > > -+ > > -+project(zip > > -+ LANGUAGES C > > -+ VERSION "0.1.15") > > - set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" > ${CMAKE_MODULE_PATH}) > > - > > -+option(CMAKE_DISABLE_TESTING "Disable test creation" OFF) > > -+ > > - if (MSVC) > > -- # Use secure functions by defaualt and suppress warnings about > "deprecated" functions > > -+ # Use secure functions by default and suppress warnings about > "deprecated" functions > > - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D > _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1") > > - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D > _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT=1") > > - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D _CRT_NONSTDC_NO_WARNINGS=1 /D > _CRT_SECURE_NO_WARNINGS=1") > > -@@ -12,28 +16,80 @@ elseif ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" OR > > - "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" OR > > - "${CMAKE_C_COMPILER_ID}" STREQUAL "AppleClang") > > - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -Wall -Wextra -Werror > -pedantic") > > -+ if(ENABLE_COVERAGE) > > -+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 -fprofile-arcs > -ftest-coverage") > > -+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage") > > -+ endif() > > - endif (MSVC) > > - > > - # zip > > - set(SRC src/miniz.h src/zip.h src/zip.c) > > - add_library(${PROJECT_NAME} ${SRC}) > > --target_include_directories(${PROJECT_NAME} INTERFACE src) > > -+target_include_directories(${PROJECT_NAME} PUBLIC > > -+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src> > > -+ $<INSTALL_INTERFACE:include> > > -+) > > - > > - # test > > - if (NOT CMAKE_DISABLE_TESTING) > > - enable_testing() > > - add_subdirectory(test) > > - find_package(Sanitizers) > > -- add_sanitizers(${PROJECT_NAME} test.exe) > > -- add_sanitizers(${PROJECT_NAME} test_miniz.exe) > > -+ add_sanitizers(${PROJECT_NAME} ${test_out} ${test_miniz_out}) > > - endif() > > - > > -+#### > > -+# Installation (https://github.com/forexample/package-example) { > > -+ > > -+set(CONFIG_INSTALL_DIR "lib/cmake/${PROJECT_NAME}") > > -+set(INCLUDE_INSTALL_DIR "include") > > -+ > > -+set(GENERATED_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated") > > -+ > > -+# Configuration > > -+set(VERSION_CONFIG > "${GENERATED_DIR}/${PROJECT_NAME}ConfigVersion.cmake") > > -+set(PROJECT_CONFIG "${GENERATED_DIR}/${PROJECT_NAME}Config.cmake") > > -+set(TARGETS_EXPORT_NAME "${PROJECT_NAME}Targets") > > -+set(NAMESPACE "${PROJECT_NAME}::") > > -+ > > -+# Include module with fuction 'write_basic_package_version_file' > > -+include(CMakePackageConfigHelpers) > > -+ > > -+# Note: PROJECT_VERSION is used as a VERSION > > -+write_basic_package_version_file( > > -+ "${VERSION_CONFIG}" COMPATIBILITY SameMajorVersion > > -+) > > -+ > > -+# Use variables: > > -+# * TARGETS_EXPORT_NAME > > -+# * PROJECT_NAME > > -+configure_package_config_file( > > -+ "cmake/Config.cmake.in" > > -+ "${PROJECT_CONFIG}" > > -+ INSTALL_DESTINATION "${CONFIG_INSTALL_DIR}" > > -+) > > -+ > > -+install( > > -+ FILES "${PROJECT_CONFIG}" "${VERSION_CONFIG}" > > -+ DESTINATION "${CONFIG_INSTALL_DIR}" > > -+) > > -+ > > -+install( > > -+ EXPORT "${TARGETS_EXPORT_NAME}" > > -+ NAMESPACE "${NAMESPACE}" > > -+ DESTINATION "${CONFIG_INSTALL_DIR}" > > -+) > > -+ > > -+# } > > -+ > > - install(TARGETS ${PROJECT_NAME} > > -+ EXPORT ${TARGETS_EXPORT_NAME} > > - RUNTIME DESTINATION bin > > - ARCHIVE DESTINATION lib > > - LIBRARY DESTINATION lib > > -- COMPONENT library) > > --install(FILES ${PROJECT_SOURCE_DIR}/src/zip.h DESTINATION include) > > -+ INCLUDES DESTINATION ${INCLUDE_INSTALL_DIR} > > -+) > > -+install(FILES ${PROJECT_SOURCE_DIR}/src/zip.h DESTINATION > ${INCLUDE_INSTALL_DIR}/zip) > > - > > - # uninstall target ( > https://gitlab.kitware.com/cmake/community/wikis/FAQ#can-i-do-make-uninstall-with-cmake > ) > > - if(NOT TARGET uninstall) > > -@@ -45,3 +101,12 @@ if(NOT TARGET uninstall) > > - add_custom_target(uninstall > > - COMMAND ${CMAKE_COMMAND} -P > ${CMAKE_CURRENT_BINARY_DIR}/cmake/cmake_uninstall.cmake) > > - endif() > > -+ > > -+find_package(Doxygen) > > -+if(DOXYGEN_FOUND) > > -+ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in > ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY) > > -+ add_custom_target(doc > > -+ ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile > > -+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} > > -+ COMMENT "Generating API documentation with Doxygen" VERBATIM) > > -+endif() > > -diff --git a/contrib/zip/README.md b/contrib/zip/README.md > > -index d5fb8cd2..14eb9a34 100644 > > ---- a/contrib/zip/README.md > > -+++ b/contrib/zip/README.md > > -@@ -71,7 +71,7 @@ int arg = 2; > > - zip_extract("foo.zip", "/tmp", on_extract_entry, &arg); > > - ``` > > - > > --* Extract a zip entry into memory. > > -+* Extract a zip entry into memory. > > - ```c > > - void *buf = NULL; > > - size_t bufsize; > > -@@ -89,7 +89,7 @@ zip_close(zip); > > - free(buf); > > - ``` > > - > > --* Extract a zip entry into memory (no internal allocation). > > -+* Extract a zip entry into memory (no internal allocation). > > - ```c > > - unsigned char *buf; > > - size_t bufsize; > > -@@ -110,7 +110,7 @@ zip_close(zip); > > - free(buf); > > - ``` > > - > > --* Extract a zip entry into memory using callback. > > -+* Extract a zip entry into memory using callback. > > - ```c > > - struct buffer_t { > > - char *data; > > -@@ -144,7 +144,7 @@ free(buf.data); > > - ``` > > - > > - > > --* Extract a zip entry into a file. > > -+* Extract a zip entry into a file. > > - ```c > > - struct zip_t *zip = zip_open("foo.zip", 0, 'r'); > > - { > > -@@ -157,7 +157,7 @@ struct zip_t *zip = zip_open("foo.zip", 0, 'r'); > > - zip_close(zip); > > - ``` > > - > > --* List of all zip entries > > -+* List of all zip entries > > - ```c > > - struct zip_t *zip = zip_open("foo.zip", 0, 'r'); > > - int i, n = zip_total_entries(zip); > > -@@ -174,7 +174,7 @@ for (i = 0; i < n; ++i) { > > - zip_close(zip); > > - ``` > > - > > --## Bindings > > -+# Bindings > > - Compile zip library as a dynamic library. > > - ```shell > > - $ mkdir build > > -diff --git a/contrib/zip/appveyor.yml b/contrib/zip/appveyor.yml > > -index 0be6373c..ea17f5de 100644 > > ---- a/contrib/zip/appveyor.yml > > -+++ b/contrib/zip/appveyor.yml > > -@@ -1,4 +1,4 @@ > > --version: zip-0.1.9.{build} > > -+version: zip-0.1.15.{build} > > - build_script: > > - - cmd: >- > > - cd c:\projects\zip > > -diff --git a/contrib/zip/src/miniz.h b/contrib/zip/src/miniz.h > > -index 2c27a94d..c4fcfb83 100644 > > ---- a/contrib/zip/src/miniz.h > > -+++ b/contrib/zip/src/miniz.h > > -@@ -221,6 +221,7 @@ > > - #ifndef MINIZ_HEADER_INCLUDED > > - #define MINIZ_HEADER_INCLUDED > > - > > -+#include <stdint.h> > > - #include <stdlib.h> > > - > > - // Defines to completely disable specific portions of miniz.c: > > -@@ -284,7 +285,8 @@ > > - /* Set MINIZ_USE_UNALIGNED_LOADS_AND_STORES only if not set */ > > - #if !defined(MINIZ_USE_UNALIGNED_LOADS_AND_STORES) > > - #if MINIZ_X86_OR_X64_CPU > > --/* Set MINIZ_USE_UNALIGNED_LOADS_AND_STORES to 1 on CPU's that permit > efficient integer loads and stores from unaligned addresses. */ > > -+/* Set MINIZ_USE_UNALIGNED_LOADS_AND_STORES to 1 on CPU's that permit > efficient > > -+ * integer loads and stores from unaligned addresses. */ > > - #define MINIZ_USE_UNALIGNED_LOADS_AND_STORES 1 > > - #define MINIZ_UNALIGNED_USE_MEMCPY > > - #else > > -@@ -354,6 +356,44 @@ enum { > > - MZ_FIXED = 4 > > - }; > > - > > -+/* miniz error codes. Be sure to update mz_zip_get_error_string() if > you add or > > -+ * modify this enum. */ > > -+typedef enum { > > -+ MZ_ZIP_NO_ERROR = 0, > > -+ MZ_ZIP_UNDEFINED_ERROR, > > -+ MZ_ZIP_TOO_MANY_FILES, > > -+ MZ_ZIP_FILE_TOO_LARGE, > > -+ MZ_ZIP_UNSUPPORTED_METHOD, > > -+ MZ_ZIP_UNSUPPORTED_ENCRYPTION, > > -+ MZ_ZIP_UNSUPPORTED_FEATURE, > > -+ MZ_ZIP_FAILED_FINDING_CENTRAL_DIR, > > -+ MZ_ZIP_NOT_AN_ARCHIVE, > > -+ MZ_ZIP_INVALID_HEADER_OR_CORRUPTED, > > -+ MZ_ZIP_UNSUPPORTED_MULTIDISK, > > -+ MZ_ZIP_DECOMPRESSION_FAILED, > > -+ MZ_ZIP_COMPRESSION_FAILED, > > -+ MZ_ZIP_UNEXPECTED_DECOMPRESSED_SIZE, > > -+ MZ_ZIP_CRC_CHECK_FAILED, > > -+ MZ_ZIP_UNSUPPORTED_CDIR_SIZE, > > -+ MZ_ZIP_ALLOC_FAILED, > > -+ MZ_ZIP_FILE_OPEN_FAILED, > > -+ MZ_ZIP_FILE_CREATE_FAILED, > > -+ MZ_ZIP_FILE_WRITE_FAILED, > > -+ MZ_ZIP_FILE_READ_FAILED, > > -+ MZ_ZIP_FILE_CLOSE_FAILED, > > -+ MZ_ZIP_FILE_SEEK_FAILED, > > -+ MZ_ZIP_FILE_STAT_FAILED, > > -+ MZ_ZIP_INVALID_PARAMETER, > > -+ MZ_ZIP_INVALID_FILENAME, > > -+ MZ_ZIP_BUF_TOO_SMALL, > > -+ MZ_ZIP_INTERNAL_ERROR, > > -+ MZ_ZIP_FILE_NOT_FOUND, > > -+ MZ_ZIP_ARCHIVE_TOO_LARGE, > > -+ MZ_ZIP_VALIDATION_FAILED, > > -+ MZ_ZIP_WRITE_CALLBACK_FAILED, > > -+ MZ_ZIP_TOTAL_ERRORS > > -+} mz_zip_error; > > -+ > > - // Method > > - #define MZ_DEFLATED 8 > > - > > -@@ -696,6 +736,7 @@ typedef size_t (*mz_file_read_func)(void *pOpaque, > mz_uint64 file_ofs, > > - void *pBuf, size_t n); > > - typedef size_t (*mz_file_write_func)(void *pOpaque, mz_uint64 file_ofs, > > - const void *pBuf, size_t n); > > -+typedef mz_bool (*mz_file_needs_keepalive)(void *pOpaque); > > - > > - struct mz_zip_internal_state_tag; > > - typedef struct mz_zip_internal_state_tag mz_zip_internal_state; > > -@@ -707,13 +748,27 @@ typedef enum { > > - MZ_ZIP_MODE_WRITING_HAS_BEEN_FINALIZED = 3 > > - } mz_zip_mode; > > - > > --typedef struct mz_zip_archive_tag { > > -+typedef enum { > > -+ MZ_ZIP_TYPE_INVALID = 0, > > -+ MZ_ZIP_TYPE_USER, > > -+ MZ_ZIP_TYPE_MEMORY, > > -+ MZ_ZIP_TYPE_HEAP, > > -+ MZ_ZIP_TYPE_FILE, > > -+ MZ_ZIP_TYPE_CFILE, > > -+ MZ_ZIP_TOTAL_TYPES > > -+} mz_zip_type; > > -+ > > -+typedef struct { > > - mz_uint64 m_archive_size; > > - mz_uint64 m_central_directory_file_ofs; > > -- mz_uint m_total_files; > > -+ > > -+ /* We only support up to UINT32_MAX files in zip64 mode. */ > > -+ mz_uint32 m_total_files; > > - mz_zip_mode m_zip_mode; > > -+ mz_zip_type m_zip_type; > > -+ mz_zip_error m_last_error; > > - > > -- mz_uint m_file_offset_alignment; > > -+ mz_uint64 m_file_offset_alignment; > > - > > - mz_alloc_func m_pAlloc; > > - mz_free_func m_pFree; > > -@@ -722,6 +777,7 @@ typedef struct mz_zip_archive_tag { > > - > > - mz_file_read_func m_pRead; > > - mz_file_write_func m_pWrite; > > -+ mz_file_needs_keepalive m_pNeeds_keepalive; > > - void *m_pIO_opaque; > > - > > - mz_zip_internal_state *m_pState; > > -@@ -1263,6 +1319,9 @@ mz_uint > tdefl_create_comp_flags_from_zip_params(int level, int window_bits, > > - int strategy); > > - #endif // #ifndef MINIZ_NO_ZLIB_APIS > > - > > -+#define MZ_UINT16_MAX (0xFFFFU) > > -+#define MZ_UINT32_MAX (0xFFFFFFFFU) > > -+ > > - #ifdef __cplusplus > > - } > > - #endif > > -@@ -1311,6 +1370,11 @@ typedef unsigned char > mz_validate_uint64[sizeof(mz_uint64) == 8 ? 1 : -1]; > > - ((mz_uint32)(((const mz_uint8 *)(p))[3]) << 24U)) > > - #endif > > - > > -+#define MZ_READ_LE64(p) > \ > > -+ (((mz_uint64)MZ_READ_LE32(p)) | > \ > > -+ (((mz_uint64)MZ_READ_LE32((const mz_uint8 *)(p) + > sizeof(mz_uint32))) \ > > -+ << 32U)) > > -+ > > - #ifdef _MSC_VER > > - #define MZ_FORCEINLINE __forceinline > > - #elif defined(__GNUC__) > > -@@ -4160,6 +4224,17 @@ enum { > > - MZ_ZIP_LOCAL_DIR_HEADER_SIZE = 30, > > - MZ_ZIP_CENTRAL_DIR_HEADER_SIZE = 46, > > - MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE = 22, > > -+ > > -+ /* ZIP64 archive identifier and record sizes */ > > -+ MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIG = 0x06064b50, > > -+ MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIG = 0x07064b50, > > -+ MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE = 56, > > -+ MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE = 20, > > -+ MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID = 0x0001, > > -+ MZ_ZIP_DATA_DESCRIPTOR_ID = 0x08074b50, > > -+ MZ_ZIP_DATA_DESCRIPTER_SIZE64 = 24, > > -+ MZ_ZIP_DATA_DESCRIPTER_SIZE32 = 16, > > -+ > > - // Central directory header record offsets > > - MZ_ZIP_CDH_SIG_OFS = 0, > > - MZ_ZIP_CDH_VERSION_MADE_BY_OFS = 4, > > -@@ -4199,6 +4274,31 @@ enum { > > - MZ_ZIP_ECDH_CDIR_SIZE_OFS = 12, > > - MZ_ZIP_ECDH_CDIR_OFS_OFS = 16, > > - MZ_ZIP_ECDH_COMMENT_SIZE_OFS = 20, > > -+ > > -+ /* ZIP64 End of central directory locator offsets */ > > -+ MZ_ZIP64_ECDL_SIG_OFS = 0, /* 4 bytes */ > > -+ MZ_ZIP64_ECDL_NUM_DISK_CDIR_OFS = 4, /* 4 bytes */ > > -+ MZ_ZIP64_ECDL_REL_OFS_TO_ZIP64_ECDR_OFS = 8, /* 8 bytes */ > > -+ MZ_ZIP64_ECDL_TOTAL_NUMBER_OF_DISKS_OFS = 16, /* 4 bytes */ > > -+ > > -+ /* ZIP64 End of central directory header offsets */ > > -+ MZ_ZIP64_ECDH_SIG_OFS = 0, /* 4 bytes */ > > -+ MZ_ZIP64_ECDH_SIZE_OF_RECORD_OFS = 4, /* 8 bytes */ > > -+ MZ_ZIP64_ECDH_VERSION_MADE_BY_OFS = 12, /* 2 bytes */ > > -+ MZ_ZIP64_ECDH_VERSION_NEEDED_OFS = 14, /* 2 bytes */ > > -+ MZ_ZIP64_ECDH_NUM_THIS_DISK_OFS = 16, /* 4 bytes */ > > -+ MZ_ZIP64_ECDH_NUM_DISK_CDIR_OFS = 20, /* 4 bytes */ > > -+ MZ_ZIP64_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS = 24, /* 8 bytes */ > > -+ MZ_ZIP64_ECDH_CDIR_TOTAL_ENTRIES_OFS = 32, /* 8 bytes */ > > -+ MZ_ZIP64_ECDH_CDIR_SIZE_OFS = 40, /* 8 bytes */ > > -+ MZ_ZIP64_ECDH_CDIR_OFS_OFS = 48, /* 8 bytes */ > > -+ MZ_ZIP_VERSION_MADE_BY_DOS_FILESYSTEM_ID = 0, > > -+ MZ_ZIP_DOS_DIR_ATTRIBUTE_BITFLAG = 0x10, > > -+ MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_IS_ENCRYPTED = 1, > > -+ MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_COMPRESSED_PATCH_FLAG = 32, > > -+ MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_USES_STRONG_ENCRYPTION = 64, > > -+ MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_LOCAL_DIR_IS_MASKED = 8192, > > -+ MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_UTF8 = 1 << 11 > > - }; > > - > > - typedef struct { > > -@@ -4211,7 +4311,24 @@ struct mz_zip_internal_state_tag { > > - mz_zip_array m_central_dir; > > - mz_zip_array m_central_dir_offsets; > > - mz_zip_array m_sorted_central_dir_offsets; > > -+ > > -+ /* The flags passed in when the archive is initially opened. */ > > -+ uint32_t m_init_flags; > > -+ > > -+ /* MZ_TRUE if the archive has a zip64 end of central directory > headers, etc. > > -+ */ > > -+ mz_bool m_zip64; > > -+ > > -+ /* MZ_TRUE if we found zip64 extended info in the central directory > (m_zip64 > > -+ * will also be slammed to true too, even if we didn't find a zip64 > end of > > -+ * central dir header, etc.) */ > > -+ mz_bool m_zip64_has_extended_info_fields; > > -+ > > -+ /* These fields are used by the file, FILE, memory, and memory/heap > read/write > > -+ * helpers. */ > > - MZ_FILE *m_pFile; > > -+ mz_uint64 m_file_archive_start_ofs; > > -+ > > - void *m_pMem; > > - size_t m_mem_size; > > - size_t m_mem_capacity; > > -@@ -4363,6 +4480,13 @@ static mz_bool mz_zip_set_file_times(const char > *pFilename, time_t access_time, > > - #endif /* #ifndef MINIZ_NO_STDIO */ > > - #endif /* #ifndef MINIZ_NO_TIME */ > > - > > -+static MZ_FORCEINLINE mz_bool mz_zip_set_error(mz_zip_archive *pZip, > > -+ mz_zip_error err_num) { > > -+ if (pZip) > > -+ pZip->m_last_error = err_num; > > -+ return MZ_FALSE; > > -+} > > -+ > > - static mz_bool mz_zip_reader_init_internal(mz_zip_archive *pZip, > > - mz_uint32 flags) { > > - (void)flags; > > -@@ -4480,127 +4604,346 @@ > mz_zip_reader_sort_central_dir_offsets_by_filename(mz_zip_archive *pZip) { > > - } > > - } > > - > > --static mz_bool mz_zip_reader_read_central_dir(mz_zip_archive *pZip, > > -- mz_uint32 flags) { > > -- mz_uint cdir_size, num_this_disk, cdir_disk_index; > > -- mz_uint64 cdir_ofs; > > -+static mz_bool mz_zip_reader_locate_header_sig(mz_zip_archive *pZip, > > -+ mz_uint32 record_sig, > > -+ mz_uint32 record_size, > > -+ mz_int64 *pOfs) { > > - mz_int64 cur_file_ofs; > > -- const mz_uint8 *p; > > - mz_uint32 buf_u32[4096 / sizeof(mz_uint32)]; > > - mz_uint8 *pBuf = (mz_uint8 *)buf_u32; > > -- mz_bool sort_central_dir = > > -- ((flags & MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY) == 0); > > -- // Basic sanity checks - reject files which are too small, and check > the first > > -- // 4 bytes of the file to make sure a local header is there. > > -- if (pZip->m_archive_size < MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) > > -+ > > -+ /* Basic sanity checks - reject files which are too small */ > > -+ if (pZip->m_archive_size < record_size) > > - return MZ_FALSE; > > -- // Find the end of central directory record by scanning the file > from the end > > -- // towards the beginning. > > -+ > > -+ /* Find the record by scanning the file from the end towards the > beginning. */ > > - cur_file_ofs = > > - MZ_MAX((mz_int64)pZip->m_archive_size - > (mz_int64)sizeof(buf_u32), 0); > > - for (;;) { > > - int i, > > - n = (int)MZ_MIN(sizeof(buf_u32), pZip->m_archive_size - > cur_file_ofs); > > -+ > > - if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pBuf, n) != > (mz_uint)n) > > - return MZ_FALSE; > > -- for (i = n - 4; i >= 0; --i) > > -- if (MZ_READ_LE32(pBuf + i) == > MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG) > > -- break; > > -+ > > -+ for (i = n - 4; i >= 0; --i) { > > -+ mz_uint s = MZ_READ_LE32(pBuf + i); > > -+ if (s == record_sig) { > > -+ if ((pZip->m_archive_size - (cur_file_ofs + i)) >= record_size) > > -+ break; > > -+ } > > -+ } > > -+ > > - if (i >= 0) { > > - cur_file_ofs += i; > > - break; > > - } > > -+ > > -+ /* Give up if we've searched the entire file, or we've gone back > "too far" > > -+ * (~64kb) */ > > - if ((!cur_file_ofs) || ((pZip->m_archive_size - cur_file_ofs) >= > > -- (0xFFFF + > MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE))) > > -+ (MZ_UINT16_MAX + record_size))) > > - return MZ_FALSE; > > -+ > > - cur_file_ofs = MZ_MAX(cur_file_ofs - (sizeof(buf_u32) - 3), 0); > > - } > > -- // Read and verify the end of central directory record. > > -+ > > -+ *pOfs = cur_file_ofs; > > -+ return MZ_TRUE; > > -+} > > -+ > > -+static mz_bool mz_zip_reader_read_central_dir(mz_zip_archive *pZip, > > -+ mz_uint flags) { > > -+ mz_uint cdir_size = 0, cdir_entries_on_this_disk = 0, num_this_disk > = 0, > > -+ cdir_disk_index = 0; > > -+ mz_uint64 cdir_ofs = 0; > > -+ mz_int64 cur_file_ofs = 0; > > -+ const mz_uint8 *p; > > -+ > > -+ mz_uint32 buf_u32[4096 / sizeof(mz_uint32)]; > > -+ mz_uint8 *pBuf = (mz_uint8 *)buf_u32; > > -+ mz_bool sort_central_dir = > > -+ ((flags & MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY) == 0); > > -+ mz_uint32 zip64_end_of_central_dir_locator_u32 > > -+ [(MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE + sizeof(mz_uint32) - > 1) / > > -+ sizeof(mz_uint32)]; > > -+ mz_uint8 *pZip64_locator = (mz_uint8 > *)zip64_end_of_central_dir_locator_u32; > > -+ > > -+ mz_uint32 zip64_end_of_central_dir_header_u32 > > -+ [(MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE + sizeof(mz_uint32) - > 1) / > > -+ sizeof(mz_uint32)]; > > -+ mz_uint8 *pZip64_end_of_central_dir = > > -+ (mz_uint8 *)zip64_end_of_central_dir_header_u32; > > -+ > > -+ mz_uint64 zip64_end_of_central_dir_ofs = 0; > > -+ > > -+ /* Basic sanity checks - reject files which are too small, and check > the first > > -+ * 4 bytes of the file to make sure a local header is there. */ > > -+ if (pZip->m_archive_size < MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) > > -+ return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE); > > -+ > > -+ if (!mz_zip_reader_locate_header_sig( > > -+ pZip, MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG, > > -+ MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE, &cur_file_ofs)) > > -+ return mz_zip_set_error(pZip, MZ_ZIP_FAILED_FINDING_CENTRAL_DIR); > > -+ > > -+ /* Read and verify the end of central directory record. */ > > - if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pBuf, > > - MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) != > > - MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) > > -- return MZ_FALSE; > > -- if ((MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_SIG_OFS) != > > -- MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG) || > > -- ((pZip->m_total_files = > > -- MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_CDIR_TOTAL_ENTRIES_OFS)) != > > -- MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS))) > > -- return MZ_FALSE; > > -+ return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); > > -+ > > -+ if (MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_SIG_OFS) != > > -+ MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG) > > -+ return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE); > > -+ > > -+ if (cur_file_ofs >= (MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE + > > -+ MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE)) { > > -+ if (pZip->m_pRead(pZip->m_pIO_opaque, > > -+ cur_file_ofs - > MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE, > > -+ pZip64_locator, > > -+ MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE) == > > -+ MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE) { > > -+ if (MZ_READ_LE32(pZip64_locator + MZ_ZIP64_ECDL_SIG_OFS) == > > -+ MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIG) { > > -+ zip64_end_of_central_dir_ofs = MZ_READ_LE64( > > -+ pZip64_locator + MZ_ZIP64_ECDL_REL_OFS_TO_ZIP64_ECDR_OFS); > > -+ if (zip64_end_of_central_dir_ofs > > > -+ (pZip->m_archive_size - > MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE)) > > -+ return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE); > > -+ > > -+ if (pZip->m_pRead(pZip->m_pIO_opaque, > zip64_end_of_central_dir_ofs, > > -+ pZip64_end_of_central_dir, > > -+ MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE) == > > -+ MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE) { > > -+ if (MZ_READ_LE32(pZip64_end_of_central_dir + > MZ_ZIP64_ECDH_SIG_OFS) == > > -+ MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIG) { > > -+ pZip->m_pState->m_zip64 = MZ_TRUE; > > -+ } > > -+ } > > -+ } > > -+ } > > -+ } > > - > > -+ pZip->m_total_files = MZ_READ_LE16(pBuf + > MZ_ZIP_ECDH_CDIR_TOTAL_ENTRIES_OFS); > > -+ cdir_entries_on_this_disk = > > -+ MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS); > > - num_this_disk = MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_NUM_THIS_DISK_OFS); > > - cdir_disk_index = MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_NUM_DISK_CDIR_OFS); > > -+ cdir_size = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_SIZE_OFS); > > -+ cdir_ofs = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_OFS_OFS); > > -+ > > -+ if (pZip->m_pState->m_zip64) { > > -+ mz_uint32 zip64_total_num_of_disks = > > -+ MZ_READ_LE32(pZip64_locator + > MZ_ZIP64_ECDL_TOTAL_NUMBER_OF_DISKS_OFS); > > -+ mz_uint64 zip64_cdir_total_entries = MZ_READ_LE64( > > -+ pZip64_end_of_central_dir + > MZ_ZIP64_ECDH_CDIR_TOTAL_ENTRIES_OFS); > > -+ mz_uint64 zip64_cdir_total_entries_on_this_disk = MZ_READ_LE64( > > -+ pZip64_end_of_central_dir + > MZ_ZIP64_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS); > > -+ mz_uint64 zip64_size_of_end_of_central_dir_record = MZ_READ_LE64( > > -+ pZip64_end_of_central_dir + MZ_ZIP64_ECDH_SIZE_OF_RECORD_OFS); > > -+ mz_uint64 zip64_size_of_central_directory = > > -+ MZ_READ_LE64(pZip64_end_of_central_dir + > MZ_ZIP64_ECDH_CDIR_SIZE_OFS); > > -+ > > -+ if (zip64_size_of_end_of_central_dir_record < > > -+ (MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE - 12)) > > -+ return mz_zip_set_error(pZip, > MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); > > -+ > > -+ if (zip64_total_num_of_disks != 1U) > > -+ return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK); > > -+ > > -+ /* Check for miniz's practical limits */ > > -+ if (zip64_cdir_total_entries > MZ_UINT32_MAX) > > -+ return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); > > -+ > > -+ pZip->m_total_files = (mz_uint32)zip64_cdir_total_entries; > > -+ > > -+ if (zip64_cdir_total_entries_on_this_disk > MZ_UINT32_MAX) > > -+ return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); > > -+ > > -+ cdir_entries_on_this_disk = > > -+ (mz_uint32)zip64_cdir_total_entries_on_this_disk; > > -+ > > -+ /* Check for miniz's current practical limits (sorry, this should > be enough > > -+ * for millions of files) */ > > -+ if (zip64_size_of_central_directory > MZ_UINT32_MAX) > > -+ return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_CDIR_SIZE); > > -+ > > -+ cdir_size = (mz_uint32)zip64_size_of_central_directory; > > -+ > > -+ num_this_disk = MZ_READ_LE32(pZip64_end_of_central_dir + > > -+ MZ_ZIP64_ECDH_NUM_THIS_DISK_OFS); > > -+ > > -+ cdir_disk_index = MZ_READ_LE32(pZip64_end_of_central_dir + > > -+ MZ_ZIP64_ECDH_NUM_DISK_CDIR_OFS); > > -+ > > -+ cdir_ofs = > > -+ MZ_READ_LE64(pZip64_end_of_central_dir + > MZ_ZIP64_ECDH_CDIR_OFS_OFS); > > -+ } > > -+ > > -+ if (pZip->m_total_files != cdir_entries_on_this_disk) > > -+ return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK); > > -+ > > - if (((num_this_disk | cdir_disk_index) != 0) && > > - ((num_this_disk != 1) || (cdir_disk_index != 1))) > > -- return MZ_FALSE; > > -+ return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK); > > - > > -- if ((cdir_size = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_SIZE_OFS)) < > > -- pZip->m_total_files * MZ_ZIP_CENTRAL_DIR_HEADER_SIZE) > > -- return MZ_FALSE; > > -+ if (cdir_size < pZip->m_total_files * MZ_ZIP_CENTRAL_DIR_HEADER_SIZE) > > -+ return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); > > - > > -- cdir_ofs = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_OFS_OFS); > > - if ((cdir_ofs + (mz_uint64)cdir_size) > pZip->m_archive_size) > > -- return MZ_FALSE; > > -+ return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); > > - > > - pZip->m_central_directory_file_ofs = cdir_ofs; > > - > > - if (pZip->m_total_files) { > > - mz_uint i, n; > > -- > > -- // Read the entire central directory into a heap block, and > allocate another > > -- // heap block to hold the unsorted central dir file record > offsets, and > > -- // another to hold the sorted indices. > > -+ /* Read the entire central directory into a heap block, and > allocate another > > -+ * heap block to hold the unsorted central dir file record > offsets, and > > -+ * possibly another to hold the sorted indices. */ > > - if ((!mz_zip_array_resize(pZip, &pZip->m_pState->m_central_dir, > cdir_size, > > - MZ_FALSE)) || > > - (!mz_zip_array_resize(pZip, > &pZip->m_pState->m_central_dir_offsets, > > - pZip->m_total_files, MZ_FALSE))) > > -- return MZ_FALSE; > > -+ return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); > > - > > - if (sort_central_dir) { > > - if (!mz_zip_array_resize(pZip, > > - > &pZip->m_pState->m_sorted_central_dir_offsets, > > - pZip->m_total_files, MZ_FALSE)) > > -- return MZ_FALSE; > > -+ return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); > > - } > > - > > - if (pZip->m_pRead(pZip->m_pIO_opaque, cdir_ofs, > > - pZip->m_pState->m_central_dir.m_p, > > - cdir_size) != cdir_size) > > -- return MZ_FALSE; > > -+ return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); > > - > > -- // Now create an index into the central directory file records, do > some > > -- // basic sanity checking on each record, and check for zip64 > entries (which > > -- // are not yet supported). > > -+ /* Now create an index into the central directory file records, do > some > > -+ * basic sanity checking on each record */ > > - p = (const mz_uint8 *)pZip->m_pState->m_central_dir.m_p; > > - for (n = cdir_size, i = 0; i < pZip->m_total_files; ++i) { > > -- mz_uint total_header_size, comp_size, decomp_size, disk_index; > > -+ mz_uint total_header_size, disk_index, bit_flags, filename_size, > > -+ ext_data_size; > > -+ mz_uint64 comp_size, decomp_size, local_header_ofs; > > -+ > > - if ((n < MZ_ZIP_CENTRAL_DIR_HEADER_SIZE) || > > - (MZ_READ_LE32(p) != MZ_ZIP_CENTRAL_DIR_HEADER_SIG)) > > -- return MZ_FALSE; > > -+ return mz_zip_set_error(pZip, > MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); > > -+ > > - MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir_offsets, > mz_uint32, > > - i) = > > - (mz_uint32)(p - (const mz_uint8 > *)pZip->m_pState->m_central_dir.m_p); > > -+ > > - if (sort_central_dir) > > - > MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_sorted_central_dir_offsets, > > - mz_uint32, i) = i; > > -+ > > - comp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS); > > - decomp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS); > > -- if (((!MZ_READ_LE32(p + MZ_ZIP_CDH_METHOD_OFS)) && > > -- (decomp_size != comp_size)) || > > -- (decomp_size && !comp_size) || (decomp_size == 0xFFFFFFFF) || > > -- (comp_size == 0xFFFFFFFF)) > > -- return MZ_FALSE; > > -+ local_header_ofs = MZ_READ_LE32(p + MZ_ZIP_CDH_LOCAL_HEADER_OFS); > > -+ filename_size = MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS); > > -+ ext_data_size = MZ_READ_LE16(p + MZ_ZIP_CDH_EXTRA_LEN_OFS); > > -+ > > -+ if ((!pZip->m_pState->m_zip64_has_extended_info_fields) && > > -+ (ext_data_size) && > > -+ (MZ_MAX(MZ_MAX(comp_size, decomp_size), local_header_ofs) == > > -+ MZ_UINT32_MAX)) { > > -+ /* Attempt to find zip64 extended information field in the > entry's extra > > -+ * data */ > > -+ mz_uint32 extra_size_remaining = ext_data_size; > > -+ > > -+ if (extra_size_remaining) { > > -+ const mz_uint8 *pExtra_data; > > -+ void *buf = NULL; > > -+ > > -+ if (MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + filename_size + > ext_data_size > > > -+ n) { > > -+ buf = MZ_MALLOC(ext_data_size); > > -+ if (buf == NULL) > > -+ return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); > > -+ > > -+ if (pZip->m_pRead(pZip->m_pIO_opaque, > > -+ cdir_ofs + > MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + > > -+ filename_size, > > -+ buf, ext_data_size) != ext_data_size) { > > -+ MZ_FREE(buf); > > -+ return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); > > -+ } > > -+ > > -+ pExtra_data = (mz_uint8 *)buf; > > -+ } else { > > -+ pExtra_data = p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + > filename_size; > > -+ } > > -+ > > -+ do { > > -+ mz_uint32 field_id; > > -+ mz_uint32 field_data_size; > > -+ > > -+ if (extra_size_remaining < (sizeof(mz_uint16) * 2)) { > > -+ MZ_FREE(buf); > > -+ return mz_zip_set_error(pZip, > MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); > > -+ } > > -+ > > -+ field_id = MZ_READ_LE16(pExtra_data); > > -+ field_data_size = MZ_READ_LE16(pExtra_data + > sizeof(mz_uint16)); > > -+ > > -+ if ((field_data_size + sizeof(mz_uint16) * 2) > > > -+ extra_size_remaining) { > > -+ MZ_FREE(buf); > > -+ return mz_zip_set_error(pZip, > MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); > > -+ } > > -+ > > -+ if (field_id == > MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID) { > > -+ /* Ok, the archive didn't have any zip64 headers but it > uses a > > -+ * zip64 extended information field so mark it as zip64 > anyway > > -+ * (this can occur with infozip's zip util when it reads > > -+ * compresses files from stdin). */ > > -+ pZip->m_pState->m_zip64 = MZ_TRUE; > > -+ pZip->m_pState->m_zip64_has_extended_info_fields = > MZ_TRUE; > > -+ break; > > -+ } > > -+ > > -+ pExtra_data += sizeof(mz_uint16) * 2 + field_data_size; > > -+ extra_size_remaining = > > -+ extra_size_remaining - sizeof(mz_uint16) * 2 - > field_data_size; > > -+ } while (extra_size_remaining); > > -+ > > -+ MZ_FREE(buf); > > -+ } > > -+ } > > -+ > > -+ /* I've seen archives that aren't marked as zip64 that uses > zip64 ext > > -+ * data, argh */ > > -+ if ((comp_size != MZ_UINT32_MAX) && (decomp_size != > MZ_UINT32_MAX)) { > > -+ if (((!MZ_READ_LE32(p + MZ_ZIP_CDH_METHOD_OFS)) && > > -+ (decomp_size != comp_size)) || > > -+ (decomp_size && !comp_size)) > > -+ return mz_zip_set_error(pZip, > MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); > > -+ } > > -+ > > - disk_index = MZ_READ_LE16(p + MZ_ZIP_CDH_DISK_START_OFS); > > -- if ((disk_index != num_this_disk) && (disk_index != 1)) > > -- return MZ_FALSE; > > -- if (((mz_uint64)MZ_READ_LE32(p + MZ_ZIP_CDH_LOCAL_HEADER_OFS) + > > -- MZ_ZIP_LOCAL_DIR_HEADER_SIZE + comp_size) > > pZip->m_archive_size) > > -- return MZ_FALSE; > > -+ if ((disk_index == MZ_UINT16_MAX) || > > -+ ((disk_index != num_this_disk) && (disk_index != 1))) > > -+ return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK); > > -+ > > -+ if (comp_size != MZ_UINT32_MAX) { > > -+ if (((mz_uint64)MZ_READ_LE32(p + MZ_ZIP_CDH_LOCAL_HEADER_OFS) + > > -+ MZ_ZIP_LOCAL_DIR_HEADER_SIZE + comp_size) > > pZip->m_archive_size) > > -+ return mz_zip_set_error(pZip, > MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); > > -+ } > > -+ > > -+ bit_flags = MZ_READ_LE16(p + MZ_ZIP_CDH_BIT_FLAG_OFS); > > -+ if (bit_flags & > MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_LOCAL_DIR_IS_MASKED) > > -+ return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_ENCRYPTION); > > -+ > > - if ((total_header_size = MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + > > - MZ_READ_LE16(p + > MZ_ZIP_CDH_FILENAME_LEN_OFS) + > > - MZ_READ_LE16(p + > MZ_ZIP_CDH_EXTRA_LEN_OFS) + > > - MZ_READ_LE16(p + > MZ_ZIP_CDH_COMMENT_LEN_OFS)) > > > - n) > > -- return MZ_FALSE; > > -+ return mz_zip_set_error(pZip, > MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); > > -+ > > - n -= total_header_size; > > - p += total_header_size; > > - } > > -diff --git a/contrib/zip/src/zip.c b/contrib/zip/src/zip.c > > -index ff3a8fe1..1abcfd8f 100644 > > ---- a/contrib/zip/src/zip.c > > -+++ b/contrib/zip/src/zip.c > > -@@ -24,7 +24,6 @@ > > - ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= > 'z')) && \ > > - (P)[1] == ':') > > - #define FILESYSTEM_PREFIX_LEN(P) (HAS_DEVICE(P) ? 2 : 0) > > --#define ISSLASH(C) ((C) == '/' || (C) == '\\') > > - > > - #else > > - > > -@@ -48,7 +47,7 @@ int symlink(const char *target, const char > *linkpath); // needed on Linux > > - #endif > > - > > - #ifndef ISSLASH > > --#define ISSLASH(C) ((C) == '/') > > -+#define ISSLASH(C) ((C) == '/' || (C) == '\\') > > - #endif > > - > > - #define CLEANUP(ptr) > \ > > -@@ -78,26 +77,34 @@ static const char *base_name(const char *name) { > > - return base; > > - } > > - > > --static int mkpath(const char *path) { > > -- char const *p; > > -+static int mkpath(char *path) { > > -+ char *p; > > - char npath[MAX_PATH + 1]; > > - int len = 0; > > - int has_device = HAS_DEVICE(path); > > - > > - memset(npath, 0, MAX_PATH + 1); > > -- > > --#ifdef _WIN32 > > -- // only on windows fix the path > > -- npath[0] = path[0]; > > -- npath[1] = path[1]; > > -- len = 2; > > --#endif // _WIN32 > > -- > > -+ if (has_device) { > > -+ // only on windows > > -+ npath[0] = path[0]; > > -+ npath[1] = path[1]; > > -+ len = 2; > > -+ } > > - for (p = path + len; *p && len < MAX_PATH; p++) { > > - if (ISSLASH(*p) && ((!has_device && len > 0) || (has_device && len > > 2))) { > > -- if (MKDIR(npath) == -1) > > -- if (errno != EEXIST) > > -+#if defined(_WIN32) || defined(__WIN32__) || defined(_MSC_VER) || > \ > > -+ defined(__MINGW32__) > > -+#else > > -+ if ('\\' == *p) { > > -+ *p = '/'; > > -+ } > > -+#endif > > -+ > > -+ if (MKDIR(npath) == -1) { > > -+ if (errno != EEXIST) { > > - return -1; > > -+ } > > -+ } > > - } > > - npath[len++] = *p; > > - } > > -@@ -279,7 +286,14 @@ int zip_entry_open(struct zip_t *zip, const char > *entryname) { > > - zip->entry.header_offset = zip->archive.m_archive_size; > > - memset(zip->entry.header, 0, MZ_ZIP_LOCAL_DIR_HEADER_SIZE * > sizeof(mz_uint8)); > > - zip->entry.method = 0; > > -+ > > -+ // UNIX or APPLE > > -+#if MZ_PLATFORM == 3 || MZ_PLATFORM == 19 > > -+ // regular file with rw-r--r-- persmissions > > -+ zip->entry.external_attr = (mz_uint32)(0100644) << 16; > > -+#else > > - zip->entry.external_attr = 0; > > -+#endif > > - > > - num_alignment_padding_bytes = > > - mz_zip_writer_compute_padding_needed_for_file_alignment(pzip); > > -@@ -660,7 +674,7 @@ ssize_t zip_entry_noallocread(struct zip_t *zip, > void *buf, size_t bufsize) { > > - } > > - > > - if (!mz_zip_reader_extract_to_mem_no_alloc(pzip, > (mz_uint)zip->entry.index, > > -- buf, bufsize, 0, NULL, 0)) { > > -+ buf, bufsize, 0, NULL, > 0)) { > > - return -1; > > - } > > - > > -@@ -670,10 +684,7 @@ ssize_t zip_entry_noallocread(struct zip_t *zip, > void *buf, size_t bufsize) { > > - int zip_entry_fread(struct zip_t *zip, const char *filename) { > > - mz_zip_archive *pzip = NULL; > > - mz_uint idx; > > --#if defined(_MSC_VER) > > --#else > > - mz_uint32 xattr = 0; > > --#endif > > - mz_zip_archive_file_stat info; > > - > > - if (!zip) { > > -@@ -875,12 +886,19 @@ int zip_extract(const char *zipname, const char > *dir, > > - goto out; > > - } > > - > > -- if ((((info.m_version_made_by >> 8) == 3) || > ((info.m_version_made_by >> 8) == 19)) // if zip is produced on Unix or > macOS (3 and 19 from section 4.4.2.2 of zip standard) > > -- && info.m_external_attr & (0x20 << 24)) { // and has sym link > attribute (0x80 is file, 0x40 is directory) > > -+ if ((((info.m_version_made_by >> 8) == 3) || > > -+ ((info.m_version_made_by >> 8) == > > -+ 19)) // if zip is produced on Unix or macOS (3 and 19 from > > -+ // section 4.4.2.2 of zip standard) > > -+ && info.m_external_attr & > > -+ (0x20 << 24)) { // and has sym link attribute (0x80 is > file, 0x40 > > -+ // is directory) > > - #if defined(_WIN32) || defined(__WIN32__) || defined(_MSC_VER) || > \ > > - defined(__MINGW32__) > > --#else > > -- if (info.m_uncomp_size > MAX_PATH || > !mz_zip_reader_extract_to_mem_no_alloc(&zip_archive, i, symlink_to, > MAX_PATH, 0, NULL, 0)) { > > -+#else > > -+ if (info.m_uncomp_size > MAX_PATH || > > -+ !mz_zip_reader_extract_to_mem_no_alloc(&zip_archive, i, > symlink_to, > > -+ MAX_PATH, 0, NULL, > 0)) { > > - goto out; > > - } > > - symlink_to[info.m_uncomp_size] = '\0'; > > -diff --git a/contrib/zip/src/zip.h b/contrib/zip/src/zip.h > > -index 5f39df50..a48d64d6 100644 > > ---- a/contrib/zip/src/zip.h > > -+++ b/contrib/zip/src/zip.h > > -@@ -20,241 +20,240 @@ extern "C" { > > - #endif > > - > > - #if !defined(_SSIZE_T_DEFINED) && !defined(_SSIZE_T_DEFINED_) && > \ > > -- !defined(_SSIZE_T) && !defined(_SSIZE_T_) && > !defined(__ssize_t_defined) > > --#define _SSIZE_T > > -+ !defined(__DEFINED_ssize_t) && !defined(__ssize_t_defined) && > \ > > -+ !defined(_SSIZE_T) && !defined(_SSIZE_T_) > > -+ > > - // 64-bit Windows is the only mainstream platform > > - // where sizeof(long) != sizeof(void*) > > - #ifdef _WIN64 > > --typedef long long ssize_t; /* byte count or error */ > > -+typedef long long ssize_t; /* byte count or error */ > > - #else > > --typedef long ssize_t; /* byte count or error */ > > -+typedef long ssize_t; /* byte count or error */ > > - #endif > > -+ > > -+#define _SSIZE_T_DEFINED > > -+#define _SSIZE_T_DEFINED_ > > -+#define __DEFINED_ssize_t > > -+#define __ssize_t_defined > > -+#define _SSIZE_T > > -+#define _SSIZE_T_ > > -+ > > - #endif > > - > > - #ifndef MAX_PATH > > - #define MAX_PATH 32767 /* # chars in a path name including NULL */ > > - #endif > > - > > -+/** > > -+ * @mainpage > > -+ * > > -+ * Documenation for @ref zip. > > -+ */ > > -+ > > -+/** > > -+ * @addtogroup zip > > -+ * @{ > > -+ */ > > -+ > > -+/** > > -+ * Default zip compression level. > > -+ */ > > -+ > > - #define ZIP_DEFAULT_COMPRESSION_LEVEL 6 > > - > > --/* > > -- This data structure is used throughout the library to represent zip > archive > > -- - forward declaration. > > --*/ > > -+/** > > -+ * @struct zip_t > > -+ * > > -+ * This data structure is used throughout the library to represent zip > archive - > > -+ * forward declaration. > > -+ */ > > - struct zip_t; > > - > > --/* > > -- Opens zip archive with compression level using the given mode. > > -- > > -- Args: > > -- zipname: zip archive file name. > > -- level: compression level (0-9 are the standard zlib-style levels). > > -- mode: file access mode. > > -- 'r': opens a file for reading/extracting (the file must > exists). > > -- 'w': creates an empty file for writing. > > -- 'a': appends to an existing archive. > > -- > > -- Returns: > > -- The zip archive handler or NULL on error > > --*/ > > -+/** > > -+ * Opens zip archive with compression level using the given mode. > > -+ * > > -+ * @param zipname zip archive file name. > > -+ * @param level compression level (0-9 are the standard zlib-style > levels). > > -+ * @param mode file access mode. > > -+ * - 'r': opens a file for reading/extracting (the file must > exists). > > -+ * - 'w': creates an empty file for writing. > > -+ * - 'a': appends to an existing archive. > > -+ * > > -+ * @return the zip archive handler or NULL on error > > -+ */ > > - extern struct zip_t *zip_open(const char *zipname, int level, char > mode); > > - > > --/* > > -- Closes the zip archive, releases resources - always finalize. > > -- > > -- Args: > > -- zip: zip archive handler. > > --*/ > > -+/** > > -+ * Closes the zip archive, releases resources - always finalize. > > -+ * > > -+ * @param zip zip archive handler. > > -+ */ > > - extern void zip_close(struct zip_t *zip); > > - > > --/* > > -- Opens an entry by name in the zip archive. > > -- For zip archive opened in 'w' or 'a' mode the function will append > > -- a new entry. In readonly mode the function tries to locate the entry > > -- in global dictionary. > > -- > > -- Args: > > -- zip: zip archive handler. > > -- entryname: an entry name in local dictionary. > > -- > > -- Returns: > > -- The return code - 0 on success, negative number (< 0) on error. > > --*/ > > -+/** > > -+ * Opens an entry by name in the zip archive. > > -+ * > > -+ * For zip archive opened in 'w' or 'a' mode the function will append > > -+ * a new entry. In readonly mode the function tries to locate the entry > > -+ * in global dictionary. > > -+ * > > -+ * @param zip zip archive handler. > > -+ * @param entryname an entry name in local dictionary. > > -+ * > > -+ * @return the return code - 0 on success, negative number (< 0) on > error. > > -+ */ > > - extern int zip_entry_open(struct zip_t *zip, const char *entryname); > > - > > --/* > > -- Opens a new entry by index in the zip archive. > > -- This function is only valid if zip archive was opened in 'r' > (readonly) mode. > > -- > > -- Args: > > -- zip: zip archive handler. > > -- index: index in local dictionary. > > -- > > -- Returns: > > -- The return code - 0 on success, negative number (< 0) on error. > > --*/ > > -+/** > > -+ * Opens a new entry by index in the zip archive. > > -+ * > > -+ * This function is only valid if zip archive was opened in 'r' > (readonly) mode. > > -+ * > > -+ * @param zip zip archive handler. > > -+ * @param index index in local dictionary. > > -+ * > > -+ * @return the return code - 0 on success, negative number (< 0) on > error. > > -+ */ > > - extern int zip_entry_openbyindex(struct zip_t *zip, int index); > > - > > --/* > > -- Closes a zip entry, flushes buffer and releases resources. > > -- > > -- Args: > > -- zip: zip archive handler. > > -- > > -- Returns: > > -- The return code - 0 on success, negative number (< 0) on error. > > --*/ > > -+/** > > -+ * Closes a zip entry, flushes buffer and releases resources. > > -+ * > > -+ * @param zip zip archive handler. > > -+ * > > -+ * @return the return code - 0 on success, negative number (< 0) on > error. > > -+ */ > > - extern int zip_entry_close(struct zip_t *zip); > > - > > --/* > > -- Returns a local name of the current zip entry. > > -- The main difference between user's entry name and local entry name > > -- is optional relative path. > > -- Following .ZIP File Format Specification - the path stored MUST not > contain > > -- a drive or device letter, or a leading slash. > > -- All slashes MUST be forward slashes '/' as opposed to backwards > slashes '\' > > -- for compatibility with Amiga and UNIX file systems etc. > > -- > > -- Args: > > -- zip: zip archive handler. > > -- > > -- Returns: > > -- The pointer to the current zip entry name, or NULL on error. > > --*/ > > -+/** > > -+ * Returns a local name of the current zip entry. > > -+ * > > -+ * The main difference between user's entry name and local entry name > > -+ * is optional relative path. > > -+ * Following .ZIP File Format Specification - the path stored MUST not > contain > > -+ * a drive or device letter, or a leading slash. > > -+ * All slashes MUST be forward slashes '/' as opposed to backwards > slashes '\' > > -+ * for compatibility with Amiga and UNIX file systems etc. > > -+ * > > -+ * @param zip: zip archive handler. > > -+ * > > -+ * @return the pointer to the current zip entry name, or NULL on error. > > -+ */ > > - extern const char *zip_entry_name(struct zip_t *zip); > > - > > --/* > > -- Returns an index of the current zip entry. > > -- > > -- Args: > > -- zip: zip archive handler. > > -- > > -- Returns: > > -- The index on success, negative number (< 0) on error. > > --*/ > > -+/** > > -+ * Returns an index of the current zip entry. > > -+ * > > -+ * @param zip zip archive handler. > > -+ * > > -+ * @return the index on success, negative number (< 0) on error. > > -+ */ > > - extern int zip_entry_index(struct zip_t *zip); > > - > > --/* > > -- Determines if the current zip entry is a directory entry. > > -- > > -- Args: > > -- zip: zip archive handler. > > -- > > -- Returns: > > -- The return code - 1 (true), 0 (false), negative number (< 0) on > error. > > --*/ > > -+/** > > -+ * Determines if the current zip entry is a directory entry. > > -+ * > > -+ * @param zip zip archive handler. > > -+ * > > -+ * @return the return code - 1 (true), 0 (false), negative number (< > 0) on > > -+ * error. > > -+ */ > > - extern int zip_entry_isdir(struct zip_t *zip); > > - > > --/* > > -- Returns an uncompressed size of the current zip entry. > > -- > > -- Args: > > -- zip: zip archive handler. > > -- > > -- Returns: > > -- The uncompressed size in bytes. > > --*/ > > -+/** > > -+ * Returns an uncompressed size of the current zip entry. > > -+ * > > -+ * @param zip zip archive handler. > > -+ * > > -+ * @return the uncompressed size in bytes. > > -+ */ > > - extern unsigned long long zip_entry_size(struct zip_t *zip); > > - > > --/* > > -- Returns CRC-32 checksum of the current zip entry. > > -- > > -- Args: > > -- zip: zip archive handler. > > -- > > -- Returns: > > -- The CRC-32 checksum. > > --*/ > > -+/** > > -+ * Returns CRC-32 checksum of the current zip entry. > > -+ * > > -+ * @param zip zip archive handler. > > -+ * > > -+ * @return the CRC-32 checksum. > > -+ */ > > - extern unsigned int zip_entry_crc32(struct zip_t *zip); > > - > > --/* > > -- Compresses an input buffer for the current zip entry. > > -- > > -- Args: > > -- zip: zip archive handler. > > -- buf: input buffer. > > -- bufsize: input buffer size (in bytes). > > -- > > -- Returns: > > -- The return code - 0 on success, negative number (< 0) on error. > > --*/ > > -+/** > > -+ * Compresses an input buffer for the current zip entry. > > -+ * > > -+ * @param zip zip archive handler. > > -+ * @param buf input buffer. > > -+ * @param bufsize input buffer size (in bytes). > > -+ * > > -+ * @return the return code - 0 on success, negative number (< 0) on > error. > > -+ */ > > - extern int zip_entry_write(struct zip_t *zip, const void *buf, size_t > bufsize); > > - > > --/* > > -- Compresses a file for the current zip entry. > > -- > > -- Args: > > -- zip: zip archive handler. > > -- filename: input file. > > -- > > -- Returns: > > -- The return code - 0 on success, negative number (< 0) on error. > > --*/ > > -+/** > > -+ * Compresses a file for the current zip entry. > > -+ * > > -+ * @param zip zip archive handler. > > -+ * @param filename input file. > > -+ * > > -+ * @return the return code - 0 on success, negative number (< 0) on > error. > > -+ */ > > - extern int zip_entry_fwrite(struct zip_t *zip, const char *filename); > > - > > --/* > > -- Extracts the current zip entry into output buffer. > > -- The function allocates sufficient memory for a output buffer. > > -- > > -- Args: > > -- zip: zip archive handler. > > -- buf: output buffer. > > -- bufsize: output buffer size (in bytes). > > -- > > -- Note: > > -- - remember to release memory allocated for a output buffer. > > -- - for large entries, please take a look at zip_entry_extract > function. > > -- > > -- Returns: > > -- The return code - the number of bytes actually read on success. > > -- Otherwise a -1 on error. > > --*/ > > -+/** > > -+ * Extracts the current zip entry into output buffer. > > -+ * > > -+ * The function allocates sufficient memory for a output buffer. > > -+ * > > -+ * @param zip zip archive handler. > > -+ * @param buf output buffer. > > -+ * @param bufsize output buffer size (in bytes). > > -+ * > > -+ * @note remember to release memory allocated for a output buffer. > > -+ * for large entries, please take a look at zip_entry_extract > function. > > -+ * > > -+ * @return the return code - the number of bytes actually read on > success. > > -+ * Otherwise a -1 on error. > > -+ */ > > - extern ssize_t zip_entry_read(struct zip_t *zip, void **buf, size_t > *bufsize); > > - > > --/* > > -- Extracts the current zip entry into a memory buffer using no memory > > -- allocation. > > -- > > -- Args: > > -- zip: zip archive handler. > > -- buf: preallocated output buffer. > > -- bufsize: output buffer size (in bytes). > > -- > > -- Note: > > -- - ensure supplied output buffer is large enough. > > -- - zip_entry_size function (returns uncompressed size for the > current entry) > > -- can be handy to estimate how big buffer is needed. > > -- - for large entries, please take a look at zip_entry_extract > function. > > -- > > -- Returns: > > -- The return code - the number of bytes actually read on success. > > -- Otherwise a -1 on error (e.g. bufsize is not large enough). > > --*/ > > --extern ssize_t zip_entry_noallocread(struct zip_t *zip, void *buf, > size_t bufsize); > > -- > > --/* > > -- Extracts the current zip entry into output file. > > -- > > -- Args: > > -- zip: zip archive handler. > > -- filename: output file. > > -- > > -- Returns: > > -- The return code - 0 on success, negative number (< 0) on error. > > --*/ > > -+/** > > -+ * Extracts the current zip entry into a memory buffer using no memory > > -+ * allocation. > > -+ * > > -+ * @param zip zip archive handler. > > -+ * @param buf preallocated output buffer. > > -+ * @param bufsize output buffer size (in bytes). > > -+ * > > -+ * @note ensure supplied output buffer is large enough. > > -+ * zip_entry_size function (returns uncompressed size for the > current > > -+ * entry) can be handy to estimate how big buffer is needed. for > large > > -+ * entries, please take a look at zip_entry_extract function. > > -+ * > > -+ * @return the return code - the number of bytes actually read on > success. > > -+ * Otherwise a -1 on error (e.g. bufsize is not large enough). > > -+ */ > > -+extern ssize_t zip_entry_noallocread(struct zip_t *zip, void *buf, > > -+ size_t bufsize); > > -+ > > -+/** > > -+ * Extracts the current zip entry into output file. > > -+ * > > -+ * @param zip zip archive handler. > > -+ * @param filename output file. > > -+ * > > -+ * @return the return code - 0 on success, negative number (< 0) on > error. > > -+ */ > > - extern int zip_entry_fread(struct zip_t *zip, const char *filename); > > - > > --/* > > -- Extracts the current zip entry using a callback function > (on_extract). > > -- > > -- Args: > > -- zip: zip archive handler. > > -- on_extract: callback function. > > -- arg: opaque pointer (optional argument, > > -- which you can pass to the on_extract callback) > > -- > > -- Returns: > > -- The return code - 0 on success, negative number (< 0) on error. > > -+/** > > -+ * Extracts the current zip entry using a callback function > (on_extract). > > -+ * > > -+ * @param zip zip archive handler. > > -+ * @param on_extract callback function. > > -+ * @param arg opaque pointer (optional argument, which you can pass to > the > > -+ * on_extract callback) > > -+ * > > -+ * @return the return code - 0 on success, negative number (< 0) on > error. > > - */ > > - extern int > > - zip_entry_extract(struct zip_t *zip, > > -@@ -262,53 +261,49 @@ zip_entry_extract(struct zip_t *zip, > > - const void *data, size_t size), > > - void *arg); > > - > > --/* > > -- Returns the number of all entries (files and directories) in the zip > archive. > > -- > > -- Args: > > -- zip: zip archive handler. > > -- > > -- Returns: > > -- The return code - the number of entries on success, > > -- negative number (< 0) on error. > > --*/ > > -+/** > > -+ * Returns the number of all entries (files and directories) in the > zip archive. > > -+ * > > -+ * @param zip zip archive handler. > > -+ * > > -+ * @return the return code - the number of entries on success, > negative number > > -+ * (< 0) on error. > > -+ */ > > - extern int zip_total_entries(struct zip_t *zip); > > - > > --/* > > -- Creates a new archive and puts files into a single zip archive. > > -- > > -- Args: > > -- zipname: zip archive file. > > -- filenames: input files. > > -- len: number of input files. > > -- > > -- Returns: > > -- The return code - 0 on success, negative number (< 0) on error. > > --*/ > > -+/** > > -+ * Creates a new archive and puts files into a single zip archive. > > -+ * > > -+ * @param zipname zip archive file. > > -+ * @param filenames input files. > > -+ * @param len: number of input files. > > -+ * > > -+ * @return the return code - 0 on success, negative number (< 0) on > error. > > -+ */ > > - extern int zip_create(const char *zipname, const char *filenames[], > size_t len); > > - > > --/* > > -- Extracts a zip archive file into directory. > > -- > > -- If on_extract_entry is not NULL, the callback will be called after > > -- successfully extracted each zip entry. > > -- Returning a negative value from the callback will cause abort and > return an > > -- error. The last argument (void *arg) is optional, which you can use > to pass > > -- data to the on_extract_entry callback. > > -- > > -- Args: > > -- zipname: zip archive file. > > -- dir: output directory. > > -- on_extract_entry: on extract callback. > > -- arg: opaque pointer. > > -- > > -- Returns: > > -- The return code - 0 on success, negative number (< 0) on error. > > --*/ > > -+/** > > -+ * Extracts a zip archive file into directory. > > -+ * > > -+ * If on_extract_entry is not NULL, the callback will be called after > > -+ * successfully extracted each zip entry. > > -+ * Returning a negative value from the callback will cause abort and > return an > > -+ * error. The last argument (void *arg) is optional, which you can use > to pass > > -+ * data to the on_extract_entry callback. > > -+ * > > -+ * @param zipname zip archive file. > > -+ * @param dir output directory. > > -+ * @param on_extract_entry on extract callback. > > -+ * @param arg opaque pointer. > > -+ * > > -+ * @return the return code - 0 on success, negative number (< 0) on > error. > > -+ */ > > - extern int zip_extract(const char *zipname, const char *dir, > > - int (*on_extract_entry)(const char *filename, > void *arg), > > - void *arg); > > - > > -+/** @} */ > > -+ > > - #ifdef __cplusplus > > - } > > - #endif > > -diff --git a/contrib/zip/test/CMakeLists.txt > b/contrib/zip/test/CMakeLists.txt > > -index 9b2a8db1..cc060b00 100644 > > ---- a/contrib/zip/test/CMakeLists.txt > > -+++ b/contrib/zip/test/CMakeLists.txt > > -@@ -1,19 +1,16 @@ > > - cmake_minimum_required(VERSION 2.8) > > - > > --if ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" OR > "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_C_COMPILER_ID}" > STREQUAL "AppleClang") > > -- if(ENABLE_COVERAGE) > > -- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g ") > > -- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0") > > -- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs") > > -- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ftest-coverage") > > -- set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage") > > -- endif() > > --endif () > > -- > > - # test > > --include_directories(../src) > > --add_executable(test.exe test.c ../src/zip.c) > > --add_executable(test_miniz.exe test_miniz.c) > > -+set(test_out test.out) > > -+set(test_miniz_out test_miniz.out) > > -+ > > -+add_executable(${test_out} test.c) > > -+target_link_libraries(${test_out} zip) > > -+add_executable(${test_miniz_out} test_miniz.c) > > -+target_link_libraries(${test_miniz_out} zip) > > -+ > > -+add_test(NAME ${test_out} COMMAND ${test_out}) > > -+add_test(NAME ${test_miniz_out} COMMAND ${test_miniz_out}) > > - > > --add_test(NAME test COMMAND test.exe) > > --add_test(NAME test_miniz COMMAND test_miniz.exe) > > -+set(test_out ${test_out} PARENT_SCOPE) > > -+set(test_miniz_out ${test_miniz_out} PARENT_SCOPE) > > -diff --git a/contrib/zip/test/test.c b/contrib/zip/test/test.c > > -index 45443053..a9b2ddab 100644 > > ---- a/contrib/zip/test/test.c > > -+++ b/contrib/zip/test/test.c > > -@@ -29,6 +29,8 @@ > > - #define XFILE "7.txt\0" > > - #define XMODE 0100777 > > - > > -+#define UNIXMODE 0100644 > > -+ > > - #define UNUSED(x) (void)x > > - > > - static int total_entries = 0; > > -@@ -102,7 +104,8 @@ static void test_read(void) { > > - assert(0 == zip_entry_close(zip)); > > - free(buf); > > - buf = NULL; > > -- > > -+ bufsize = 0; > > -+ > > - assert(0 == zip_entry_open(zip, "test/test-2.txt")); > > - assert(strlen(TESTDATA2) == zip_entry_size(zip)); > > - assert(CRC32DATA2 == zip_entry_crc32(zip)); > > -@@ -131,7 +134,8 @@ static void test_read(void) { > > - assert(0 == zip_entry_close(zip)); > > - free(buf); > > - buf = NULL; > > -- > > -+ bufsize = 0; > > -+ > > - buftmp = strlen(TESTDATA1); > > - buf = calloc(buftmp, sizeof(char)); > > - assert(0 == zip_entry_open(zip, "test/test-1.txt")); > > -@@ -433,6 +437,35 @@ static void test_mtime(void) { > > - remove(ZIPNAME); > > - } > > - > > -+static void test_unix_permissions(void) { > > -+#if defined(_WIN64) || defined(_WIN32) || defined(__WIN32__) > > -+#else > > -+ // UNIX or APPLE > > -+ struct MZ_FILE_STAT_STRUCT file_stats; > > -+ > > -+ remove(ZIPNAME); > > -+ > > -+ struct zip_t *zip = zip_open(ZIPNAME, ZIP_DEFAULT_COMPRESSION_LEVEL, > 'w'); > > -+ assert(zip != NULL); > > -+ > > -+ assert(0 == zip_entry_open(zip, RFILE)); > > -+ assert(0 == zip_entry_write(zip, TESTDATA1, strlen(TESTDATA1))); > > -+ assert(0 == zip_entry_close(zip)); > > -+ > > -+ zip_close(zip); > > -+ > > -+ remove(RFILE); > > -+ > > -+ assert(0 == zip_extract(ZIPNAME, ".", NULL, NULL)); > > -+ > > -+ assert(0 == MZ_FILE_STAT(RFILE, &file_stats)); > > -+ assert(UNIXMODE == file_stats.st_mode); > > -+ > > -+ remove(RFILE); > > -+ remove(ZIPNAME); > > -+#endif > > -+} > > -+ > > - int main(int argc, char *argv[]) { > > - UNUSED(argc); > > - UNUSED(argv); > > -@@ -453,6 +486,7 @@ int main(int argc, char *argv[]) { > > - test_write_permissions(); > > - test_exe_permissions(); > > - test_mtime(); > > -+ test_unix_permissions(); > > - > > - remove(ZIPNAME); > > - return 0; > > -diff --git a/contrib/zip/test/test_miniz.c > b/contrib/zip/test/test_miniz.c > > -index ebc0564d..babcaecd 100644 > > ---- a/contrib/zip/test/test_miniz.c > > -+++ b/contrib/zip/test/test_miniz.c > > -@@ -23,16 +23,39 @@ int main(int argc, char *argv[]) { > > - uint step = 0; > > - int cmp_status; > > - uLong src_len = (uLong)strlen(s_pStr); > > -- uLong cmp_len = compressBound(src_len); > > - uLong uncomp_len = src_len; > > -+ uLong cmp_len; > > - uint8 *pCmp, *pUncomp; > > -+ size_t sz; > > - uint total_succeeded = 0; > > - (void)argc, (void)argv; > > - > > - printf("miniz.c version: %s\n", MZ_VERSION); > > - > > - do { > > -+ pCmp = (uint8 *)tdefl_compress_mem_to_heap(s_pStr, src_len, > &cmp_len, 0); > > -+ if (!pCmp) { > > -+ printf("tdefl_compress_mem_to_heap failed\n"); > > -+ return EXIT_FAILURE; > > -+ } > > -+ if (src_len <= cmp_len) { > > -+ printf("tdefl_compress_mem_to_heap failed: from %u to %u > bytes\n", > > -+ (mz_uint32)uncomp_len, (mz_uint32)cmp_len); > > -+ free(pCmp); > > -+ return EXIT_FAILURE; > > -+ } > > -+ > > -+ sz = tdefl_compress_mem_to_mem(pCmp, cmp_len, s_pStr, src_len, 0); > > -+ if (sz != cmp_len) { > > -+ printf("tdefl_compress_mem_to_mem failed: expected %u, got %u\n", > > -+ (mz_uint32)cmp_len, (mz_uint32)sz); > > -+ free(pCmp); > > -+ return EXIT_FAILURE; > > -+ } > > -+ > > - // Allocate buffers to hold compressed and uncompressed data. > > -+ free(pCmp); > > -+ cmp_len = compressBound(src_len); > > - pCmp = (mz_uint8 *)malloc((size_t)cmp_len); > > - pUncomp = (mz_uint8 *)malloc((size_t)src_len); > > - if ((!pCmp) || (!pUncomp)) { > > diff --git > a/meta/recipes-graphics/vulkan/assimp/use-GNUInstallDirs-where-possible.patch > b/meta/recipes-graphics/vulkan/assimp/use-GNUInstallDirs-where-possible.patch > > deleted file mode 100644 > > index e4f5b9ccbd..0000000000 > > --- > a/meta/recipes-graphics/vulkan/assimp/use-GNUInstallDirs-where-possible.patch > > +++ /dev/null > > @@ -1,257 +0,0 @@ > > -From cbf94fd62ff831879d10f99aa7766d391ae8a9b7 Mon Sep 17 00:00:00 2001 > > -From: =?UTF-8?q?Victor=20Matar=C3=A9?= <matare@fh-aachen.de> > > -Date: Tue, 31 Mar 2020 21:30:07 +0200 > > -Subject: [PATCH] use GNUInstallDirs where possible > > - > > -Emulate the CMAKE_INSTALL_FULL_* variables on non-Unix systems and > > -disable redefining FHS-mandated install locations via user-editable > > -ASSIMP_*_INSTALL_DIR variables. Instead, if it REALLY proves necessary, > > -Unix users can edit the advanced, canonical CMAKE_INSTALL_* variables. > > ---- > > - CMakeLists.txt | 36 ++++++++++++++++++++++------------ > > - assimp.pc.in | 6 ++---- > > - assimpTargets-debug.cmake.in | 20 +++++++++---------- > > - assimpTargets-release.cmake.in | 18 ++++++++--------- > > - assimpTargets.cmake.in | 15 +------------- > > - 5 files changed, 45 insertions(+), 50 deletions(-) > > - > > -Upstream-Status: Backport > > -Comment: Additionally remove setting of ASSIMP_LIBRARY_DIRS, > ASSIMP_INCLUDE_DIRS > > - and INTERFACE_INCLUDE_DIRECTORIES as default cross compile > paths are enough > > - and setting them manually adds non-existing paths to CMake > modules > > - > > -Signed-off-by: Ranjitsinh Rathod <ranjitsinh.rathod@kpit.com> > > - > > -diff --git a/CMakeLists.txt b/CMakeLists.txt > > -index dcafb649f5..c23c0df33e 100644 > > ---- a/CMakeLists.txt > > -+++ b/CMakeLists.txt > > -@@ -230,11 +230,6 @@ SET(LIBASSIMP-DEV_COMPONENT > "libassimp${ASSIMP_VERSION_MAJOR}.${ASSIMP_VERSION_M > > - SET(CPACK_COMPONENTS_ALL assimp-bin ${LIBASSIMP_COMPONENT} > ${LIBASSIMP-DEV_COMPONENT} assimp-dev) > > - SET(ASSIMP_LIBRARY_SUFFIX "" CACHE STRING "Suffix to append to library > names") > > - > > --IF( UNIX ) > > -- # Use GNUInstallDirs for Unix predefined directories > > -- INCLUDE(GNUInstallDirs) > > --ENDIF( UNIX ) > > -- > > - # Grouped compiler settings > > - IF ((CMAKE_C_COMPILER_ID MATCHES "GNU") AND NOT > CMAKE_COMPILER_IS_MINGW) > > - IF(NOT HUNTER_ENABLED) > > -@@ -329,14 +324,6 @@ IF ( CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR ) > > - SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_HOME_DIRECTORY}/bin" ) > > - ENDIF ( CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR ) > > - > > --# Cache these to allow the user to override them manually. > > --SET( ASSIMP_LIB_INSTALL_DIR "lib" CACHE STRING > > -- "Path the built library files are installed to." ) > > --SET( ASSIMP_INCLUDE_INSTALL_DIR "include" CACHE STRING > > -- "Path the header files are installed to." ) > > --SET( ASSIMP_BIN_INSTALL_DIR "bin" CACHE STRING > > -- "Path the tool executables are installed to." ) > > -- > > - get_cmake_property(is_multi_config GENERATOR_IS_MULTI_CONFIG) > > - > > - IF (INJECT_DEBUG_POSTFIX AND (is_multi_config OR CMAKE_BUILD_TYPE > STREQUAL "Debug")) > > -@@ -391,6 +378,29 @@ IF(HUNTER_ENABLED) > > - ) > > - ELSE(HUNTER_ENABLED) > > - # cmake configuration files > > -+ > > -+ IF( UNIX ) > > -+ # Use GNUInstallDirs for Unix predefined directories > > -+ INCLUDE(GNUInstallDirs) > > -+ > > -+ SET( ASSIMP_LIB_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR}) > > -+ SET( ASSIMP_INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR}) > > -+ SET( ASSIMP_BIN_INSTALL_DIR ${CMAKE_INSTALL_BINDIR}) > > -+ ELSE( UNIX ) > > -+ # Cache these to allow the user to override them on non-Unix > platforms > > -+ SET( ASSIMP_LIB_INSTALL_DIR "lib" CACHE STRING > > -+ "Path the built library files are installed to." ) > > -+ SET( ASSIMP_INCLUDE_INSTALL_DIR "include" CACHE STRING > > -+ "Path the header files are installed to." ) > > -+ SET( ASSIMP_BIN_INSTALL_DIR "bin" CACHE STRING > > -+ "Path the tool executables are installed to." ) > > -+ > > -+ SET(CMAKE_INSTALL_FULL_INCLUDEDIR > ${CMAKE_INSTALL_PREFIX}/${ASSIMP_INCLUDE_INSTALL_DIR}) > > -+ SET(CMAKE_INSTALL_FULL_LIBDIR > ${CMAKE_INSTALL_PREFIX}/${ASSIMP_LIB_INSTALL_DIR}) > > -+ SET(CMAKE_INSTALL_FULL_BINDIR > ${CMAKE_INSTALL_PREFIX}/${ASSIMP_BIN_INSTALL_DIR}) > > -+ ENDIF( UNIX ) > > -+ > > -+ > > - CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/assimp-config.cmake.in" > "${CMAKE_CURRENT_BINARY_DIR}/assimp-config.cmake" @ONLY IMMEDIATE) > > - CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/assimpTargets.cmake.in" > "${CMAKE_CURRENT_BINARY_DIR}/assimpTargets.cmake" @ONLY IMMEDIATE) > > - IF (is_multi_config) > > -diff --git a/assimp.pc.in b/assimp.pc.in > > -index c659e19f2c..555a3a1d3b 100644 > > ---- a/assimp.pc.in > > -+++ b/assimp.pc.in > > -@@ -1,7 +1,5 @@ > > --prefix=@CMAKE_INSTALL_PREFIX@ > > --exec_prefix=@CMAKE_INSTALL_PREFIX@/ > > --libdir=@CMAKE_INSTALL_PREFIX@/@ASSIMP_LIB_INSTALL_DIR@ > > --includedir=@CMAKE_INSTALL_PREFIX@ > /../include/@ASSIMP_INCLUDE_INSTALL_DIR@ > > -+libdir=@CMAKE_INSTALL_FULL_LIBDIR@ > > -+includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@ > > - > > - Name: @CMAKE_PROJECT_NAME@ > > - Description: Import various well-known 3D model formats in an uniform > manner. > > -diff --git a/assimpTargets-debug.cmake.in b/ > assimpTargets-debug.cmake.in > > -index 1ebe2a6081..f5034c9349 100644 > > ---- a/assimpTargets-debug.cmake.in > > -+++ b/assimpTargets-debug.cmake.in > > -@@ -42,22 +42,22 @@ if(MSVC) > > - # Import target "assimp::assimp" for configuration "Debug" > > - set_property(TARGET assimp::assimp APPEND PROPERTY > IMPORTED_CONFIGURATIONS DEBUG) > > - set_target_properties(assimp::assimp PROPERTIES > > -- IMPORTED_IMPLIB_DEBUG > "${_IMPORT_PREFIX}/lib/${importLibraryName}" > > -- IMPORTED_LOCATION_DEBUG > "${_IMPORT_PREFIX}/bin/${sharedLibraryName}" > > -+ IMPORTED_IMPLIB_DEBUG "@CMAKE_INSTALL_FULL_LIBDIR@ > /${importLibraryName}" > > -+ IMPORTED_LOCATION_DEBUG "@CMAKE_INSTALL_FULL_BINDIR@ > /${sharedLibraryName}" > > - ) > > - list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp ) > > -- list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp > "${_IMPORT_PREFIX}/lib/${importLibraryName}") > > -- list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp > "${_IMPORT_PREFIX}/bin/${sharedLibraryName}" ) > > -+ list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp > "@CMAKE_INSTALL_FULL_LIBDIR@/${importLibraryName}") > > -+ list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp > "@CMAKE_INSTALL_FULL_BINDIR@/${sharedLibraryName}" ) > > - else() > > - set(staticLibraryName > "assimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_DEBUG_POSTFIX > @@CMAKE_STATIC_LIBRARY_SUFFIX@") > > - > > - # Import target "assimp::assimp" for configuration "Debug" > > - set_property(TARGET assimp::assimp APPEND PROPERTY > IMPORTED_CONFIGURATIONS DEBUG) > > - set_target_properties(assimp::assimp PROPERTIES > > -- IMPORTED_LOCATION_DEBUG > "${_IMPORT_PREFIX}/lib/${staticLibraryName}" > > -+ IMPORTED_LOCATION_DEBUG "@CMAKE_INSTALL_FULL_LIBDIR@ > /${staticLibraryName}" > > - ) > > - list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp ) > > -- list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp > "${_IMPORT_PREFIX}/lib/${staticLibraryName}") > > -+ list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp > "@CMAKE_INSTALL_FULL_LIBDIR@/${staticLibraryName}") > > - endif() > > - > > - else() > > -@@ -66,17 +66,17 @@ else() > > - set(sharedLibraryName > "libassimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_DEBUG_POSTFIX > @@CMAKE_SHARED_LIBRARY_SUFFIX@.@ASSIMP_VERSION_MAJOR@") > > - set_target_properties(assimp::assimp PROPERTIES > > - IMPORTED_SONAME_DEBUG "${sharedLibraryName}" > > -- IMPORTED_LOCATION_DEBUG > "${_IMPORT_PREFIX}/lib/${sharedLibraryName}" > > -+ IMPORTED_LOCATION_DEBUG "@CMAKE_INSTALL_FULL_LIBDIR@ > /${sharedLibraryName}" > > - ) > > - list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp ) > > -- list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp > "${_IMPORT_PREFIX}/lib/${sharedLibraryName}" ) > > -+ list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp > "@CMAKE_INSTALL_FULL_LIBDIR@/${sharedLibraryName}" ) > > - else() > > - set(staticLibraryName > "libassimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_DEBUG_POSTFIX > @@CMAKE_STATIC_LIBRARY_SUFFIX@") > > - set_target_properties(assimp::assimp PROPERTIES > > -- IMPORTED_LOCATION_DEBUG > "${_IMPORT_PREFIX}/lib/${staticLibraryName}" > > -+ IMPORTED_LOCATION_DEBUG "@CMAKE_INSTALL_FULL_LIBDIR@ > /${staticLibraryName}" > > - ) > > - list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp ) > > -- list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp > "${_IMPORT_PREFIX}/lib/${staticLibraryName}" ) > > -+ list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp > "@CMAKE_INSTALL_FULL_LIBDIR@/${staticLibraryName}" ) > > - endif() > > - endif() > > - > > -diff --git a/assimpTargets-release.cmake.in b/ > assimpTargets-release.cmake.in > > -index f3db8f12cd..a416e8899b 100644 > > ---- a/assimpTargets-release.cmake.in > > -+++ b/assimpTargets-release.cmake.in > > -@@ -42,12 +42,12 @@ if(MSVC) > > - # Import target "assimp::assimp" for configuration "Release" > > - set_property(TARGET assimp::assimp APPEND PROPERTY > IMPORTED_CONFIGURATIONS RELEASE) > > - set_target_properties(assimp::assimp PROPERTIES > > -- IMPORTED_IMPLIB_RELEASE > "${_IMPORT_PREFIX}/lib/${importLibraryName}" > > -- IMPORTED_LOCATION_RELEASE > "${_IMPORT_PREFIX}/bin/${sharedLibraryName}" > > -+ IMPORTED_IMPLIB_RELEASE "@CMAKE_INSTALL_FULL_LIBDIR@ > /${importLibraryName}" > > -+ IMPORTED_LOCATION_RELEASE "@CMAKE_INSTALL_FULL_BINDIR@ > /${sharedLibraryName}" > > - ) > > - list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp ) > > -- list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp > "${_IMPORT_PREFIX}/lib/${importLibraryName}") > > -- list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp > "${_IMPORT_PREFIX}/bin/${sharedLibraryName}" ) > > -+ list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp > "@CMAKE_INSTALL_FULL_LIBDIR@/${importLibraryName}") > > -+ list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp > "@CMAKE_INSTALL_FULL_BINDIR@/${sharedLibraryName}" ) > > - else() > > - set(staticLibraryName > "assimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_STATIC_LIBRARY_SUFFIX@") > > - > > -@@ -57,7 +57,7 @@ if(MSVC) > > - IMPORTED_LOCATION_RELEASE > "${_IMPORT_PREFIX}/lib/${staticLibraryName}" > > - ) > > - list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp ) > > -- list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp > "${_IMPORT_PREFIX}/lib/${staticLibraryName}") > > -+ list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp > "@CMAKE_INSTALL_FULL_LIBDIR@/${staticLibraryName}") > > - endif() > > - > > - else() > > -@@ -70,17 +70,17 @@ else() > > - endif() > > - set_target_properties(assimp::assimp PROPERTIES > > - IMPORTED_SONAME_RELEASE "${sharedLibraryName}" > > -- IMPORTED_LOCATION_RELEASE > "${_IMPORT_PREFIX}/lib/${sharedLibraryName}" > > -+ IMPORTED_LOCATION_RELEASE "@CMAKE_INSTALL_FULL_LIBDIR@ > /${sharedLibraryName}" > > - ) > > - list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp ) > > -- list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp > "${_IMPORT_PREFIX}/lib/${sharedLibraryName}" ) > > -+ list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp > "@CMAKE_INSTALL_FULL_LIBDIR@/${sharedLibraryName}" ) > > - else() > > - set(staticLibraryName > "libassimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_STATIC_LIBRARY_SUFFIX@") > > - set_target_properties(assimp::assimp PROPERTIES > > -- IMPORTED_LOCATION_RELEASE > "${_IMPORT_PREFIX}/lib/${staticLibraryName}" > > -+ IMPORTED_LOCATION_RELEASE "@CMAKE_INSTALL_FULL_LIBDIR@ > /${staticLibraryName}" > > - ) > > - list(APPEND _IMPORT_CHECK_TARGETS assimp::assimp ) > > -- list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp > "${_IMPORT_PREFIX}/lib/${staticLibraryName}" ) > > -+ list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp > "@CMAKE_INSTALL_FULL_LIBDIR@/${staticLibraryName}" ) > > - endif() > > - endif() > > - > > -@@ -91,8 +91,6 @@ get_filename_component(ASSIMP_ROOT_DIR > "@CMAKE_INSTALL_PREFIX@" REALPATH) > > - > > - set( ASSIMP_CXX_FLAGS ) # dynamically linked library > > - set( ASSIMP_LINK_FLAGS "" ) > > --set( ASSIMP_LIBRARY_DIRS "${ASSIMP_ROOT_DIR}/@ASSIMP_LIB_INSTALL_DIR@ > ") > > --set( ASSIMP_INCLUDE_DIRS > "${ASSIMP_ROOT_DIR}/@ASSIMP_INCLUDE_INSTALL_DIR@") > > - if(ASSIMP_BUILD_SHARED_LIBS) > > - set( ASSIMP_LIBRARIES ${sharedLibraryName}) > > - else() > > - > > -diff --git a/assimpTargets.cmake.in b/assimpTargets.cmake.in > > -index ab1a8d2c7b..ef90c834a6 100644 > > ---- a/assimpTargets.cmake.in > > -+++ b/assimpTargets.cmake.in > > -@@ -40,16 +40,6 @@ unset(_targetsDefined) > > - unset(_targetsNotDefined) > > - unset(_expectedTargets) > > - > > -- > > --# Compute the installation prefix relative to this file. > > --get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" > PATH) > > --get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) > > --get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) > > --get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) > > --if(_IMPORT_PREFIX STREQUAL "/") > > -- set(_IMPORT_PREFIX "") > > --endif() > > -- > > - # Create imported target assimp::assimp > > - if(@BUILD_SHARED_LIBS@) > > - add_library(assimp::assimp SHARED IMPORTED) > > -@@ -60,7 +50,7 @@ endif() > > - set_target_properties(assimp::assimp PROPERTIES > > - COMPATIBLE_INTERFACE_STRING "assimp_MAJOR_VERSION" > > - INTERFACE_assimp_MAJOR_VERSION "1" > > -- INTERFACE_INCLUDE_DIRECTORIES > "${_IMPORT_PREFIX}/include;${_IMPORT_PREFIX}/include" > > -+ #INTERFACE_INCLUDE_DIRECTORIES "@CMAKE_INSTALL_FULL_INCLUDEDIR@" > > - #INTERFACE_LINK_LIBRARIES > "TxtUtils::TxtUtils;MealyMachine::MealyMachine" > > - ) > > - > > -@@ -75,9 +65,6 @@ foreach(f ${CONFIG_FILES}) > > - include(${f}) > > - endforeach() > > - > > --# Cleanup temporary variables. > > --set(_IMPORT_PREFIX) > > -- > > - # Loop over all imported files and verify that they actually exist > > - foreach(target ${_IMPORT_CHECK_TARGETS} ) > > - foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} ) > > - > > diff --git a/meta/recipes-graphics/vulkan/assimp_5.0.1.bb > b/meta/recipes-graphics/vulkan/assimp_5.0.1.bb > > deleted file mode 100644 > > index 89c555f08e..0000000000 > > --- a/meta/recipes-graphics/vulkan/assimp_5.0.1.bb > > +++ /dev/null > > @@ -1,26 +0,0 @@ > > -DESCRIPTION = "Open Asset Import Library is a portable Open Source > library to import \ > > - various well-known 3D model formats in a uniform manner." > > -HOMEPAGE = "http://www.assimp.org/" > > -SECTION = "devel" > > - > > -LICENSE = "BSD-3-Clause" > > -LIC_FILES_CHKSUM = "file://LICENSE;md5=2119edef0916b0bd511cb3c731076271" > > - > > -DEPENDS = "zlib" > > - > > -SRC_URI = "git://github.com/assimp/assimp.git;branch=assimp_5.0_release > \ > > - > file://0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch \ > > - file://use-GNUInstallDirs-where-possible.patch \ > > - > file://0001-assimp-remove-shared-lib-from-_IMPORT_CHECK_TARGETS.patch \ > > - " > > -UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>(\d+(\.\d+)+))" > > - > > -SRCREV = "8f0c6b04b2257a520aaab38421b2e090204b69df" > > - > > -S = "${WORKDIR}/git" > > - > > -inherit cmake > > - > > -EXTRA_OECMAKE = "-DASSIMP_BUILD_ASSIMP_TOOLS=OFF > -DASSIMP_BUILD_TESTS=OFF -DASSIMP_LIB_INSTALL_DIR=${baselib}" > > - > > -BBCLASSEXTEND = "native nativesdk" > > > > > > > > > > > > > -- > # Randy MacLeod > # Wind River Linux > > > > [-- Attachment #2: Type: text/html, Size: 109224 bytes --] ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [OE-core] [PATCH 1/1] assimp: Remove it 2021-09-07 12:49 ` Alexander Kanavin @ 2021-09-08 10:08 ` Ross Burton 2021-09-08 10:34 ` Richard Purdie 2021-09-09 5:05 ` Khem Raj 0 siblings, 2 replies; 17+ messages in thread From: Ross Burton @ 2021-09-08 10:08 UTC (permalink / raw) To: Alexander Kanavin; +Cc: Randy MacLeod, Robert Yang, OE-core On Tue, 7 Sept 2021 at 13:50, Alexander Kanavin <alex.kanavin@gmail.com> wrote: > I'm not sure why layerindex says otherewise, but neither vulkan nor anything in meta-qt5 actually depend on assimp. > qt5/6 has an option, off by default, to use external assimp, vulkan has no dependency at all. > > This leaves basically meta-ros, so carrying assimp for the benefit of a single layer is dubious at best. I thought Vulkan needed assimp so dug into the history. vulkan-demos used to need it, but that was replaced with vulkan-samples which does not. So, I say we drop assimp from core and move it to meta-oe. Ross ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [OE-core] [PATCH 1/1] assimp: Remove it 2021-09-08 10:08 ` Ross Burton @ 2021-09-08 10:34 ` Richard Purdie 2021-09-09 5:05 ` Khem Raj 1 sibling, 0 replies; 17+ messages in thread From: Richard Purdie @ 2021-09-08 10:34 UTC (permalink / raw) To: Ross Burton, Alexander Kanavin; +Cc: Randy MacLeod, Robert Yang, OE-core On Wed, 2021-09-08 at 11:08 +0100, Ross Burton wrote: > On Tue, 7 Sept 2021 at 13:50, Alexander Kanavin <alex.kanavin@gmail.com> wrote: > > I'm not sure why layerindex says otherewise, but neither vulkan nor anything in meta-qt5 actually depend on assimp. > > qt5/6 has an option, off by default, to use external assimp, vulkan has no dependency at all. > > > > This leaves basically meta-ros, so carrying assimp for the benefit of a single layer is dubious at best. > > I thought Vulkan needed assimp so dug into the history. vulkan-demos > used to need it, but that was replaced with vulkan-samples which does > not. > > So, I say we drop assimp from core and move it to meta-oe. FWIW I agree, its looking like a pain from a few angles and it isn't worth that in core. Cheers, Richard ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [OE-core] [PATCH 1/1] assimp: Remove it 2021-09-08 10:08 ` Ross Burton 2021-09-08 10:34 ` Richard Purdie @ 2021-09-09 5:05 ` Khem Raj 1 sibling, 0 replies; 17+ messages in thread From: Khem Raj @ 2021-09-09 5:05 UTC (permalink / raw) To: Ross Burton; +Cc: Alexander Kanavin, Randy MacLeod, Robert Yang, OE-core On Wed, Sep 8, 2021 at 3:08 AM Ross Burton <ross@burtonini.com> wrote: > > On Tue, 7 Sept 2021 at 13:50, Alexander Kanavin <alex.kanavin@gmail.com> wrote: > > I'm not sure why layerindex says otherewise, but neither vulkan nor anything in meta-qt5 actually depend on assimp. > > qt5/6 has an option, off by default, to use external assimp, vulkan has no dependency at all. > > > > This leaves basically meta-ros, so carrying assimp for the benefit of a single layer is dubious at best. > > I thought Vulkan needed assimp so dug into the history. vulkan-demos > used to need it, but that was replaced with vulkan-samples which does > not. > > So, I say we drop assimp from core and move it to meta-oe. just drop it, there is nothing in meta-openembedded repos that need it so I am not that interested to maintain it in meta-oe either. > > Ross > > > ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [OE-core] [PATCH 0/1] assimp: Remove it 2021-09-07 9:17 [PATCH 0/1] assimp: Remove it Robert Yang 2021-09-07 9:17 ` [PATCH 1/1] " Robert Yang @ 2021-09-09 5:06 ` Khem Raj 2021-09-09 10:26 ` Robert Yang 1 sibling, 1 reply; 17+ messages in thread From: Khem Raj @ 2021-09-09 5:06 UTC (permalink / raw) To: Robert Yang; +Cc: Patches and discussions about the oe-core layer also delete meta/lib/oeqa/sdk/cases/assimp.py On Tue, Sep 7, 2021 at 1:46 AM Robert Yang <liezhi.yang@windriver.com> wrote: > > The following changes since commit 70de1dbb660461bdf0613494f53ec4c78738ae2a: > > vim: Add packageconfig for sound notification support (2021-09-06 09:49:13 +0100) > > are available in the Git repository at: > > git://git.openembedded.org/openembedded-core-contrib rbt/assimp > http://cgit.openembedded.org/openembedded-core-contrib/log/?h=rbt/assimp > > Robert Yang (1): > assimp: Remove it > > meta/conf/distro/include/maintainers.inc | 1 - > ...hared-lib-from-_IMPORT_CHECK_TARGETS.patch | 32 - > ...hub.com-assimp-assimp-issues-2733-up.patch | 1664 ----------------- > .../use-GNUInstallDirs-where-possible.patch | 257 --- > meta/recipes-graphics/vulkan/assimp_5.0.1.bb | 26 - > 5 files changed, 1980 deletions(-) > delete mode 100644 meta/recipes-graphics/vulkan/assimp/0001-assimp-remove-shared-lib-from-_IMPORT_CHECK_TARGETS.patch > delete mode 100644 meta/recipes-graphics/vulkan/assimp/0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch > delete mode 100644 meta/recipes-graphics/vulkan/assimp/use-GNUInstallDirs-where-possible.patch > delete mode 100644 meta/recipes-graphics/vulkan/assimp_5.0.1.bb > > -- > 2.17.1 > > > > ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [OE-core] [PATCH 0/1] assimp: Remove it 2021-09-09 5:06 ` [OE-core] [PATCH 0/1] " Khem Raj @ 2021-09-09 10:26 ` Robert Yang 2021-09-09 11:19 ` Alexander Kanavin 2021-09-09 15:43 ` Khem Raj 0 siblings, 2 replies; 17+ messages in thread From: Robert Yang @ 2021-09-09 10:26 UTC (permalink / raw) To: Khem Raj; +Cc: Patches and discussions about the oe-core layer Hi Khem, On 9/9/21 1:06 PM, Khem Raj wrote: > also delete meta/lib/oeqa/sdk/cases/assimp.py It's a test case for testing cmake, it should be OK to keep it? Or we need add a new one to replace it. // Robert > > On Tue, Sep 7, 2021 at 1:46 AM Robert Yang <liezhi.yang@windriver.com> wrote: >> >> The following changes since commit 70de1dbb660461bdf0613494f53ec4c78738ae2a: >> >> vim: Add packageconfig for sound notification support (2021-09-06 09:49:13 +0100) >> >> are available in the Git repository at: >> >> git://git.openembedded.org/openembedded-core-contrib rbt/assimp >> http://cgit.openembedded.org/openembedded-core-contrib/log/?h=rbt/assimp >> >> Robert Yang (1): >> assimp: Remove it >> >> meta/conf/distro/include/maintainers.inc | 1 - >> ...hared-lib-from-_IMPORT_CHECK_TARGETS.patch | 32 - >> ...hub.com-assimp-assimp-issues-2733-up.patch | 1664 ----------------- >> .../use-GNUInstallDirs-where-possible.patch | 257 --- >> meta/recipes-graphics/vulkan/assimp_5.0.1.bb | 26 - >> 5 files changed, 1980 deletions(-) >> delete mode 100644 meta/recipes-graphics/vulkan/assimp/0001-assimp-remove-shared-lib-from-_IMPORT_CHECK_TARGETS.patch >> delete mode 100644 meta/recipes-graphics/vulkan/assimp/0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch >> delete mode 100644 meta/recipes-graphics/vulkan/assimp/use-GNUInstallDirs-where-possible.patch >> delete mode 100644 meta/recipes-graphics/vulkan/assimp_5.0.1.bb >> >> -- >> 2.17.1 >> >> >> >> ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [OE-core] [PATCH 0/1] assimp: Remove it 2021-09-09 10:26 ` Robert Yang @ 2021-09-09 11:19 ` Alexander Kanavin 2021-09-09 15:43 ` Khem Raj 1 sibling, 0 replies; 17+ messages in thread From: Alexander Kanavin @ 2021-09-09 11:19 UTC (permalink / raw) To: Robert Yang; +Cc: Khem Raj, Patches and discussions about the oe-core layer [-- Attachment #1: Type: text/plain, Size: 1876 bytes --] Right, that test is orthogonal and independent of the recipe, so should be kept until there's a replacement. Alex On Thu, 9 Sept 2021 at 12:26, Robert Yang <liezhi.yang@windriver.com> wrote: > Hi Khem, > > On 9/9/21 1:06 PM, Khem Raj wrote: > > also delete meta/lib/oeqa/sdk/cases/assimp.py > > It's a test case for testing cmake, it should be OK to keep it? Or we need > add a > new one to replace it. > > // Robert > > > > > On Tue, Sep 7, 2021 at 1:46 AM Robert Yang <liezhi.yang@windriver.com> > wrote: > >> > >> The following changes since commit > 70de1dbb660461bdf0613494f53ec4c78738ae2a: > >> > >> vim: Add packageconfig for sound notification support (2021-09-06 > 09:49:13 +0100) > >> > >> are available in the Git repository at: > >> > >> git://git.openembedded.org/openembedded-core-contrib rbt/assimp > >> > http://cgit.openembedded.org/openembedded-core-contrib/log/?h=rbt/assimp > >> > >> Robert Yang (1): > >> assimp: Remove it > >> > >> meta/conf/distro/include/maintainers.inc | 1 - > >> ...hared-lib-from-_IMPORT_CHECK_TARGETS.patch | 32 - > >> ...hub.com-assimp-assimp-issues-2733-up.patch | 1664 ----------------- > >> .../use-GNUInstallDirs-where-possible.patch | 257 --- > >> meta/recipes-graphics/vulkan/assimp_5.0.1.bb | 26 - > >> 5 files changed, 1980 deletions(-) > >> delete mode 100644 > meta/recipes-graphics/vulkan/assimp/0001-assimp-remove-shared-lib-from-_IMPORT_CHECK_TARGETS.patch > >> delete mode 100644 > meta/recipes-graphics/vulkan/assimp/0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch > >> delete mode 100644 > meta/recipes-graphics/vulkan/assimp/use-GNUInstallDirs-where-possible.patch > >> delete mode 100644 meta/recipes-graphics/vulkan/assimp_5.0.1.bb > >> > >> -- > >> 2.17.1 > >> > >> > >> > >> > > > > [-- Attachment #2: Type: text/html, Size: 2935 bytes --] ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [OE-core] [PATCH 0/1] assimp: Remove it 2021-09-09 10:26 ` Robert Yang 2021-09-09 11:19 ` Alexander Kanavin @ 2021-09-09 15:43 ` Khem Raj 2021-09-10 8:05 ` Robert Yang 1 sibling, 1 reply; 17+ messages in thread From: Khem Raj @ 2021-09-09 15:43 UTC (permalink / raw) To: Robert Yang; +Cc: Patches and discussions about the oe-core layer On Thu, Sep 9, 2021 at 3:26 AM Robert Yang <liezhi.yang@windriver.com> wrote: > > Hi Khem, > > On 9/9/21 1:06 PM, Khem Raj wrote: > > also delete meta/lib/oeqa/sdk/cases/assimp.py > > It's a test case for testing cmake, it should be OK to keep it? Or we need add a > new one to replace it. is it downloading assimp code etc. ? if so I would suggest to replace it with something else too as a followup. > > // Robert > > > > > On Tue, Sep 7, 2021 at 1:46 AM Robert Yang <liezhi.yang@windriver.com> wrote: > >> > >> The following changes since commit 70de1dbb660461bdf0613494f53ec4c78738ae2a: > >> > >> vim: Add packageconfig for sound notification support (2021-09-06 09:49:13 +0100) > >> > >> are available in the Git repository at: > >> > >> git://git.openembedded.org/openembedded-core-contrib rbt/assimp > >> http://cgit.openembedded.org/openembedded-core-contrib/log/?h=rbt/assimp > >> > >> Robert Yang (1): > >> assimp: Remove it > >> > >> meta/conf/distro/include/maintainers.inc | 1 - > >> ...hared-lib-from-_IMPORT_CHECK_TARGETS.patch | 32 - > >> ...hub.com-assimp-assimp-issues-2733-up.patch | 1664 ----------------- > >> .../use-GNUInstallDirs-where-possible.patch | 257 --- > >> meta/recipes-graphics/vulkan/assimp_5.0.1.bb | 26 - > >> 5 files changed, 1980 deletions(-) > >> delete mode 100644 meta/recipes-graphics/vulkan/assimp/0001-assimp-remove-shared-lib-from-_IMPORT_CHECK_TARGETS.patch > >> delete mode 100644 meta/recipes-graphics/vulkan/assimp/0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch > >> delete mode 100644 meta/recipes-graphics/vulkan/assimp/use-GNUInstallDirs-where-possible.patch > >> delete mode 100644 meta/recipes-graphics/vulkan/assimp_5.0.1.bb > >> > >> -- > >> 2.17.1 > >> > >> > >> > >> ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [OE-core] [PATCH 0/1] assimp: Remove it 2021-09-09 15:43 ` Khem Raj @ 2021-09-10 8:05 ` Robert Yang 0 siblings, 0 replies; 17+ messages in thread From: Robert Yang @ 2021-09-10 8:05 UTC (permalink / raw) To: Khem Raj; +Cc: Patches and discussions about the oe-core layer On 9/9/21 11:43 PM, Khem Raj wrote: > On Thu, Sep 9, 2021 at 3:26 AM Robert Yang <liezhi.yang@windriver.com> wrote: >> >> Hi Khem, >> >> On 9/9/21 1:06 PM, Khem Raj wrote: >>> also delete meta/lib/oeqa/sdk/cases/assimp.py >> >> It's a test case for testing cmake, it should be OK to keep it? Or we need add a >> new one to replace it. > > is it downloading assimp code etc. ? if so I would suggest to replace > it with something else too as a followup. Yes, it does, I've sent a patch to use expat to replace assimp for the test. // Robert > >> >> // Robert >> >>> >>> On Tue, Sep 7, 2021 at 1:46 AM Robert Yang <liezhi.yang@windriver.com> wrote: >>>> >>>> The following changes since commit 70de1dbb660461bdf0613494f53ec4c78738ae2a: >>>> >>>> vim: Add packageconfig for sound notification support (2021-09-06 09:49:13 +0100) >>>> >>>> are available in the Git repository at: >>>> >>>> git://git.openembedded.org/openembedded-core-contrib rbt/assimp >>>> http://cgit.openembedded.org/openembedded-core-contrib/log/?h=rbt/assimp >>>> >>>> Robert Yang (1): >>>> assimp: Remove it >>>> >>>> meta/conf/distro/include/maintainers.inc | 1 - >>>> ...hared-lib-from-_IMPORT_CHECK_TARGETS.patch | 32 - >>>> ...hub.com-assimp-assimp-issues-2733-up.patch | 1664 ----------------- >>>> .../use-GNUInstallDirs-where-possible.patch | 257 --- >>>> meta/recipes-graphics/vulkan/assimp_5.0.1.bb | 26 - >>>> 5 files changed, 1980 deletions(-) >>>> delete mode 100644 meta/recipes-graphics/vulkan/assimp/0001-assimp-remove-shared-lib-from-_IMPORT_CHECK_TARGETS.patch >>>> delete mode 100644 meta/recipes-graphics/vulkan/assimp/0001-closes-https-github.com-assimp-assimp-issues-2733-up.patch >>>> delete mode 100644 meta/recipes-graphics/vulkan/assimp/use-GNUInstallDirs-where-possible.patch >>>> delete mode 100644 meta/recipes-graphics/vulkan/assimp_5.0.1.bb >>>> >>>> -- >>>> 2.17.1 >>>> >>>> >>>> >>>> ^ permalink raw reply [flat|nested] 17+ messages in thread
end of thread, other threads:[~2021-09-10 8:05 UTC | newest] Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-09-07 9:17 [PATCH 0/1] assimp: Remove it Robert Yang 2021-09-07 9:17 ` [PATCH 1/1] " Robert Yang 2021-09-07 12:04 ` [OE-core] " Randy MacLeod 2021-09-07 12:10 ` Ross Burton 2021-09-07 19:01 ` Khem Raj 2021-09-08 8:55 ` Robert Yang 2021-09-08 9:33 ` Mikko Rapeli 2021-09-08 9:41 ` Robert Yang 2021-09-07 12:49 ` Alexander Kanavin 2021-09-08 10:08 ` Ross Burton 2021-09-08 10:34 ` Richard Purdie 2021-09-09 5:05 ` Khem Raj 2021-09-09 5:06 ` [OE-core] [PATCH 0/1] " Khem Raj 2021-09-09 10:26 ` Robert Yang 2021-09-09 11:19 ` Alexander Kanavin 2021-09-09 15:43 ` Khem Raj 2021-09-10 8:05 ` Robert Yang
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.