1*4882a593SmuzhiyunFrom bb3db0ebaffc6b76de256e597ec1d1e4d2a6663f Mon Sep 17 00:00:00 2001 2*4882a593SmuzhiyunFrom: kimkulling <kim.kulling@googlemail.com> 3*4882a593SmuzhiyunDate: Mon, 9 Mar 2020 10:51:26 +0100 4*4882a593SmuzhiyunSubject: [PATCH] closes https://github.com/assimp/assimp/issues/2954: upgrade 5*4882a593Smuzhiyun to latest greatest. 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun[Retrieved from: 8*4882a593Smuzhiyunhttps://github.com/assimp/assimp/commit/bb3db0ebaffc6b76de256e597ec1d1e4d2a6663f] 9*4882a593SmuzhiyunSigned-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com> 10*4882a593Smuzhiyun--- 11*4882a593Smuzhiyun contrib/zip/CMakeLists.txt | 8 ++---- 12*4882a593Smuzhiyun contrib/zip/README.md | 51 +++++++++++++++++++++++++++++++-- 13*4882a593Smuzhiyun contrib/zip/src/zip.c | 17 ++++++++++- 14*4882a593Smuzhiyun contrib/zip/src/zip.h | 13 ++++++++- 15*4882a593Smuzhiyun contrib/zip/test/CMakeLists.txt | 5 ---- 16*4882a593Smuzhiyun contrib/zip/test/test.c | 4 ++- 17*4882a593Smuzhiyun 6 files changed, 81 insertions(+), 17 deletions(-) 18*4882a593Smuzhiyun 19*4882a593Smuzhiyundiff --git a/contrib/zip/CMakeLists.txt b/contrib/zip/CMakeLists.txt 20*4882a593Smuzhiyunindex 77916d2e14..f194649ede 100644 21*4882a593Smuzhiyun--- a/contrib/zip/CMakeLists.txt 22*4882a593Smuzhiyun+++ b/contrib/zip/CMakeLists.txt 23*4882a593Smuzhiyun@@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.0) 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun project(zip 26*4882a593Smuzhiyun LANGUAGES C 27*4882a593Smuzhiyun- VERSION "0.1.15") 28*4882a593Smuzhiyun+ VERSION "0.1.18") 29*4882a593Smuzhiyun set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun option(CMAKE_DISABLE_TESTING "Disable test creation" OFF) 32*4882a593Smuzhiyun@@ -16,10 +16,6 @@ elseif ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU" OR 33*4882a593Smuzhiyun "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" OR 34*4882a593Smuzhiyun "${CMAKE_C_COMPILER_ID}" STREQUAL "AppleClang") 35*4882a593Smuzhiyun set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -Wall -Wextra -Werror -pedantic") 36*4882a593Smuzhiyun- if(ENABLE_COVERAGE) 37*4882a593Smuzhiyun- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 -fprofile-arcs -ftest-coverage") 38*4882a593Smuzhiyun- set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage") 39*4882a593Smuzhiyun- endif() 40*4882a593Smuzhiyun endif (MSVC) 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun # zip 43*4882a593Smuzhiyun@@ -35,7 +31,7 @@ if (NOT CMAKE_DISABLE_TESTING) 44*4882a593Smuzhiyun enable_testing() 45*4882a593Smuzhiyun add_subdirectory(test) 46*4882a593Smuzhiyun find_package(Sanitizers) 47*4882a593Smuzhiyun- add_sanitizers(${PROJECT_NAME} ${test_out} ${test_miniz_out}) 48*4882a593Smuzhiyun+ add_sanitizers(${PROJECT_NAME} ${test_out}) 49*4882a593Smuzhiyun endif() 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun #### 52*4882a593Smuzhiyundiff --git a/contrib/zip/README.md b/contrib/zip/README.md 53*4882a593Smuzhiyunindex 14eb9a34c8..bdd0822b67 100644 54*4882a593Smuzhiyun--- a/contrib/zip/README.md 55*4882a593Smuzhiyun+++ b/contrib/zip/README.md 56*4882a593Smuzhiyun@@ -1,10 +1,8 @@ 57*4882a593Smuzhiyun ### A portable (OSX/Linux/Windows), simple zip library written in C 58*4882a593Smuzhiyun This is done by hacking awesome [miniz](https://code.google.com/p/miniz) library and layering functions on top of the miniz v1.15 API. 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun-[](https://ci.appveyor.com/project/kuba--/zip) 61*4882a593Smuzhiyun-[](https://travis-ci.org/kuba--/zip) 62*4882a593Smuzhiyun+[](https://github.com/kuba--/zip/actions?query=workflow%3Abuild) 63*4882a593Smuzhiyun [](https://github.com/kuba--/zip/releases) 64*4882a593Smuzhiyun-[](https://codecov.io/gh/kuba--/zip) 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun # The Idea 68*4882a593Smuzhiyun@@ -213,6 +211,53 @@ func main() { 69*4882a593Smuzhiyun } 70*4882a593Smuzhiyun ``` 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun+### Rust (ffi) 73*4882a593Smuzhiyun+```rust 74*4882a593Smuzhiyun+extern crate libc; 75*4882a593Smuzhiyun+use std::ffi::CString; 76*4882a593Smuzhiyun+ 77*4882a593Smuzhiyun+#[repr(C)] 78*4882a593Smuzhiyun+pub struct Zip { 79*4882a593Smuzhiyun+ _private: [u8; 0], 80*4882a593Smuzhiyun+} 81*4882a593Smuzhiyun+ 82*4882a593Smuzhiyun+#[link(name = "zip")] 83*4882a593Smuzhiyun+extern "C" { 84*4882a593Smuzhiyun+ fn zip_open(path: *const libc::c_char, level: libc::c_int, mode: libc::c_char) -> *mut Zip; 85*4882a593Smuzhiyun+ fn zip_close(zip: *mut Zip) -> libc::c_void; 86*4882a593Smuzhiyun+ 87*4882a593Smuzhiyun+ fn zip_entry_open(zip: *mut Zip, entryname: *const libc::c_char) -> libc::c_int; 88*4882a593Smuzhiyun+ fn zip_entry_close(zip: *mut Zip) -> libc::c_int; 89*4882a593Smuzhiyun+ fn zip_entry_write( 90*4882a593Smuzhiyun+ zip: *mut Zip, 91*4882a593Smuzhiyun+ buf: *const libc::c_void, 92*4882a593Smuzhiyun+ bufsize: libc::size_t, 93*4882a593Smuzhiyun+ ) -> libc::c_int; 94*4882a593Smuzhiyun+} 95*4882a593Smuzhiyun+ 96*4882a593Smuzhiyun+fn main() { 97*4882a593Smuzhiyun+ let path = CString::new("/tmp/test.zip").unwrap(); 98*4882a593Smuzhiyun+ let mode: libc::c_char = 'w' as libc::c_char; 99*4882a593Smuzhiyun+ 100*4882a593Smuzhiyun+ let entryname = CString::new("test.txt").unwrap(); 101*4882a593Smuzhiyun+ let content = "test content\0"; 102*4882a593Smuzhiyun+ 103*4882a593Smuzhiyun+ unsafe { 104*4882a593Smuzhiyun+ let zip: *mut Zip = zip_open(path.as_ptr(), 5, mode); 105*4882a593Smuzhiyun+ { 106*4882a593Smuzhiyun+ zip_entry_open(zip, entryname.as_ptr()); 107*4882a593Smuzhiyun+ { 108*4882a593Smuzhiyun+ let buf = content.as_ptr() as *const libc::c_void; 109*4882a593Smuzhiyun+ let bufsize = content.len() as libc::size_t; 110*4882a593Smuzhiyun+ zip_entry_write(zip, buf, bufsize); 111*4882a593Smuzhiyun+ } 112*4882a593Smuzhiyun+ zip_entry_close(zip); 113*4882a593Smuzhiyun+ } 114*4882a593Smuzhiyun+ zip_close(zip); 115*4882a593Smuzhiyun+ } 116*4882a593Smuzhiyun+} 117*4882a593Smuzhiyun+``` 118*4882a593Smuzhiyun+ 119*4882a593Smuzhiyun ### Ruby (ffi) 120*4882a593Smuzhiyun Install _ffi_ gem. 121*4882a593Smuzhiyun ```shell 122*4882a593Smuzhiyundiff --git a/contrib/zip/src/zip.c b/contrib/zip/src/zip.c 123*4882a593Smuzhiyunindex 1abcfd8fd1..3b2821e6a3 100644 124*4882a593Smuzhiyun--- a/contrib/zip/src/zip.c 125*4882a593Smuzhiyun+++ b/contrib/zip/src/zip.c 126*4882a593Smuzhiyun@@ -222,6 +222,20 @@ void zip_close(struct zip_t *zip) { 127*4882a593Smuzhiyun } 128*4882a593Smuzhiyun } 129*4882a593Smuzhiyun 130*4882a593Smuzhiyun+int zip_is64(struct zip_t *zip) { 131*4882a593Smuzhiyun+ if (!zip) { 132*4882a593Smuzhiyun+ // zip_t handler is not initialized 133*4882a593Smuzhiyun+ return -1; 134*4882a593Smuzhiyun+ } 135*4882a593Smuzhiyun+ 136*4882a593Smuzhiyun+ if (!zip->archive.m_pState) { 137*4882a593Smuzhiyun+ // zip state is not initialized 138*4882a593Smuzhiyun+ return -1; 139*4882a593Smuzhiyun+ } 140*4882a593Smuzhiyun+ 141*4882a593Smuzhiyun+ return (int)zip->archive.m_pState->m_zip64; 142*4882a593Smuzhiyun+} 143*4882a593Smuzhiyun+ 144*4882a593Smuzhiyun int zip_entry_open(struct zip_t *zip, const char *entryname) { 145*4882a593Smuzhiyun size_t entrylen = 0; 146*4882a593Smuzhiyun mz_zip_archive *pzip = NULL; 147*4882a593Smuzhiyun@@ -794,7 +808,8 @@ int zip_create(const char *zipname, const char *filenames[], size_t len) { 148*4882a593Smuzhiyun 149*4882a593Smuzhiyun if (MZ_FILE_STAT(name, &file_stat) != 0) { 150*4882a593Smuzhiyun // problem getting information - check errno 151*4882a593Smuzhiyun- return -1; 152*4882a593Smuzhiyun+ status = -1; 153*4882a593Smuzhiyun+ break; 154*4882a593Smuzhiyun } 155*4882a593Smuzhiyun 156*4882a593Smuzhiyun if ((file_stat.st_mode & 0200) == 0) { 157*4882a593Smuzhiyundiff --git a/contrib/zip/src/zip.h b/contrib/zip/src/zip.h 158*4882a593Smuzhiyunindex a48d64d6de..cd3ab5cd00 100644 159*4882a593Smuzhiyun--- a/contrib/zip/src/zip.h 160*4882a593Smuzhiyun+++ b/contrib/zip/src/zip.h 161*4882a593Smuzhiyun@@ -21,7 +21,7 @@ extern "C" { 162*4882a593Smuzhiyun 163*4882a593Smuzhiyun #if !defined(_SSIZE_T_DEFINED) && !defined(_SSIZE_T_DEFINED_) && \ 164*4882a593Smuzhiyun !defined(__DEFINED_ssize_t) && !defined(__ssize_t_defined) && \ 165*4882a593Smuzhiyun- !defined(_SSIZE_T) && !defined(_SSIZE_T_) 166*4882a593Smuzhiyun+ !defined(_SSIZE_T) && !defined(_SSIZE_T_) && !defined(_SSIZE_T_DECLARED) 167*4882a593Smuzhiyun 168*4882a593Smuzhiyun // 64-bit Windows is the only mainstream platform 169*4882a593Smuzhiyun // where sizeof(long) != sizeof(void*) 170*4882a593Smuzhiyun@@ -37,6 +37,7 @@ typedef long ssize_t; /* byte count or error */ 171*4882a593Smuzhiyun #define __ssize_t_defined 172*4882a593Smuzhiyun #define _SSIZE_T 173*4882a593Smuzhiyun #define _SSIZE_T_ 174*4882a593Smuzhiyun+#define _SSIZE_T_DECLARED 175*4882a593Smuzhiyun 176*4882a593Smuzhiyun #endif 177*4882a593Smuzhiyun 178*4882a593Smuzhiyun@@ -90,6 +91,16 @@ extern struct zip_t *zip_open(const char *zipname, int level, char mode); 179*4882a593Smuzhiyun */ 180*4882a593Smuzhiyun extern void zip_close(struct zip_t *zip); 181*4882a593Smuzhiyun 182*4882a593Smuzhiyun+/** 183*4882a593Smuzhiyun+ * Determines if the archive has a zip64 end of central directory headers. 184*4882a593Smuzhiyun+ * 185*4882a593Smuzhiyun+ * @param zip zip archive handler. 186*4882a593Smuzhiyun+ * 187*4882a593Smuzhiyun+ * @return the return code - 1 (true), 0 (false), negative number (< 0) on 188*4882a593Smuzhiyun+ * error. 189*4882a593Smuzhiyun+ */ 190*4882a593Smuzhiyun+extern int zip_is64(struct zip_t *zip); 191*4882a593Smuzhiyun+ 192*4882a593Smuzhiyun /** 193*4882a593Smuzhiyun * Opens an entry by name in the zip archive. 194*4882a593Smuzhiyun * 195*4882a593Smuzhiyundiff --git a/contrib/zip/test/CMakeLists.txt b/contrib/zip/test/CMakeLists.txt 196*4882a593Smuzhiyunindex cc060b00fe..1224115858 100644 197*4882a593Smuzhiyun--- a/contrib/zip/test/CMakeLists.txt 198*4882a593Smuzhiyun+++ b/contrib/zip/test/CMakeLists.txt 199*4882a593Smuzhiyun@@ -2,15 +2,10 @@ cmake_minimum_required(VERSION 2.8) 200*4882a593Smuzhiyun 201*4882a593Smuzhiyun # test 202*4882a593Smuzhiyun set(test_out test.out) 203*4882a593Smuzhiyun-set(test_miniz_out test_miniz.out) 204*4882a593Smuzhiyun 205*4882a593Smuzhiyun add_executable(${test_out} test.c) 206*4882a593Smuzhiyun target_link_libraries(${test_out} zip) 207*4882a593Smuzhiyun-add_executable(${test_miniz_out} test_miniz.c) 208*4882a593Smuzhiyun-target_link_libraries(${test_miniz_out} zip) 209*4882a593Smuzhiyun 210*4882a593Smuzhiyun add_test(NAME ${test_out} COMMAND ${test_out}) 211*4882a593Smuzhiyun-add_test(NAME ${test_miniz_out} COMMAND ${test_miniz_out}) 212*4882a593Smuzhiyun 213*4882a593Smuzhiyun set(test_out ${test_out} PARENT_SCOPE) 214*4882a593Smuzhiyun-set(test_miniz_out ${test_miniz_out} PARENT_SCOPE) 215*4882a593Smuzhiyundiff --git a/contrib/zip/test/test.c b/contrib/zip/test/test.c 216*4882a593Smuzhiyunindex a9b2ddab1e..9cc2248ac0 100644 217*4882a593Smuzhiyun--- a/contrib/zip/test/test.c 218*4882a593Smuzhiyun+++ b/contrib/zip/test/test.c 219*4882a593Smuzhiyun@@ -47,7 +47,7 @@ static void test_write(void) { 220*4882a593Smuzhiyun assert(CRC32DATA1 == zip_entry_crc32(zip)); 221*4882a593Smuzhiyun ++total_entries; 222*4882a593Smuzhiyun assert(0 == zip_entry_close(zip)); 223*4882a593Smuzhiyun- 224*4882a593Smuzhiyun+ assert(0 == zip_is64(zip)); 225*4882a593Smuzhiyun zip_close(zip); 226*4882a593Smuzhiyun } 227*4882a593Smuzhiyun 228*4882a593Smuzhiyun@@ -92,6 +92,7 @@ static void test_read(void) { 229*4882a593Smuzhiyun size_t buftmp; 230*4882a593Smuzhiyun struct zip_t *zip = zip_open(ZIPNAME, 0, 'r'); 231*4882a593Smuzhiyun assert(zip != NULL); 232*4882a593Smuzhiyun+ assert(0 == zip_is64(zip)); 233*4882a593Smuzhiyun 234*4882a593Smuzhiyun assert(0 == zip_entry_open(zip, "test\\test-1.txt")); 235*4882a593Smuzhiyun assert(strlen(TESTDATA1) == zip_entry_size(zip)); 236*4882a593Smuzhiyun@@ -310,6 +311,7 @@ static void test_fwrite(void) { 237*4882a593Smuzhiyun assert(0 == zip_entry_open(zip, WFILE)); 238*4882a593Smuzhiyun assert(0 == zip_entry_fwrite(zip, WFILE)); 239*4882a593Smuzhiyun assert(0 == zip_entry_close(zip)); 240*4882a593Smuzhiyun+ assert(0 == zip_is64(zip)); 241*4882a593Smuzhiyun 242*4882a593Smuzhiyun zip_close(zip); 243*4882a593Smuzhiyun remove(WFILE); 244