Since there might be users of this in other layers, this or the move to meta-oe isn't an appropriate change for a stable branch in my opinion.
Thanks, Anuj On Tue, 2021-09-07 at 17:31 +0800, 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: psio...@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.y...@windriver.com> > --- > meta/conf/distro/include/maintainers.inc | 1 - > ...MP_LIB_INSTALL_DIR-to-search-library.patch | 68 - > ...hub.com-assimp-assimp-issues-2733-up.patch | 1664 --------------- > -- > meta/recipes-graphics/vulkan/assimp_5.0.1.bb | 23 - > 4 files changed, 1756 deletions(-) > delete mode 100644 meta/recipes-graphics/vulkan/assimp/0001-Use- > ASSIMP_LIB_INSTALL_DIR-to-search-library.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_5.0.1.bb > > diff --git a/meta/conf/distro/include/maintainers.inc > b/meta/conf/distro/include/maintainers.inc > index 6276331857..e6b8180731 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.ani...@gmail.com>" > RECIPE_MAINTAINER_pn-argp-standalone = "Khem Raj > <raj.k...@gmail.com>" > RECIPE_MAINTAINER_pn-asciidoc = "Yi Zhao <yi.z...@windriver.com>" > RECIPE_MAINTAINER_pn-aspell = "Anuj Mittal <anuj.mit...@intel.com>" > -RECIPE_MAINTAINER_pn-assimp = "Anuj Mittal <anuj.mit...@intel.com>" > RECIPE_MAINTAINER_pn-at = "Chen Qi <qi.c...@windriver.com>" > RECIPE_MAINTAINER_pn-at-spi2-atk = "Tim Orling > <timothy.t.orl...@linux.intel.com>" > RECIPE_MAINTAINER_pn-at-spi2-core = "Tim Orling > <timothy.t.orl...@linux.intel.com>" > diff --git a/meta/recipes-graphics/vulkan/assimp/0001-Use- > ASSIMP_LIB_INSTALL_DIR-to-search-library.patch b/meta/recipes- > graphics/vulkan/assimp/0001-Use-ASSIMP_LIB_INSTALL_DIR-to-search- > library.patch > deleted file mode 100644 > index 34c5bfa857..0000000000 > --- a/meta/recipes-graphics/vulkan/assimp/0001-Use- > ASSIMP_LIB_INSTALL_DIR-to-search-library.patch > +++ /dev/null > @@ -1,68 +0,0 @@ > -From 58f576d6f240b08957a402960cdf06c74201ac7b Mon Sep 17 00:00:00 > 2001 > -From: Hongxu Jia <hongxu....@windriver.com> > -Date: Thu, 12 Dec 2019 22:16:15 -0800 > -Subject: [PATCH] Use ASSIMP_LIB_INSTALL_DIR to search library > - > -Use ASSIMP_LIB_INSTALL_DIR rather than hardcoded /lib to search > library > - > -Upstream-Status: Inappropriate [oe specific] > - > -Signed-off-by: Hongxu Jia <hongxu....@windriver.com> > - > ---- > - assimpTargets-release.cmake.in | 16 ++++++++-------- > - 1 file changed, 8 insertions(+), 8 deletions(-) > - > -diff --git a/assimpTargets-release.cmake.in b/assimpTargets- > release.cmake.in > -index f3db8f1..b8a066a 100644 > ---- a/assimpTargets-release.cmake.in > -+++ b/assimpTargets-release.cmake.in > -@@ -42,11 +42,11 @@ 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_IMPLIB_RELEASE > "${_IMPORT_PREFIX}/@ASSIMP_LIB_INSTALL_DIR@/${importLibraryName}" > - IMPORTED_LOCATION_RELEASE > "${_IMPORT_PREFIX}/bin/${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}/@ASSIMP_LIB_INSTALL_DIR@/${importLibraryName}") > - list(APPEND _IMPORT_CHECK_FILES_FOR_assimp::assimp > "${_IMPORT_PREFIX}/bin/${sharedLibraryName}" ) > - else() > - set(staticLibraryName > "assimp${ASSIMP_LIBRARY_SUFFIX}@CMAKE_STATIC_LIBRARY_SUFFIX@") > -@@ -54,10 +54,10 @@ 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_LOCATION_RELEASE > "${_IMPORT_PREFIX}/lib/${staticLibraryName}" > -+ IMPORTED_LOCATION_RELEASE > "${_IMPORT_PREFIX}/@ASSIMP_LIB_INSTALL_DIR@/${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 > "${_IMPORT_PREFIX}/@ASSIMP_LIB_INSTALL_DIR@/${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 > "${_IMPORT_PREFIX}/@ASSIMP_LIB_INSTALL_DIR@/${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 > "${_IMPORT_PREFIX}/@ASSIMP_LIB_INSTALL_DIR@/${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 > "${_IMPORT_PREFIX}/@ASSIMP_LIB_INSTALL_DIR@/${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 > "${_IMPORT_PREFIX}/@ASSIMP_LIB_INSTALL_DIR@/${staticLibraryName}" ) > - endif() > - endif() > - > 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.kull...@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.kana...@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_5.0.1.bb > b/meta/recipes-graphics/vulkan/assimp_5.0.1.bb > deleted file mode 100644 > index 5a8c62e64d..0000000000 > --- a/meta/recipes-graphics/vulkan/assimp_5.0.1.bb > +++ /dev/null > @@ -1,23 +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://0001-Use-ASSIMP_LIB_INSTALL_DIR-to-search-library.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}" > > >
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#155837): https://lists.openembedded.org/g/openembedded-core/message/155837 Mute This Topic: https://lists.openembedded.org/mt/85431142/21656 Group Owner: openembedded-core+ow...@lists.openembedded.org Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-