diff --git a/app/build.gradle b/app/build.gradle index 977a1f8..ea2855c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -34,7 +34,7 @@ android { storePassword keystoreProperties['storePassword'] } } - compileSdk 34 + compileSdk 35 defaultConfig { applicationId "com.techbeloved.hymnbook" minSdkVersion 21 diff --git a/gradle.properties b/gradle.properties index 1c524da..d3f289b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,26 +1,21 @@ -# Project-wide Gradle settings. - -# IDE (e.g. Android Studio) users: -# Gradle settings configured through the IDE *will override* -# any settings specified in this file. - -# For more details on how to configure your build environment visit +## For more details on how to configure your build environment visit # http://www.gradle.org/docs/current/userguide/build_environment.html - +# # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. +# Default value: -Xmx1024m -XX:MaxPermSize=256m +# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 +# +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. For more details, visit +# https://developer.android.com/r/tools/gradle-multi-project-decoupled-projects +# org.gradle.parallel=true +#Tue Dec 24 17:56:33 CET 2024 android.defaults.buildfeatures.buildconfig=true android.enableJetifier=true android.nonFinalResIds=false android.nonTransitiveRClass=false android.useAndroidX=true -org.gradle.jvmargs=-Xmx1536m - -# When configured, Gradle will run in incubating parallel mode. -# This option should only be used with decoupled projects. More details, visit -# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -# org.gradle.parallel=true - -# Compose targets '[uikit]' are experimental and may have bugs! -org.jetbrains.compose.experimental.uikit.enabled=true compose.kotlin.native.manageCacheKind=false +org.gradle.jvmargs=-Xmx2048M -Dkotlin.daemon.jvm.options\="-Xmx2048M" +org.jetbrains.compose.experimental.uikit.enabled=true diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1dc4f22..d08a633 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,55 +1,55 @@ [versions] accompanist = "0.32.0" -agp = "8.5.0" +agp = "8.7.3" androidPdfViewer = "3.1.0-beta.1" -androidx_activity = "1.9.2" +androidx_activity = "1.9.3" androidx_appcompat = "1.7.0" -androidx_core_ktx = "1.13.1" +androidx_core_ktx = "1.15.0" androidx_datastore = "1.1.1" -androidx_fragment = "1.8.3" +androidx_fragment = "1.8.5" androidx_hilt_compiler = "1.2.0" androidx_hilt_work = "1.2.0" -androidx_lifecycle = "2.8.5" +androidx_lifecycle = "2.8.7" androidx_savedstate = "1.2.1" androidx_splashscreen = "1.0.1" androidx_test_core = "1.6.1" androidx_test_junit = "1.2.1" -androidx_work = "2.9.1" -androidx_work_runtime = "2.9.1" +androidx_work = "2.10.0" +androidx_work_runtime = "2.10.0" appUpdateKtx = "2.1.0" cardview = "1.0.0" -circularProgressBar = "1.2.2" +circularProgressBar = "1.2.3" coil = "2.4.0" compose_compiler = "1.5.11" -compose_constraintlayout = "1.0.1" -compose_material3 = "1.3.0" -compose_ui = "1.7.0" -composeBom = "2024.09.00" -compose_jetbrains = "1.6.11" -constraintlayout = "2.1.4" +compose_constraintlayout = "1.1.0" +compose_material3 = "1.3.1" +compose_ui = "1.7.6" +composeBom = "2024.12.01" +compose_jetbrains = "1.7.3" +constraintlayout = "2.2.0" xmlutil = "0.86.3" -core_library_desugaring = "2.1.2" +core_library_desugaring = "2.1.4" coreTestingVersion = "2.2.0" -coroutines = "1.8.1" +coroutines = "1.9.0" coroutinesTest = "1.8.1" -dateTime = "0.6.0" +dateTime = "0.6.1" detekt = "1.23.0" espresso = "3.6.1" -firebaseAnalytics = "22.1.0" +firebaseAnalytics = "22.1.2" firebaseCore = "21.1.1" -firebaseCrashlytics = "19.0.3" +firebaseCrashlytics = "19.3.0" firebaseCrashlyticsGradle = "3.0.2" firebaseDynamicLinks = "22.1.0" -firebaseFirestore = "25.1.0" -firebaseStorage = "21.0.0" +firebaseFirestore = "25.1.1" +firebaseStorage = "21.0.1" googleServices = "4.4.2" hilt_android = "2.49" hilt_navigation = "1.2.0" hiltAndroidCompiler = "2.48" koin = "3.4.3" kotlin = "2.0.0" -kotlinxCollectionsImmutable = "0.3.6" -kotlinxIo = "0.3.2" +kotlinxCollectionsImmutable = "0.3.7" +kotlinxIo = "0.6.0" ktor = "2.3.3" legacyPreferenceV14 = "1.0.0" legacySupportV4 = "1.0.0" @@ -58,24 +58,24 @@ lottie_compose = "6.1.0" material = "1.12.0" media = "1.7.0" mockitoKotlin = "2.1.0" -navigation_compose = "2.8.0" -navigationFragmentKtx = "2.8.0" -navigationSafeArgsGradlePlugin = "2.8.0" -okhttp = "4.11.0" +navigation_compose = "2.8.5" +navigationFragmentKtx = "2.8.5" +navigationSafeArgsGradlePlugin = "2.8.5" +okhttp = "4.12.0" okio = "3.9.0" paletteKtx = "1.0.0" preferenceKtx = "1.2.1" recyclerview = "1.3.2" roomRuntime = "2.6.1" runner = "1.6.2" -rxandroid = "2.1.0" +rxandroid = "2.1.1" rxbinding = "3.0.0-alpha2" rxbindingAppcompat = "3.0.0-alpha2" rxbindingCore = "3.0.0-alpha2" rxbindingMaterial = "3.0.0-alpha2" rxbindingRecyclerview = "3.0.0-alpha2" rxbindingViewpager = "3.0.0-alpha2" -rxjava = "2.2.10" +rxjava = "2.2.21" rxPreferences = "2.0.0" rxrelay = "2.1.0" serialization = "1.6.2" @@ -88,7 +88,7 @@ triplet = "3.7.0" voyager = "1.0.0-rc10" [libraries] -android-pdf-viewer = { module = "com.github.barteksc:android-pdf-viewer", version.ref = "androidPdfViewer" } +android-pdf-viewer = { module = "com.github.DImuthuUpe:AndroidPdfViewer", version.ref = "androidPdfViewer" } androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "androidx_appcompat" } androidx-cardview = { module = "androidx.cardview:cardview", version.ref = "cardview" } androidx-constraintlayout = { module = "androidx.constraintlayout:constraintlayout", version.ref = "constraintlayout" } @@ -125,7 +125,7 @@ androidx-datastore-android = { group = "androidx.datastore", name = "datastore-p androidx-work-rxjava2 = { module = "androidx.work:work-rxjava2", version.ref = "androidx_work" } androidx-work-testing = { module = "androidx.work:work-testing", version.ref = "androidx_work" } app-update-ktx = { module = "com.google.android.play:app-update-ktx", version.ref = "appUpdateKtx" } -circular-progress-bar = { module = "com.budiyev.android:circular-progress-bar", version.ref = "circularProgressBar" } +circular-progress-bar = { module = "com.github.yuriy-budiyev:circular-progress-bar", version.ref = "circularProgressBar" } compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "composeBom" } compose-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" } compose-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 7f93135..2c35211 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index b82aa23..09523c0 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index 1aa94a4..f5feea6 100755 --- a/gradlew +++ b/gradlew @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -55,7 +57,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -84,7 +86,8 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s +' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum diff --git a/gradlew.bat b/gradlew.bat index 93e3f59..9d21a21 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -13,6 +13,8 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## @@ -43,11 +45,11 @@ set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if %ERRORLEVEL% equ 0 goto execute -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail @@ -57,11 +59,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail diff --git a/iosApp/Podfile.lock b/iosApp/Podfile.lock index 0376651..1d93d73 100644 --- a/iosApp/Podfile.lock +++ b/iosApp/Podfile.lock @@ -1,22 +1,15 @@ PODS: - - shared (1.0): - - SSZipArchive (= 2.5.5) - - SSZipArchive (2.5.5) + - shared (1.0) DEPENDENCIES: - shared (from `../shared`) -SPEC REPOS: - trunk: - - SSZipArchive - EXTERNAL SOURCES: shared: :path: "../shared" SPEC CHECKSUMS: - shared: c71ce451a63419af870e81e7a6d7b0aae21746bb - SSZipArchive: c69881e8ac5521f0e622291387add5f60f30f3c4 + shared: 07d47f4d462ff6d066fe0c0e305ad445f9ca2443 PODFILE CHECKSUM: 78d6cc1b71b232202c48a29d4e6c34972c534c73 diff --git a/iosApp/Pods/Local Podspecs/shared.podspec.json b/iosApp/Pods/Local Podspecs/shared.podspec.json index 04d9aee..de57380 100644 --- a/iosApp/Pods/Local Podspecs/shared.podspec.json +++ b/iosApp/Pods/Local Podspecs/shared.podspec.json @@ -13,11 +13,6 @@ "platforms": { "ios": "16.0" }, - "dependencies": { - "SSZipArchive": [ - "2.5.5" - ] - }, "xcconfig": { "ENABLE_USER_SCRIPT_SANDBOXING": "NO" }, diff --git a/iosApp/Pods/Manifest.lock b/iosApp/Pods/Manifest.lock index 0376651..1d93d73 100644 --- a/iosApp/Pods/Manifest.lock +++ b/iosApp/Pods/Manifest.lock @@ -1,22 +1,15 @@ PODS: - - shared (1.0): - - SSZipArchive (= 2.5.5) - - SSZipArchive (2.5.5) + - shared (1.0) DEPENDENCIES: - shared (from `../shared`) -SPEC REPOS: - trunk: - - SSZipArchive - EXTERNAL SOURCES: shared: :path: "../shared" SPEC CHECKSUMS: - shared: c71ce451a63419af870e81e7a6d7b0aae21746bb - SSZipArchive: c69881e8ac5521f0e622291387add5f60f30f3c4 + shared: 07d47f4d462ff6d066fe0c0e305ad445f9ca2443 PODFILE CHECKSUM: 78d6cc1b71b232202c48a29d4e6c34972c534c73 diff --git a/iosApp/Pods/Pods.xcodeproj/project.pbxproj b/iosApp/Pods/Pods.xcodeproj/project.pbxproj index 94fb496..630ba32 100644 --- a/iosApp/Pods/Pods.xcodeproj/project.pbxproj +++ b/iosApp/Pods/Pods.xcodeproj/project.pbxproj @@ -9,86 +9,25 @@ /* Begin PBXAggregateTarget section */ 8777C9F6889E59EFFD631D80AEE9048B /* shared */ = { isa = PBXAggregateTarget; - buildConfigurationList = 136055CC500396A4B69BFF305C132B4D /* Build configuration list for PBXAggregateTarget "shared" */; + buildConfigurationList = B999BD58A146737F72CA68509B0BCE77 /* Build configuration list for PBXAggregateTarget "shared" */; buildPhases = ( - EF4ECBB0345782492AD817154D4ABAAC /* [CP-User] Build shared */, - 08C0BB731455BE443F24C2D89BA7AEAE /* [CP] Copy dSYMs */, + 11F372A9E68C08375C21A8D47B3CDB02 /* [CP-User] Build shared */, + 35C7D8836447FEC746DA683E14000153 /* [CP] Copy dSYMs */, ); dependencies = ( - B4EEB0BAD27171683DF46E925721931A /* PBXTargetDependency */, ); name = shared; }; /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 002892E1FB2C0F9B0BC38A5BD429379D /* mz_strm_zlib.c in Sources */ = {isa = PBXBuildFile; fileRef = 9C6E085514AF1D4E5EA0538B1419E0CC /* mz_strm_zlib.c */; }; - 0117D198F032B1E047DC9CBDFA298C8C /* SSZipArchive.h in Headers */ = {isa = PBXBuildFile; fileRef = C93377059BB91E3AD0B2E50823979892 /* SSZipArchive.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0A1CFA4976795262E58B28488169BDA7 /* SSZipArchive-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FAE037F032341AA58ADFCAAB5BE4452C /* SSZipArchive-dummy.m */; }; - 144D40C57C2FFBF78198D95BD2F22FFD /* mz_strm_wzaes.h in Headers */ = {isa = PBXBuildFile; fileRef = B4761B2DD776E6D941A2C5D13492F33B /* mz_strm_wzaes.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 14856E1D59BD1EF5AEF20B29B25DCD4E /* SSZipCommon.h in Headers */ = {isa = PBXBuildFile; fileRef = 4851AC6CD9951C3D4B23A22F13530C4F /* SSZipCommon.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1A0BC3853EBE5EED94678E85AF83BEE4 /* SSZipArchive.m in Sources */ = {isa = PBXBuildFile; fileRef = 283FB4C9BCEEA458D64CA544D7A1C4E5 /* SSZipArchive.m */; }; - 1D907C7D605FF1D68E3B476BE8797201 /* mz_os.c in Sources */ = {isa = PBXBuildFile; fileRef = CBAAF5DF64517AE31DC8571144259B71 /* mz_os.c */; }; - 3E73FE5CC60B9964AA8017BF7E5891C7 /* mz_strm_mem.h in Headers */ = {isa = PBXBuildFile; fileRef = B7D9F770817FD0FD5A2AC69CDDDAAF76 /* mz_strm_mem.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4A61FBB0B2D6F3830F15F63509A2730F /* mz_strm_buf.c in Sources */ = {isa = PBXBuildFile; fileRef = 3ACAE629AEB9BB57F0D182DD71F6846D /* mz_strm_buf.c */; }; - 4AE88CE0D1985969049C1DACA2F9CE78 /* mz_crypt_apple.c in Sources */ = {isa = PBXBuildFile; fileRef = 1FD7927EC1C5729F1565B45ECD24A9BD /* mz_crypt_apple.c */; }; - 4C39E137B1154658439F96863D2B2690 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C3B2A0B779CE31153B2C0D8A7F8DC7FE /* Security.framework */; }; - 51F1D067B0EBFC54D7EF8EC484CBC43F /* ZipArchive.h in Headers */ = {isa = PBXBuildFile; fileRef = FF0C68D28275CD99261E9487AA3C0985 /* ZipArchive.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 56D5EFC0EC218F88CCE38034A84D4950 /* mz_zip.c in Sources */ = {isa = PBXBuildFile; fileRef = 5D02B1B87FA64B2BF1CA5CD596E94C1F /* mz_zip.c */; }; - 7217FF34B790159F477F3CFFD4F3A7D6 /* mz_os.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AFA9FBEA4F6F228AA903B8B5D970607 /* mz_os.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 76C0898438C2D0E77D34BB5367E59A18 /* mz_compat.c in Sources */ = {isa = PBXBuildFile; fileRef = AF651FEA3AFBF170813A7F22FF620B43 /* mz_compat.c */; }; - 793A64D1A186B06981FAB04093002248 /* mz_strm_wzaes.c in Sources */ = {isa = PBXBuildFile; fileRef = D372A235896356A50F0304C7AB30B920 /* mz_strm_wzaes.c */; }; - 8408C3C76D1E104631667B88B2A81B49 /* mz.h in Headers */ = {isa = PBXBuildFile; fileRef = 688CCE7209670E42DFEB7315CCB7893F /* mz.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 863F5565BF1DF6471C6ADB6579935399 /* mz_compat.h in Headers */ = {isa = PBXBuildFile; fileRef = F5CD94E5F1924351AD768091D909FD4A /* mz_compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 969AF3B5F3ED9D9F04D6E0D562C4730C /* Pods-iosApp-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E6DB2A5F5DADA1DDE45F36B1A2D6AC16 /* Pods-iosApp-dummy.m */; }; - 974F0945355676BB1B47019EF6A105EA /* mz_strm_os.h in Headers */ = {isa = PBXBuildFile; fileRef = 2023D000D5848F7D6D6CEBFA6062DD2F /* mz_strm_os.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 98833DCDD2645BC49E632F9A456F8E9B /* mz_strm.c in Sources */ = {isa = PBXBuildFile; fileRef = 51F2EBB48FA8E6FCE9B2AE249633B351 /* mz_strm.c */; }; - 98C2034C498494A2AB28153089A7B499 /* mz_strm.h in Headers */ = {isa = PBXBuildFile; fileRef = B733D7694839AFCF1390AB9035C2B9BD /* mz_strm.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9C6F757FABA27C2357DCCCC7969ADF00 /* mz_strm_split.c in Sources */ = {isa = PBXBuildFile; fileRef = B8C29DA82AE86960E679ECDAE5A6476D /* mz_strm_split.c */; }; - 9D2DF10E1261D55D45E67C5C9C435D5A /* mz_strm_split.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EAF080D32DFAD3ACA47DE5108A756DD /* mz_strm_split.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9EF7F34D7EEA86E7185D214600DB95FB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 952925E838A0DE4D7BDC4EE54022633D /* Foundation.framework */; }; - A2255A47FA4E007D66EA9D672A297A39 /* mz_strm_zlib.h in Headers */ = {isa = PBXBuildFile; fileRef = 63082C75BCAF3BC22FED7CB68C52072C /* mz_strm_zlib.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A6E5F4983066BF4B21F1F403AD23281A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 952925E838A0DE4D7BDC4EE54022633D /* Foundation.framework */; }; - B0DB67E1C3F3336D495037EB4679DFC4 /* mz_os_posix.c in Sources */ = {isa = PBXBuildFile; fileRef = 02A6B34C33E5E3E328096FD0E6F72262 /* mz_os_posix.c */; }; - B8E8CA6538CEA52F030EE7CAAC0FE036 /* SSZipArchive-SSZipArchive in Resources */ = {isa = PBXBuildFile; fileRef = 47818FA269C04B50A51A8D1D2122C796 /* SSZipArchive-SSZipArchive */; }; - BF873702C9F58CC423C2DE39689C0F32 /* mz_strm_buf.h in Headers */ = {isa = PBXBuildFile; fileRef = 383DA5977ABE5FA2EEC3B98A7FFD5A93 /* mz_strm_buf.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C00C0620493D1D4C11A22E695B401FF3 /* mz_strm_os_posix.c in Sources */ = {isa = PBXBuildFile; fileRef = 323F69BA120C7F06A4A98716F66BA455 /* mz_strm_os_posix.c */; }; - C494954D46BCF23BC9B945852D8F2150 /* mz_zip.h in Headers */ = {isa = PBXBuildFile; fileRef = 52AEBAA81A7E261CCD0932E4DD01E3A8 /* mz_zip.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C650A1106939EF592504C846268FEB98 /* SSZipArchive-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2FFEB5ADB09A533B9B2CA751CBCFFAC9 /* SSZipArchive-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C807D36A34B9607A8426C36B8082A175 /* mz_strm_mem.c in Sources */ = {isa = PBXBuildFile; fileRef = 873C83BCD8A23D19D4E730F8E5EA1535 /* mz_strm_mem.c */; }; - D24B1C0521F4FED9BD89B448835DFC36 /* mz_strm_pkcrypt.c in Sources */ = {isa = PBXBuildFile; fileRef = 2DC8908238CF192D71A59A9E40E36B05 /* mz_strm_pkcrypt.c */; }; - D2878BB2E03B171F7C72191489E1374F /* mz_zip_rw.c in Sources */ = {isa = PBXBuildFile; fileRef = 7A213D3B7B41A6EC84EC1405F64E473A /* mz_zip_rw.c */; }; - D5962B6FECDBB5D6356D1D6541C678D7 /* mz_crypt.c in Sources */ = {isa = PBXBuildFile; fileRef = 0829234D10C58BB4224CA116AD51C49C /* mz_crypt.c */; }; - D791DEBB6AFD8F4C8368F0A6D9B60902 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 211F7718557006D679DC5406BA2238AC /* PrivacyInfo.xcprivacy */; }; - E53DF50A58F946B86F9A12A349E7B1C8 /* mz_crypt.h in Headers */ = {isa = PBXBuildFile; fileRef = 27CDF49A053DC51CEB3159974445DCA7 /* mz_crypt.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ED2B06213E5DE21F5F88AFDA08932668 /* mz_strm_pkcrypt.h in Headers */ = {isa = PBXBuildFile; fileRef = 3EEE8BE4E24F79E99D9E2D737444B60A /* mz_strm_pkcrypt.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F13E32C3EEA8A476A2C3B49B1B2B2D4B /* Pods-iosApp-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 015E0D7EA7331961AB63E5AFECA86BB5 /* Pods-iosApp-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F675ED4E8570203AFFE869DBA171585E /* mz_zip_rw.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D8163CE62D5F00CF56282A85642FA30 /* mz_zip_rw.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 648F16425FEF89525AE0325F5A984B86 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */; }; + 8749C8E8DC500B064FA0BC7A78C38A2A /* Pods-iosApp-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E6DB2A5F5DADA1DDE45F36B1A2D6AC16 /* Pods-iosApp-dummy.m */; }; + 8801CBFD38B946597BD07145B2EEFC9F /* Pods-iosApp-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 015E0D7EA7331961AB63E5AFECA86BB5 /* Pods-iosApp-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 04BA107AFC104A8328725FF0C990269E /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = F60E38364AFF5E1349FF07415B944396; - remoteInfo = SSZipArchive; - }; - 0C4A7B882903AE95F7850E7B52353CBB /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = D8EA004283833F4910C46F5335BE8F07; - remoteInfo = "SSZipArchive-SSZipArchive"; - }; - 9FDF226F9D0FD9BE214B16BE9BB4AD26 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = F60E38364AFF5E1349FF07415B944396; - remoteInfo = SSZipArchive; - }; - D6048E58F06B5E79F2A9BDDD43FB3BDE /* PBXContainerItemProxy */ = { + F9A9A672240E698F0408C3154CEF71F9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; @@ -99,118 +38,47 @@ /* Begin PBXFileReference section */ 015E0D7EA7331961AB63E5AFECA86BB5 /* Pods-iosApp-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-iosApp-umbrella.h"; sourceTree = ""; }; - 02A6B34C33E5E3E328096FD0E6F72262 /* mz_os_posix.c */ = {isa = PBXFileReference; includeInIndex = 1; name = mz_os_posix.c; path = SSZipArchive/minizip/mz_os_posix.c; sourceTree = ""; }; - 05D64E993E2BF1A2649259AFA5993BD1 /* SSZipArchive-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SSZipArchive-Info.plist"; sourceTree = ""; }; - 0829234D10C58BB4224CA116AD51C49C /* mz_crypt.c */ = {isa = PBXFileReference; includeInIndex = 1; name = mz_crypt.c; path = SSZipArchive/minizip/mz_crypt.c; sourceTree = ""; }; 0F9A6AEB767C84537A3BA5E4A9C1A5E3 /* shared.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = shared.release.xcconfig; sourceTree = ""; }; 11C9B998CE0869936AE6BE69270DAAC9 /* Pods-iosApp.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-iosApp.modulemap"; sourceTree = ""; }; - 1FD7927EC1C5729F1565B45ECD24A9BD /* mz_crypt_apple.c */ = {isa = PBXFileReference; includeInIndex = 1; name = mz_crypt_apple.c; path = SSZipArchive/minizip/mz_crypt_apple.c; sourceTree = ""; }; - 2023D000D5848F7D6D6CEBFA6062DD2F /* mz_strm_os.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = mz_strm_os.h; path = SSZipArchive/minizip/mz_strm_os.h; sourceTree = ""; }; - 211F7718557006D679DC5406BA2238AC /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = "SSZipArchive/Supporting Files/PrivacyInfo.xcprivacy"; sourceTree = ""; }; 244FC2DAA936A0B07ACEFDC74E2D54B8 /* Pods-iosApp.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-iosApp.release.xcconfig"; sourceTree = ""; }; - 27CDF49A053DC51CEB3159974445DCA7 /* mz_crypt.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = mz_crypt.h; path = SSZipArchive/minizip/mz_crypt.h; sourceTree = ""; }; - 283FB4C9BCEEA458D64CA544D7A1C4E5 /* SSZipArchive.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SSZipArchive.m; path = SSZipArchive/SSZipArchive.m; sourceTree = ""; }; - 2DC8908238CF192D71A59A9E40E36B05 /* mz_strm_pkcrypt.c */ = {isa = PBXFileReference; includeInIndex = 1; name = mz_strm_pkcrypt.c; path = SSZipArchive/minizip/mz_strm_pkcrypt.c; sourceTree = ""; }; - 2FFEB5ADB09A533B9B2CA751CBCFFAC9 /* SSZipArchive-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SSZipArchive-umbrella.h"; sourceTree = ""; }; - 323F69BA120C7F06A4A98716F66BA455 /* mz_strm_os_posix.c */ = {isa = PBXFileReference; includeInIndex = 1; name = mz_strm_os_posix.c; path = SSZipArchive/minizip/mz_strm_os_posix.c; sourceTree = ""; }; - 383DA5977ABE5FA2EEC3B98A7FFD5A93 /* mz_strm_buf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = mz_strm_buf.h; path = SSZipArchive/minizip/mz_strm_buf.h; sourceTree = ""; }; - 3ACAE629AEB9BB57F0D182DD71F6846D /* mz_strm_buf.c */ = {isa = PBXFileReference; includeInIndex = 1; name = mz_strm_buf.c; path = SSZipArchive/minizip/mz_strm_buf.c; sourceTree = ""; }; - 3EEE8BE4E24F79E99D9E2D737444B60A /* mz_strm_pkcrypt.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = mz_strm_pkcrypt.h; path = SSZipArchive/minizip/mz_strm_pkcrypt.h; sourceTree = ""; }; - 47818FA269C04B50A51A8D1D2122C796 /* SSZipArchive-SSZipArchive */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "SSZipArchive-SSZipArchive"; path = SSZipArchive.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - 4851AC6CD9951C3D4B23A22F13530C4F /* SSZipCommon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SSZipCommon.h; path = SSZipArchive/SSZipCommon.h; sourceTree = ""; }; 4F915F7AC439A855C398A223F3F26D3C /* shared-copy-dsyms.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "shared-copy-dsyms.sh"; sourceTree = ""; }; - 51F2EBB48FA8E6FCE9B2AE249633B351 /* mz_strm.c */ = {isa = PBXFileReference; includeInIndex = 1; name = mz_strm.c; path = SSZipArchive/minizip/mz_strm.c; sourceTree = ""; }; - 52AEBAA81A7E261CCD0932E4DD01E3A8 /* mz_zip.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = mz_zip.h; path = SSZipArchive/minizip/mz_zip.h; sourceTree = ""; }; 55ABB06C8A1800962A74E007E7733796 /* Pods-iosApp-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-iosApp-frameworks.sh"; sourceTree = ""; }; - 5D02B1B87FA64B2BF1CA5CD596E94C1F /* mz_zip.c */ = {isa = PBXFileReference; includeInIndex = 1; name = mz_zip.c; path = SSZipArchive/minizip/mz_zip.c; sourceTree = ""; }; - 5D2179B6B15B7920CE567DD4C3992510 /* SSZipArchive.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SSZipArchive.debug.xcconfig; sourceTree = ""; }; - 63082C75BCAF3BC22FED7CB68C52072C /* mz_strm_zlib.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = mz_strm_zlib.h; path = SSZipArchive/minizip/mz_strm_zlib.h; sourceTree = ""; }; 684DD02479A5D3B67FF60FB7F6F77AB4 /* shared.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = shared.debug.xcconfig; sourceTree = ""; }; - 688CCE7209670E42DFEB7315CCB7893F /* mz.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = mz.h; path = SSZipArchive/minizip/mz.h; sourceTree = ""; }; - 6CE4F5B4EFD299B0D0453ED9A2C9CEAA /* SSZipArchive-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SSZipArchive-prefix.pch"; sourceTree = ""; }; 6F3B5FED07117E377CFAC3D49B490F17 /* Pods-iosApp-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-iosApp-resources.sh"; sourceTree = ""; }; + 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 76A263267985B0185D85E24D40FCEE9A /* Pods-iosApp-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-iosApp-Info.plist"; sourceTree = ""; }; 76D28488EA8CF5C697DFF07967A9960E /* Pods-iosApp-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-iosApp-acknowledgements.plist"; sourceTree = ""; }; - 7A213D3B7B41A6EC84EC1405F64E473A /* mz_zip_rw.c */ = {isa = PBXFileReference; includeInIndex = 1; name = mz_zip_rw.c; path = SSZipArchive/minizip/mz_zip_rw.c; sourceTree = ""; }; - 7D8163CE62D5F00CF56282A85642FA30 /* mz_zip_rw.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = mz_zip_rw.h; path = SSZipArchive/minizip/mz_zip_rw.h; sourceTree = ""; }; - 873C83BCD8A23D19D4E730F8E5EA1535 /* mz_strm_mem.c */ = {isa = PBXFileReference; includeInIndex = 1; name = mz_strm_mem.c; path = SSZipArchive/minizip/mz_strm_mem.c; sourceTree = ""; }; - 8EAF080D32DFAD3ACA47DE5108A756DD /* mz_strm_split.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = mz_strm_split.h; path = SSZipArchive/minizip/mz_strm_split.h; sourceTree = ""; }; - 91B23470DEB9A986332BEB5034234BC7 /* SSZipArchive */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SSZipArchive; path = SSZipArchive.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 952925E838A0DE4D7BDC4EE54022633D /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 9ACA11ADF2A5976161FD7FA38D35D572 /* shared.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = shared.framework; path = build/cocoapods/framework/shared.framework; sourceTree = ""; }; - 9AFA9FBEA4F6F228AA903B8B5D970607 /* mz_os.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = mz_os.h; path = SSZipArchive/minizip/mz_os.h; sourceTree = ""; }; - 9C6E085514AF1D4E5EA0538B1419E0CC /* mz_strm_zlib.c */ = {isa = PBXFileReference; includeInIndex = 1; name = mz_strm_zlib.c; path = SSZipArchive/minizip/mz_strm_zlib.c; sourceTree = ""; }; - 9CC58B9CA9209B212969A59039CC07CE /* ResourceBundle-SSZipArchive-SSZipArchive-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-SSZipArchive-SSZipArchive-Info.plist"; sourceTree = ""; }; 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - AF651FEA3AFBF170813A7F22FF620B43 /* mz_compat.c */ = {isa = PBXFileReference; includeInIndex = 1; name = mz_compat.c; path = SSZipArchive/minizip/mz_compat.c; sourceTree = ""; }; B097DD7534E741D5C41838011D755842 /* Pods-iosApp */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-iosApp"; path = Pods_iosApp.framework; sourceTree = BUILT_PRODUCTS_DIR; }; B35458AC1E3C735EF4C3542BFB2295C3 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; - B4761B2DD776E6D941A2C5D13492F33B /* mz_strm_wzaes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = mz_strm_wzaes.h; path = SSZipArchive/minizip/mz_strm_wzaes.h; sourceTree = ""; }; - B733D7694839AFCF1390AB9035C2B9BD /* mz_strm.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = mz_strm.h; path = SSZipArchive/minizip/mz_strm.h; sourceTree = ""; }; - B7D9F770817FD0FD5A2AC69CDDDAAF76 /* mz_strm_mem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = mz_strm_mem.h; path = SSZipArchive/minizip/mz_strm_mem.h; sourceTree = ""; }; - B8C29DA82AE86960E679ECDAE5A6476D /* mz_strm_split.c */ = {isa = PBXFileReference; includeInIndex = 1; name = mz_strm_split.c; path = SSZipArchive/minizip/mz_strm_split.c; sourceTree = ""; }; - C3B2A0B779CE31153B2C0D8A7F8DC7FE /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; - C93377059BB91E3AD0B2E50823979892 /* SSZipArchive.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SSZipArchive.h; path = SSZipArchive/SSZipArchive.h; sourceTree = ""; }; - CBAAF5DF64517AE31DC8571144259B71 /* mz_os.c */ = {isa = PBXFileReference; includeInIndex = 1; name = mz_os.c; path = SSZipArchive/minizip/mz_os.c; sourceTree = ""; }; - D372A235896356A50F0304C7AB30B920 /* mz_strm_wzaes.c */ = {isa = PBXFileReference; includeInIndex = 1; name = mz_strm_wzaes.c; path = SSZipArchive/minizip/mz_strm_wzaes.c; sourceTree = ""; }; D73DD927398D30A154E13C5CA1ADC569 /* compose-resources */ = {isa = PBXFileReference; includeInIndex = 1; name = "compose-resources"; path = "build/compose/cocoapods/compose-resources"; sourceTree = ""; }; E462E23B3674BF94EAB1504D506F2803 /* Pods-iosApp.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-iosApp.debug.xcconfig"; sourceTree = ""; }; E4C923318724794E3CC670804C2D6A6B /* Pods-iosApp-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-iosApp-acknowledgements.markdown"; sourceTree = ""; }; E6DB2A5F5DADA1DDE45F36B1A2D6AC16 /* Pods-iosApp-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-iosApp-dummy.m"; sourceTree = ""; }; - E703ACCDEFD5286D4A954AC9F5710572 /* SSZipArchive.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SSZipArchive.release.xcconfig; sourceTree = ""; }; EF7A7BCB823323E712B5BF78CF5045A3 /* shared.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = shared.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - F5CD94E5F1924351AD768091D909FD4A /* mz_compat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = mz_compat.h; path = SSZipArchive/minizip/mz_compat.h; sourceTree = ""; }; - FAE037F032341AA58ADFCAAB5BE4452C /* SSZipArchive-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SSZipArchive-dummy.m"; sourceTree = ""; }; - FD857A5A0DC7CCBC0D68447E6C3FAA60 /* SSZipArchive.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SSZipArchive.modulemap; sourceTree = ""; }; - FF0C68D28275CD99261E9487AA3C0985 /* ZipArchive.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ZipArchive.h; path = SSZipArchive/include/ZipArchive.h; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 47EA578F2AD5EF03BAE58CB511C54B40 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - A6E5F4983066BF4B21F1F403AD23281A /* Foundation.framework in Frameworks */, - 4C39E137B1154658439F96863D2B2690 /* Security.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D04241D47D5429EFBB290C7B94144216 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 9EF7F34D7EEA86E7185D214600DB95FB /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - F24383B59AB41D863CCECA299CD2B4D2 /* Frameworks */ = { + CC3CD5459C4A5476C5A93268587E63E7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 648F16425FEF89525AE0325F5A984B86 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 08F5D823EB8D07EE3223B0BD179F516F /* Products */ = { + 1F86AA6785DF34AFD5A71790761717DE /* Products */ = { isa = PBXGroup; children = ( B097DD7534E741D5C41838011D755842 /* Pods-iosApp */, - 91B23470DEB9A986332BEB5034234BC7 /* SSZipArchive */, - 47818FA269C04B50A51A8D1D2122C796 /* SSZipArchive-SSZipArchive */, ); name = Products; sourceTree = ""; }; - 1628BF05B4CAFDCC3549A101F5A10A17 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 7CE426AC267333500FABE7BA0A5A42A0 /* iOS */, - ); - name = Frameworks; - sourceTree = ""; - }; 2F940969F6D58F34368E23EFD1DC01F9 /* shared */ = { isa = PBXGroup; children = ( @@ -242,53 +110,20 @@ path = "../iosApp/Pods/Target Support Files/shared"; sourceTree = ""; }; - 58AAD176B64323B9974E5B70EC8B12DC /* Development Pods */ = { - isa = PBXGroup; - children = ( - 2F940969F6D58F34368E23EFD1DC01F9 /* shared */, - ); - name = "Development Pods"; - sourceTree = ""; - }; - 61C93E04CE1D2A291AD98FA5D7780D67 /* Support Files */ = { - isa = PBXGroup; - children = ( - 9CC58B9CA9209B212969A59039CC07CE /* ResourceBundle-SSZipArchive-SSZipArchive-Info.plist */, - FD857A5A0DC7CCBC0D68447E6C3FAA60 /* SSZipArchive.modulemap */, - FAE037F032341AA58ADFCAAB5BE4452C /* SSZipArchive-dummy.m */, - 05D64E993E2BF1A2649259AFA5993BD1 /* SSZipArchive-Info.plist */, - 6CE4F5B4EFD299B0D0453ED9A2C9CEAA /* SSZipArchive-prefix.pch */, - 2FFEB5ADB09A533B9B2CA751CBCFFAC9 /* SSZipArchive-umbrella.h */, - 5D2179B6B15B7920CE567DD4C3992510 /* SSZipArchive.debug.xcconfig */, - E703ACCDEFD5286D4A954AC9F5710572 /* SSZipArchive.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/SSZipArchive"; - sourceTree = ""; - }; - 68E6168DC351BE80EF7E221F43112E77 /* Pods */ = { + 578452D2E740E91742655AC8F1636D1F /* iOS */ = { isa = PBXGroup; children = ( - CFC8AF34F4A525BC0DCF2BC95C7211C5 /* SSZipArchive */, - ); - name = Pods; - sourceTree = ""; - }; - 7CE426AC267333500FABE7BA0A5A42A0 /* iOS */ = { - isa = PBXGroup; - children = ( - 952925E838A0DE4D7BDC4EE54022633D /* Foundation.framework */, - C3B2A0B779CE31153B2C0D8A7F8DC7FE /* Security.framework */, + 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */, ); name = iOS; sourceTree = ""; }; - 8306F87532B999069CE2121FB1440423 /* Resources */ = { + 58AAD176B64323B9974E5B70EC8B12DC /* Development Pods */ = { isa = PBXGroup; children = ( - 211F7718557006D679DC5406BA2238AC /* PrivacyInfo.xcprivacy */, + 2F940969F6D58F34368E23EFD1DC01F9 /* shared */, ); - name = Resources; + name = "Development Pods"; sourceTree = ""; }; B62EC5E3E0ACE395E484B94E093B861A /* Pod */ = { @@ -323,54 +158,18 @@ children = ( 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, 58AAD176B64323B9974E5B70EC8B12DC /* Development Pods */, - 1628BF05B4CAFDCC3549A101F5A10A17 /* Frameworks */, - 68E6168DC351BE80EF7E221F43112E77 /* Pods */, - 08F5D823EB8D07EE3223B0BD179F516F /* Products */, + D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */, + 1F86AA6785DF34AFD5A71790761717DE /* Products */, D456857FB6E5BC3266BEC21401D60DB5 /* Targets Support Files */, ); sourceTree = ""; }; - CFC8AF34F4A525BC0DCF2BC95C7211C5 /* SSZipArchive */ = { + D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */ = { isa = PBXGroup; children = ( - 688CCE7209670E42DFEB7315CCB7893F /* mz.h */, - AF651FEA3AFBF170813A7F22FF620B43 /* mz_compat.c */, - F5CD94E5F1924351AD768091D909FD4A /* mz_compat.h */, - 0829234D10C58BB4224CA116AD51C49C /* mz_crypt.c */, - 27CDF49A053DC51CEB3159974445DCA7 /* mz_crypt.h */, - 1FD7927EC1C5729F1565B45ECD24A9BD /* mz_crypt_apple.c */, - CBAAF5DF64517AE31DC8571144259B71 /* mz_os.c */, - 9AFA9FBEA4F6F228AA903B8B5D970607 /* mz_os.h */, - 02A6B34C33E5E3E328096FD0E6F72262 /* mz_os_posix.c */, - 51F2EBB48FA8E6FCE9B2AE249633B351 /* mz_strm.c */, - B733D7694839AFCF1390AB9035C2B9BD /* mz_strm.h */, - 3ACAE629AEB9BB57F0D182DD71F6846D /* mz_strm_buf.c */, - 383DA5977ABE5FA2EEC3B98A7FFD5A93 /* mz_strm_buf.h */, - 873C83BCD8A23D19D4E730F8E5EA1535 /* mz_strm_mem.c */, - B7D9F770817FD0FD5A2AC69CDDDAAF76 /* mz_strm_mem.h */, - 2023D000D5848F7D6D6CEBFA6062DD2F /* mz_strm_os.h */, - 323F69BA120C7F06A4A98716F66BA455 /* mz_strm_os_posix.c */, - 2DC8908238CF192D71A59A9E40E36B05 /* mz_strm_pkcrypt.c */, - 3EEE8BE4E24F79E99D9E2D737444B60A /* mz_strm_pkcrypt.h */, - B8C29DA82AE86960E679ECDAE5A6476D /* mz_strm_split.c */, - 8EAF080D32DFAD3ACA47DE5108A756DD /* mz_strm_split.h */, - D372A235896356A50F0304C7AB30B920 /* mz_strm_wzaes.c */, - B4761B2DD776E6D941A2C5D13492F33B /* mz_strm_wzaes.h */, - 9C6E085514AF1D4E5EA0538B1419E0CC /* mz_strm_zlib.c */, - 63082C75BCAF3BC22FED7CB68C52072C /* mz_strm_zlib.h */, - 5D02B1B87FA64B2BF1CA5CD596E94C1F /* mz_zip.c */, - 52AEBAA81A7E261CCD0932E4DD01E3A8 /* mz_zip.h */, - 7A213D3B7B41A6EC84EC1405F64E473A /* mz_zip_rw.c */, - 7D8163CE62D5F00CF56282A85642FA30 /* mz_zip_rw.h */, - C93377059BB91E3AD0B2E50823979892 /* SSZipArchive.h */, - 283FB4C9BCEEA458D64CA544D7A1C4E5 /* SSZipArchive.m */, - 4851AC6CD9951C3D4B23A22F13530C4F /* SSZipCommon.h */, - FF0C68D28275CD99261E9487AA3C0985 /* ZipArchive.h */, - 8306F87532B999069CE2121FB1440423 /* Resources */, - 61C93E04CE1D2A291AD98FA5D7780D67 /* Support Files */, + 578452D2E740E91742655AC8F1636D1F /* iOS */, ); - name = SSZipArchive; - path = SSZipArchive; + name = Frameworks; sourceTree = ""; }; D456857FB6E5BC3266BEC21401D60DB5 /* Targets Support Files */ = { @@ -384,98 +183,36 @@ /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 984C303A9733400E6AF11D0878A85C3B /* Headers */ = { + DA71CB665A4F7860DB550FAA48FB6AD2 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - F13E32C3EEA8A476A2C3B49B1B2B2D4B /* Pods-iosApp-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - CCACE60D3BE06957469777802838D989 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 8408C3C76D1E104631667B88B2A81B49 /* mz.h in Headers */, - 863F5565BF1DF6471C6ADB6579935399 /* mz_compat.h in Headers */, - E53DF50A58F946B86F9A12A349E7B1C8 /* mz_crypt.h in Headers */, - 7217FF34B790159F477F3CFFD4F3A7D6 /* mz_os.h in Headers */, - 98C2034C498494A2AB28153089A7B499 /* mz_strm.h in Headers */, - BF873702C9F58CC423C2DE39689C0F32 /* mz_strm_buf.h in Headers */, - 3E73FE5CC60B9964AA8017BF7E5891C7 /* mz_strm_mem.h in Headers */, - 974F0945355676BB1B47019EF6A105EA /* mz_strm_os.h in Headers */, - ED2B06213E5DE21F5F88AFDA08932668 /* mz_strm_pkcrypt.h in Headers */, - 9D2DF10E1261D55D45E67C5C9C435D5A /* mz_strm_split.h in Headers */, - 144D40C57C2FFBF78198D95BD2F22FFD /* mz_strm_wzaes.h in Headers */, - A2255A47FA4E007D66EA9D672A297A39 /* mz_strm_zlib.h in Headers */, - C494954D46BCF23BC9B945852D8F2150 /* mz_zip.h in Headers */, - F675ED4E8570203AFFE869DBA171585E /* mz_zip_rw.h in Headers */, - 0117D198F032B1E047DC9CBDFA298C8C /* SSZipArchive.h in Headers */, - C650A1106939EF592504C846268FEB98 /* SSZipArchive-umbrella.h in Headers */, - 14856E1D59BD1EF5AEF20B29B25DCD4E /* SSZipCommon.h in Headers */, - 51F1D067B0EBFC54D7EF8EC484CBC43F /* ZipArchive.h in Headers */, + 8801CBFD38B946597BD07145B2EEFC9F /* Pods-iosApp-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ - D8EA004283833F4910C46F5335BE8F07 /* SSZipArchive-SSZipArchive */ = { - isa = PBXNativeTarget; - buildConfigurationList = 9ECA9181C024F4C5D83C9D62FE2E6E02 /* Build configuration list for PBXNativeTarget "SSZipArchive-SSZipArchive" */; - buildPhases = ( - E33C6F7C2661651B3EAEA7F6AF4F4924 /* Sources */, - F24383B59AB41D863CCECA299CD2B4D2 /* Frameworks */, - C947167D9BF8467DBF471E103160579B /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "SSZipArchive-SSZipArchive"; - productName = SSZipArchive; - productReference = 47818FA269C04B50A51A8D1D2122C796 /* SSZipArchive-SSZipArchive */; - productType = "com.apple.product-type.bundle"; - }; ED39C638569286489CD697A6C8964146 /* Pods-iosApp */ = { isa = PBXNativeTarget; - buildConfigurationList = 39A8AB19650569842DE5D13D21B10591 /* Build configuration list for PBXNativeTarget "Pods-iosApp" */; + buildConfigurationList = 9F1E85ECB672A0CC96333A6C6DF60EE6 /* Build configuration list for PBXNativeTarget "Pods-iosApp" */; buildPhases = ( - 984C303A9733400E6AF11D0878A85C3B /* Headers */, - 07864118F993464E75047FAEBA2337CE /* Sources */, - D04241D47D5429EFBB290C7B94144216 /* Frameworks */, - 69CA5A8DBBDF561490A62D085D97910D /* Resources */, + DA71CB665A4F7860DB550FAA48FB6AD2 /* Headers */, + EB28A529759E3D2117E28CE3CB8387D3 /* Sources */, + CC3CD5459C4A5476C5A93268587E63E7 /* Frameworks */, + 0EC1C62FF9B25EAB2D236D122EAF4C98 /* Resources */, ); buildRules = ( ); dependencies = ( - FB4523B5187DAC0C28C0AC04B837F12F /* PBXTargetDependency */, - 75555D7C1AEB53FCE67A8C37C319C661 /* PBXTargetDependency */, + FD630170474A17DCE0203F9AE4D4EEBE /* PBXTargetDependency */, ); name = "Pods-iosApp"; productName = Pods_iosApp; productReference = B097DD7534E741D5C41838011D755842 /* Pods-iosApp */; productType = "com.apple.product-type.framework"; }; - F60E38364AFF5E1349FF07415B944396 /* SSZipArchive */ = { - isa = PBXNativeTarget; - buildConfigurationList = FC4800E27F73FEE5BBA1151225128DED /* Build configuration list for PBXNativeTarget "SSZipArchive" */; - buildPhases = ( - CCACE60D3BE06957469777802838D989 /* Headers */, - 5ACDB1DD302AA665E1800C21B0C98E38 /* Sources */, - 47EA578F2AD5EF03BAE58CB511C54B40 /* Frameworks */, - CD6F83C74F2625998FC5E7A1BE7D089B /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - E8CDFB77E167114A93089DC8D8668249 /* PBXTargetDependency */, - ); - name = SSZipArchive; - productName = SSZipArchive; - productReference = 91B23470DEB9A986332BEB5034234BC7 /* SSZipArchive */; - productType = "com.apple.product-type.framework"; - }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -494,46 +231,38 @@ en, ); mainGroup = CF1408CF629C7361332E53B88F7BD30C; - productRefGroup = 08F5D823EB8D07EE3223B0BD179F516F /* Products */; + productRefGroup = 1F86AA6785DF34AFD5A71790761717DE /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( ED39C638569286489CD697A6C8964146 /* Pods-iosApp */, 8777C9F6889E59EFFD631D80AEE9048B /* shared */, - F60E38364AFF5E1349FF07415B944396 /* SSZipArchive */, - D8EA004283833F4910C46F5335BE8F07 /* SSZipArchive-SSZipArchive */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 69CA5A8DBBDF561490A62D085D97910D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C947167D9BF8467DBF471E103160579B /* Resources */ = { + 0EC1C62FF9B25EAB2D236D122EAF4C98 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - D791DEBB6AFD8F4C8368F0A6D9B60902 /* PrivacyInfo.xcprivacy in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - CD6F83C74F2625998FC5E7A1BE7D089B /* Resources */ = { - isa = PBXResourcesBuildPhase; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 11F372A9E68C08375C21A8D47B3CDB02 /* [CP-User] Build shared */ = { + isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( - B8E8CA6538CEA52F030EE7CAAC0FE036 /* SSZipArchive-SSZipArchive in Resources */, ); + name = "[CP-User] Build shared"; runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = " if [ \"YES\" = \"$OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED\" ]; then\n echo \"Skipping Gradle build task invocation due to OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED environment variable set to \"YES\"\"\n exit 0\n fi\n set -ev\n REPO_ROOT=\"$PODS_TARGET_SRCROOT\"\n \"$REPO_ROOT/../gradlew\" -p \"$REPO_ROOT\" $KOTLIN_PROJECT_PATH:syncFramework -Pkotlin.native.cocoapods.platform=$PLATFORM_NAME -Pkotlin.native.cocoapods.archs=\"$ARCHS\" -Pkotlin.native.cocoapods.configuration=\"$CONFIGURATION\"\n"; }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 08C0BB731455BE443F24C2D89BA7AEAE /* [CP] Copy dSYMs */ = { + 35C7D8836447FEC746DA683E14000153 /* [CP] Copy dSYMs */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -550,104 +279,66 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/shared/shared-copy-dsyms.sh\"\n"; showEnvVarsInLog = 0; }; - EF4ECBB0345782492AD817154D4ABAAC /* [CP-User] Build shared */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - name = "[CP-User] Build shared"; - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = " if [ \"YES\" = \"$OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED\" ]; then\n echo \"Skipping Gradle build task invocation due to OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED environment variable set to \"YES\"\"\n exit 0\n fi\n set -ev\n REPO_ROOT=\"$PODS_TARGET_SRCROOT\"\n \"$REPO_ROOT/../gradlew\" -p \"$REPO_ROOT\" $KOTLIN_PROJECT_PATH:syncFramework -Pkotlin.native.cocoapods.platform=$PLATFORM_NAME -Pkotlin.native.cocoapods.archs=\"$ARCHS\" -Pkotlin.native.cocoapods.configuration=\"$CONFIGURATION\"\n"; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 07864118F993464E75047FAEBA2337CE /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 969AF3B5F3ED9D9F04D6E0D562C4730C /* Pods-iosApp-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5ACDB1DD302AA665E1800C21B0C98E38 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 76C0898438C2D0E77D34BB5367E59A18 /* mz_compat.c in Sources */, - D5962B6FECDBB5D6356D1D6541C678D7 /* mz_crypt.c in Sources */, - 4AE88CE0D1985969049C1DACA2F9CE78 /* mz_crypt_apple.c in Sources */, - 1D907C7D605FF1D68E3B476BE8797201 /* mz_os.c in Sources */, - B0DB67E1C3F3336D495037EB4679DFC4 /* mz_os_posix.c in Sources */, - 98833DCDD2645BC49E632F9A456F8E9B /* mz_strm.c in Sources */, - 4A61FBB0B2D6F3830F15F63509A2730F /* mz_strm_buf.c in Sources */, - C807D36A34B9607A8426C36B8082A175 /* mz_strm_mem.c in Sources */, - C00C0620493D1D4C11A22E695B401FF3 /* mz_strm_os_posix.c in Sources */, - D24B1C0521F4FED9BD89B448835DFC36 /* mz_strm_pkcrypt.c in Sources */, - 9C6F757FABA27C2357DCCCC7969ADF00 /* mz_strm_split.c in Sources */, - 793A64D1A186B06981FAB04093002248 /* mz_strm_wzaes.c in Sources */, - 002892E1FB2C0F9B0BC38A5BD429379D /* mz_strm_zlib.c in Sources */, - 56D5EFC0EC218F88CCE38034A84D4950 /* mz_zip.c in Sources */, - D2878BB2E03B171F7C72191489E1374F /* mz_zip_rw.c in Sources */, - 1A0BC3853EBE5EED94678E85AF83BEE4 /* SSZipArchive.m in Sources */, - 0A1CFA4976795262E58B28488169BDA7 /* SSZipArchive-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - E33C6F7C2661651B3EAEA7F6AF4F4924 /* Sources */ = { + EB28A529759E3D2117E28CE3CB8387D3 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 8749C8E8DC500B064FA0BC7A78C38A2A /* Pods-iosApp-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 75555D7C1AEB53FCE67A8C37C319C661 /* PBXTargetDependency */ = { + FD630170474A17DCE0203F9AE4D4EEBE /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = shared; target = 8777C9F6889E59EFFD631D80AEE9048B /* shared */; - targetProxy = D6048E58F06B5E79F2A9BDDD43FB3BDE /* PBXContainerItemProxy */; - }; - B4EEB0BAD27171683DF46E925721931A /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SSZipArchive; - target = F60E38364AFF5E1349FF07415B944396 /* SSZipArchive */; - targetProxy = 04BA107AFC104A8328725FF0C990269E /* PBXContainerItemProxy */; - }; - E8CDFB77E167114A93089DC8D8668249 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "SSZipArchive-SSZipArchive"; - target = D8EA004283833F4910C46F5335BE8F07 /* SSZipArchive-SSZipArchive */; - targetProxy = 0C4A7B882903AE95F7850E7B52353CBB /* PBXContainerItemProxy */; - }; - FB4523B5187DAC0C28C0AC04B837F12F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SSZipArchive; - target = F60E38364AFF5E1349FF07415B944396 /* SSZipArchive */; - targetProxy = 9FDF226F9D0FD9BE214B16BE9BB4AD26 /* PBXContainerItemProxy */; + targetProxy = F9A9A672240E698F0408C3154CEF71F9 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 07C01D57AD5F5F22E09C162F899E0696 /* Debug */ = { + 03527EFE33C6B1E7347416F7E6E66403 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 684DD02479A5D3B67FF60FB7F6F77AB4 /* shared.debug.xcconfig */; + baseConfigurationReference = 244FC2DAA936A0B07ACEFDC74E2D54B8 /* Pods-iosApp.release.xcconfig */; buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-iosApp/Pods-iosApp-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 16.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", + "@loader_path/Frameworks", ); + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-iosApp/Pods-iosApp.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; + SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; 30E0B9EFD9A5C45D0D351231E81B30B3 /* Release */ = { isa = XCBuildConfiguration; @@ -711,46 +402,27 @@ }; name = Release; }; - 5825C7782EC24D2CF1154E9703FB3402 /* Debug */ = { + 3F9840FDA27F8042BC05655CB24E35E4 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E462E23B3674BF94EAB1504D506F2803 /* Pods-iosApp.debug.xcconfig */; + baseConfigurationReference = 0F9A6AEB767C84537A3BA5E4A9C1A5E3 /* shared.release.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-iosApp/Pods-iosApp-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 16.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", - "@loader_path/Frameworks", ); - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-iosApp/Pods-iosApp.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; - SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; + VALIDATE_PRODUCT = YES; }; - name = Debug; + name = Release; }; - 58B1346F6876BE44DDE733EA224D568E /* Release */ = { + 5D61A0D386909A90D35FAA1B9A95207D /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 244FC2DAA936A0B07ACEFDC74E2D54B8 /* Pods-iosApp.release.xcconfig */; + baseConfigurationReference = E462E23B3674BF94EAB1504D506F2803 /* Pods-iosApp.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CLANG_ENABLE_OBJC_WEAK = NO; @@ -780,133 +452,11 @@ SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 7C7D061411B586071B3E99CE0AE0EE6C /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = E703ACCDEFD5286D4A954AC9F5710572 /* SSZipArchive.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/SSZipArchive/SSZipArchive-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SSZipArchive/SSZipArchive-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.5; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/SSZipArchive/SSZipArchive.modulemap"; - PRODUCT_MODULE_NAME = SSZipArchive; - PRODUCT_NAME = SSZipArchive; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - C118637F3DDC4044DF819584C40B1CCE /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 0F9A6AEB767C84537A3BA5E4A9C1A5E3 /* shared.release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CLANG_ENABLE_OBJC_WEAK = NO; - IPHONEOS_DEPLOYMENT_TARGET = 16.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - CEC389E7E097AB65DAB81A1467FD3895 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = E703ACCDEFD5286D4A954AC9F5710572 /* SSZipArchive.release.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/SSZipArchive"; - IBSC_MODULE = SSZipArchive; - INFOPLIST_FILE = "Target Support Files/SSZipArchive/ResourceBundle-SSZipArchive-SSZipArchive-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.5; - PRODUCT_NAME = SSZipArchive; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Release; - }; - E1A07DCFA75010ED300E13B05878A030 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 5D2179B6B15B7920CE567DD4C3992510 /* SSZipArchive.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/SSZipArchive/SSZipArchive-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SSZipArchive/SSZipArchive-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.5; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/SSZipArchive/SSZipArchive.modulemap"; - PRODUCT_MODULE_NAME = SSZipArchive; - PRODUCT_NAME = SSZipArchive; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - E7F557B61DF613C8EBD361E3F0309623 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 5D2179B6B15B7920CE567DD4C3992510 /* SSZipArchive.debug.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/SSZipArchive"; - IBSC_MODULE = SSZipArchive; - INFOPLIST_FILE = "Target Support Files/SSZipArchive/ResourceBundle-SSZipArchive-SSZipArchive-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.5; - PRODUCT_NAME = SSZipArchive; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Debug; - }; F4FF6A0D1970CA9705974E3CB2134802 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -973,27 +523,26 @@ }; name = Debug; }; + F959406367CCF197877224C742431A5F /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 684DD02479A5D3B67FF60FB7F6F77AB4 /* shared.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CLANG_ENABLE_OBJC_WEAK = NO; + IPHONEOS_DEPLOYMENT_TARGET = 16.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 136055CC500396A4B69BFF305C132B4D /* Build configuration list for PBXAggregateTarget "shared" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 07C01D57AD5F5F22E09C162F899E0696 /* Debug */, - C118637F3DDC4044DF819584C40B1CCE /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 39A8AB19650569842DE5D13D21B10591 /* Build configuration list for PBXNativeTarget "Pods-iosApp" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5825C7782EC24D2CF1154E9703FB3402 /* Debug */, - 58B1346F6876BE44DDE733EA224D568E /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -1003,20 +552,20 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 9ECA9181C024F4C5D83C9D62FE2E6E02 /* Build configuration list for PBXNativeTarget "SSZipArchive-SSZipArchive" */ = { + 9F1E85ECB672A0CC96333A6C6DF60EE6 /* Build configuration list for PBXNativeTarget "Pods-iosApp" */ = { isa = XCConfigurationList; buildConfigurations = ( - E7F557B61DF613C8EBD361E3F0309623 /* Debug */, - CEC389E7E097AB65DAB81A1467FD3895 /* Release */, + 5D61A0D386909A90D35FAA1B9A95207D /* Debug */, + 03527EFE33C6B1E7347416F7E6E66403 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - FC4800E27F73FEE5BBA1151225128DED /* Build configuration list for PBXNativeTarget "SSZipArchive" */ = { + B999BD58A146737F72CA68509B0BCE77 /* Build configuration list for PBXAggregateTarget "shared" */ = { isa = XCConfigurationList; buildConfigurations = ( - E1A07DCFA75010ED300E13B05878A030 /* Debug */, - 7C7D061411B586071B3E99CE0AE0EE6C /* Release */, + F959406367CCF197877224C742431A5F /* Debug */, + 3F9840FDA27F8042BC05655CB24E35E4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/iosApp/Pods/Pods.xcodeproj/xcuserdata/odifek.xcuserdatad/xcschemes/SSZipArchive-SSZipArchive.xcscheme b/iosApp/Pods/Pods.xcodeproj/xcuserdata/odifek.xcuserdatad/xcschemes/SSZipArchive-SSZipArchive.xcscheme deleted file mode 100644 index 9dafed3..0000000 --- a/iosApp/Pods/Pods.xcodeproj/xcuserdata/odifek.xcuserdatad/xcschemes/SSZipArchive-SSZipArchive.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/iosApp/Pods/Pods.xcodeproj/xcuserdata/odifek.xcuserdatad/xcschemes/SSZipArchive.xcscheme b/iosApp/Pods/Pods.xcodeproj/xcuserdata/odifek.xcuserdatad/xcschemes/SSZipArchive.xcscheme deleted file mode 100644 index 29dfb54..0000000 --- a/iosApp/Pods/Pods.xcodeproj/xcuserdata/odifek.xcuserdatad/xcschemes/SSZipArchive.xcscheme +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/iosApp/Pods/Pods.xcodeproj/xcuserdata/odifek.xcuserdatad/xcschemes/xcschememanagement.plist b/iosApp/Pods/Pods.xcodeproj/xcuserdata/odifek.xcuserdatad/xcschemes/xcschememanagement.plist index 73a5897..7dce8f0 100644 --- a/iosApp/Pods/Pods.xcodeproj/xcuserdata/odifek.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/iosApp/Pods/Pods.xcodeproj/xcuserdata/odifek.xcuserdatad/xcschemes/xcschememanagement.plist @@ -9,16 +9,6 @@ isShown - SSZipArchive-SSZipArchive.xcscheme - - isShown - - - SSZipArchive.xcscheme - - isShown - - shared.xcscheme isShown diff --git a/iosApp/Pods/SSZipArchive/LICENSE.txt b/iosApp/Pods/SSZipArchive/LICENSE.txt deleted file mode 100644 index 1cc4a4a..0000000 --- a/iosApp/Pods/SSZipArchive/LICENSE.txt +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2013-2021, ZipArchive, https://github.com/ZipArchive - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/iosApp/Pods/SSZipArchive/README.md b/iosApp/Pods/SSZipArchive/README.md deleted file mode 100644 index 68d8f8a..0000000 --- a/iosApp/Pods/SSZipArchive/README.md +++ /dev/null @@ -1,99 +0,0 @@ -[![CI](https://github.com/ZipArchive/ZipArchive/workflows/CI/badge.svg)](https://github.com/ZipArchive/ZipArchive/actions?query=workflow%3ACI) - -# SSZipArchive - -ZipArchive is a simple utility class for zipping and unzipping files on iOS, macOS and tvOS. - -- Unzip zip files; -- Unzip password protected zip files; -- Unzip AES encrypted zip files; -- Create zip files; -- Create large (> 4.3Gb) files; -- Create password protected zip files; -- Create AES encrypted zip files; -- Choose compression level; -- Zip-up NSData instances. (with a filename) - -## Version 2.5.0+ Updates Minimum OS Versions - -A key dependency of this project is the zlib library. zlib before version 1.2.12 allows memory corruption when deflating (i.e., when compressing) if the input has many distant matches according to [CVE-2018-25032](https://nvd.nist.gov/vuln/detail/cve-2018-25032). - -zlib 1.2.12 is included in macOS 10.15+ (with latest security patches), iOS 15.5+, tvOS 15.4+, watchOS 8.4+. **As such, these OS versions will be the new minimums as of version 2.5.0 of ZipArchive.** - -If you need support for previous versions of ZipArchive for earlier OS support you can target an earlier version but know you will be using an unmaintained version of this library. - -We will not support versions of ZipArchive that use dependencies with known vulnerabilities. - -## Installation and Setup - - -*The main release branch is configured to support Objective-C and Swift 4+.* - -SSZipArchive works on Xcode 12 and above, iOS 15.5 and above, tvOS 15.4 and above, macOS 10.15 and above, watchOS 8.4 and above. - -### CocoaPods -In your Podfile: -`pod 'SSZipArchive'` - -You should define your minimum deployment target explicitly, like: -`platform :ios, '15.5'` - -Recommended CocoaPods version should be at least CocoaPods 1.7.5. - -### SPM -Add a Swift Package reference to https://github.com/ZipArchive/ZipArchive.git (SSZipArchive 2.5.0 and higher or master) - -### Carthage -In your Cartfile: -`github "ZipArchive/ZipArchive"` - -We do not release a Carthage pre-built package. Developers are encouraged to build one themselves. - -### Manual - -1. Add the `SSZipArchive` and `minizip` folders to your project. -2. Add the `libz` and `libiconv` libraries to your target. -3. Add the `Security` framework to your target. -4. Add the following GCC_PREPROCESSOR_DEFINITIONS: `HAVE_INTTYPES_H HAVE_PKCRYPT HAVE_STDINT_H HAVE_WZAES HAVE_ZLIB ZLIB_COMPAT $(inherited)`. - -SSZipArchive requires ARC. - -## Usage - -### Objective-C - -```objective-c - -//Import "#import " for SPM/Carthage, and "#import " for CocoaPods. - -// Create -[SSZipArchive createZipFileAtPath:zipPath withContentsOfDirectory:sampleDataPath]; - -// Unzip -[SSZipArchive unzipFileAtPath:zipPath toDestination:unzipPath]; -``` - -### Swift - -```swift -//Import "import ZipArchive" for SPM/Carthage, and "import SSZipArchive" for CocoaPods. - -// Create -SSZipArchive.createZipFileAtPath(zipPath, withContentsOfDirectory: sampleDataPath) - -// Unzip -SSZipArchive.unzipFileAtPath(zipPath, toDestination: unzipPath) -``` - -## License - -SSZipArchive is protected under the [MIT license](https://github.com/samsoffes/ssziparchive/raw/master/LICENSE) and our slightly modified version of [minizip-ng (formally minizip)](https://github.com/zlib-ng/minizip-ng) 3.0.6 is licensed under the [Zlib license](https://www.zlib.net/zlib_license.html). - -## Acknowledgments - -* Big thanks to *aish* for creating [ZipArchive](https://code.google.com/archive/p/ziparchive/). The project that inspired SSZipArchive. -* Thank you [@soffes](https://github.com/soffes) for the actual name of SSZipArchive. -* Thank you [@randomsequence](https://github.com/randomsequence) for implementing the creation support tech. -* Thank you [@johnezang](https://github.com/johnezang) for all his amazing help along the way. -* Thank you [@nmoinvaz](https://github.com/nmoinvaz) for minizip-ng (formally minizip), the core of ZipArchive. -* Thank you to [all the contributors](https://github.com/ZipArchive/ZipArchive/graphs/contributors). diff --git a/iosApp/Pods/SSZipArchive/SSZipArchive/SSZipArchive.h b/iosApp/Pods/SSZipArchive/SSZipArchive/SSZipArchive.h deleted file mode 100644 index 7787464..0000000 --- a/iosApp/Pods/SSZipArchive/SSZipArchive/SSZipArchive.h +++ /dev/null @@ -1,178 +0,0 @@ -// -// SSZipArchive.h -// SSZipArchive -// -// Created by Sam Soffes on 7/21/10. -// - -#ifndef _SSZIPARCHIVE_H -#define _SSZIPARCHIVE_H - -#import - -#import "SSZipCommon.h" - -NS_ASSUME_NONNULL_BEGIN - -extern NSString *const SSZipArchiveErrorDomain; -typedef NS_ENUM(NSInteger, SSZipArchiveErrorCode) { - SSZipArchiveErrorCodeFailedOpenZipFile = -1, - SSZipArchiveErrorCodeFailedOpenFileInZip = -2, - SSZipArchiveErrorCodeFileInfoNotLoadable = -3, - SSZipArchiveErrorCodeFileContentNotReadable = -4, - SSZipArchiveErrorCodeFailedToWriteFile = -5, - SSZipArchiveErrorCodeInvalidArguments = -6, - SSZipArchiveErrorCodeSymlinkEscapesTargetDirectory = -7, -}; - -@protocol SSZipArchiveDelegate; - -@interface SSZipArchive : NSObject - -// Password check -+ (BOOL)isFilePasswordProtectedAtPath:(NSString *)path; -+ (BOOL)isPasswordValidForArchiveAtPath:(NSString *)path password:(NSString *)pw error:(NSError * _Nullable * _Nullable)error NS_SWIFT_NOTHROW; - -// Total payload size -+ (NSNumber *)payloadSizeForArchiveAtPath:(NSString *)path error:(NSError **)error; - -// Unzip -+ (BOOL)unzipFileAtPath:(NSString *)path toDestination:(NSString *)destination; -+ (BOOL)unzipFileAtPath:(NSString *)path toDestination:(NSString *)destination delegate:(nullable id)delegate; - -+ (BOOL)unzipFileAtPath:(NSString *)path - toDestination:(NSString *)destination - overwrite:(BOOL)overwrite - password:(nullable NSString *)password - error:(NSError * *)error; - -+ (BOOL)unzipFileAtPath:(NSString *)path - toDestination:(NSString *)destination - overwrite:(BOOL)overwrite - password:(nullable NSString *)password - error:(NSError * *)error - delegate:(nullable id)delegate NS_REFINED_FOR_SWIFT; - -+ (BOOL)unzipFileAtPath:(NSString *)path - toDestination:(NSString *)destination - preserveAttributes:(BOOL)preserveAttributes - overwrite:(BOOL)overwrite - password:(nullable NSString *)password - error:(NSError * *)error - delegate:(nullable id)delegate; - -+ (BOOL)unzipFileAtPath:(NSString *)path - toDestination:(NSString *)destination - progressHandler:(void (^_Nullable)(NSString *entry, unz_file_info zipInfo, long entryNumber, long total))progressHandler - completionHandler:(void (^_Nullable)(NSString *path, BOOL succeeded, NSError * _Nullable error))completionHandler; - -+ (BOOL)unzipFileAtPath:(NSString *)path - toDestination:(NSString *)destination - overwrite:(BOOL)overwrite - password:(nullable NSString *)password - progressHandler:(void (^_Nullable)(NSString *entry, unz_file_info zipInfo, long entryNumber, long total))progressHandler - completionHandler:(void (^_Nullable)(NSString *path, BOOL succeeded, NSError * _Nullable error))completionHandler; - -+ (BOOL)unzipFileAtPath:(NSString *)path - toDestination:(NSString *)destination - preserveAttributes:(BOOL)preserveAttributes - overwrite:(BOOL)overwrite - nestedZipLevel:(NSInteger)nestedZipLevel - password:(nullable NSString *)password - error:(NSError **)error - delegate:(nullable id)delegate - progressHandler:(void (^_Nullable)(NSString *entry, unz_file_info zipInfo, long entryNumber, long total))progressHandler - completionHandler:(void (^_Nullable)(NSString *path, BOOL succeeded, NSError * _Nullable error))completionHandler; - -+ (BOOL)unzipFileAtPath:(NSString *)path - toDestination:(NSString *)destination - preserveAttributes:(BOOL)preserveAttributes - overwrite:(BOOL)overwrite - symlinksValidWithin:(nullable NSString *)symlinksValidWithin - nestedZipLevel:(NSInteger)nestedZipLevel - password:(nullable NSString *)password - error:(NSError **)error - delegate:(nullable id)delegate - progressHandler:(void (^_Nullable)(NSString *entry, unz_file_info zipInfo, long entryNumber, long total))progressHandler - completionHandler:(void (^_Nullable)(NSString *path, BOOL succeeded, NSError * _Nullable error))completionHandler; - -// Zip -// default compression level is Z_DEFAULT_COMPRESSION (from "zlib.h") -// keepParentDirectory: if YES, then unzipping will give `directoryName/fileName`. If NO, then unzipping will just give `fileName`. Default is NO. - -// without password -+ (BOOL)createZipFileAtPath:(NSString *)path withFilesAtPaths:(NSArray *)paths; -+ (BOOL)createZipFileAtPath:(NSString *)path withContentsOfDirectory:(NSString *)directoryPath; - -+ (BOOL)createZipFileAtPath:(NSString *)path withContentsOfDirectory:(NSString *)directoryPath keepParentDirectory:(BOOL)keepParentDirectory; - -// with optional password, default encryption is AES -// don't use AES if you need compatibility with native macOS unzip and Archive Utility -+ (BOOL)createZipFileAtPath:(NSString *)path withFilesAtPaths:(NSArray *)paths withPassword:(nullable NSString *)password; -+ (BOOL)createZipFileAtPath:(NSString *)path withFilesAtPaths:(NSArray *)paths withPassword:(nullable NSString *)password progressHandler:(void(^ _Nullable)(NSUInteger entryNumber, NSUInteger total))progressHandler; -+ (BOOL)createZipFileAtPath:(NSString *)path withContentsOfDirectory:(NSString *)directoryPath withPassword:(nullable NSString *)password; -+ (BOOL)createZipFileAtPath:(NSString *)path withContentsOfDirectory:(NSString *)directoryPath keepParentDirectory:(BOOL)keepParentDirectory withPassword:(nullable NSString *)password; -+ (BOOL)createZipFileAtPath:(NSString *)path - withContentsOfDirectory:(NSString *)directoryPath - keepParentDirectory:(BOOL)keepParentDirectory - withPassword:(nullable NSString *)password - andProgressHandler:(void(^ _Nullable)(NSUInteger entryNumber, NSUInteger total))progressHandler; -+ (BOOL)createZipFileAtPath:(NSString *)path - withContentsOfDirectory:(NSString *)directoryPath - keepParentDirectory:(BOOL)keepParentDirectory - compressionLevel:(int)compressionLevel - password:(nullable NSString *)password - AES:(BOOL)aes - progressHandler:(void(^ _Nullable)(NSUInteger entryNumber, NSUInteger total))progressHandler; -//suport symlink compress --file -+ (BOOL)createZipFileAtPath:(NSString *)path withFilesAtPaths:(NSArray *)paths withPassword:(nullable NSString *)password keepSymlinks:(BOOL)keeplinks; -//suport symlink compress --directory -+ (BOOL)createZipFileAtPath:(NSString *)path - withContentsOfDirectory:(NSString *)directoryPath - keepParentDirectory:(BOOL)keepParentDirectory - compressionLevel:(int)compressionLevel - password:(nullable NSString *)password - AES:(BOOL)aes - progressHandler:(void(^ _Nullable)(NSUInteger entryNumber, NSUInteger total))progressHandler - keepSymlinks:(BOOL)keeplinks; - -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithPath:(NSString *)path NS_DESIGNATED_INITIALIZER; -- (BOOL)open; -- (BOOL)openForAppending; - -/// write empty folder -- (BOOL)writeFolderAtPath:(NSString *)path withFolderName:(NSString *)folderName withPassword:(nullable NSString *)password; -/// write file -- (BOOL)writeFile:(NSString *)path withPassword:(nullable NSString *)password; -- (BOOL)writeFileAtPath:(NSString *)path withFileName:(nullable NSString *)fileName withPassword:(nullable NSString *)password; -- (BOOL)writeFileAtPath:(NSString *)path withFileName:(nullable NSString *)fileName compressionLevel:(int)compressionLevel password:(nullable NSString *)password AES:(BOOL)aes; -///write symlink files -- (BOOL)writeSymlinkFileAtPath:(NSString *)path withFileName:(nullable NSString *)fileName compressionLevel:(int)compressionLevel password:(nullable NSString *)password AES:(BOOL)aes; -/// write data -- (BOOL)writeData:(NSData *)data filename:(nullable NSString *)filename withPassword:(nullable NSString *)password; -- (BOOL)writeData:(NSData *)data filename:(nullable NSString *)filename compressionLevel:(int)compressionLevel password:(nullable NSString *)password AES:(BOOL)aes; - -- (BOOL)close; - -@end - -@protocol SSZipArchiveDelegate - -@optional - -- (void)zipArchiveWillUnzipArchiveAtPath:(NSString *)path zipInfo:(unz_global_info)zipInfo; -- (void)zipArchiveDidUnzipArchiveAtPath:(NSString *)path zipInfo:(unz_global_info)zipInfo unzippedPath:(NSString *)unzippedPath; - -- (BOOL)zipArchiveShouldUnzipFileAtIndex:(NSInteger)fileIndex totalFiles:(NSInteger)totalFiles archivePath:(NSString *)archivePath fileInfo:(unz_file_info)fileInfo; -- (void)zipArchiveWillUnzipFileAtIndex:(NSInteger)fileIndex totalFiles:(NSInteger)totalFiles archivePath:(NSString *)archivePath fileInfo:(unz_file_info)fileInfo; -- (void)zipArchiveDidUnzipFileAtIndex:(NSInteger)fileIndex totalFiles:(NSInteger)totalFiles archivePath:(NSString *)archivePath fileInfo:(unz_file_info)fileInfo; -- (void)zipArchiveDidUnzipFileAtIndex:(NSInteger)fileIndex totalFiles:(NSInteger)totalFiles archivePath:(NSString *)archivePath unzippedFilePath:(NSString *)unzippedFilePath; - -- (void)zipArchiveProgressEvent:(unsigned long long)loaded total:(unsigned long long)total; - -@end - -NS_ASSUME_NONNULL_END - -#endif /* _SSZIPARCHIVE_H */ diff --git a/iosApp/Pods/SSZipArchive/SSZipArchive/SSZipArchive.m b/iosApp/Pods/SSZipArchive/SSZipArchive/SSZipArchive.m deleted file mode 100644 index 584fc22..0000000 --- a/iosApp/Pods/SSZipArchive/SSZipArchive/SSZipArchive.m +++ /dev/null @@ -1,1496 +0,0 @@ -// -// SSZipArchive.m -// SSZipArchive -// -// Created by Sam Soffes on 7/21/10. -// - -#import "SSZipArchive.h" -#include "minizip/mz_compat.h" -#include "minizip/mz_zip.h" -#include "minizip/mz_os.h" -#include -#include - -NSString *const SSZipArchiveErrorDomain = @"SSZipArchiveErrorDomain"; - -#define CHUNK 16384 - -int _zipOpenEntry(zipFile entry, NSString *name, const zip_fileinfo *zipfi, int level, NSString *password, BOOL aes); -BOOL _fileIsSymbolicLink(const unz_file_info *fileInfo); - -#ifndef API_AVAILABLE -// Xcode 7- compatibility -#define API_AVAILABLE(...) -#endif - -@interface NSData(SSZipArchive) -- (NSString *)_base64RFC4648 API_AVAILABLE(macos(10.9), ios(7.0), watchos(2.0), tvos(9.0)); -- (NSString *)_hexString; -@end - -@interface NSString (SSZipArchive) -- (NSString *)_sanitizedPath; -- (BOOL)_escapesTargetDirectory:(NSString *)targetDirectory; -@end - -@interface SSZipArchive () -- (instancetype)init NS_DESIGNATED_INITIALIZER; -@end - -@implementation SSZipArchive -{ - /// path for zip file - NSString *_path; - zipFile _zip; -} - -#pragma mark - Password check - -+ (BOOL)isFilePasswordProtectedAtPath:(NSString *)path { - // Begin opening - zipFile zip = unzOpen(path.fileSystemRepresentation); - if (zip == NULL) { - return NO; - } - - BOOL passwordProtected = NO; - int ret = unzGoToFirstFile(zip); - if (ret == UNZ_OK) { - do { - ret = unzOpenCurrentFile(zip); - if (ret != UNZ_OK) { - // attempting with an arbitrary password to workaround `unzOpenCurrentFile` limitation on AES encrypted files - ret = unzOpenCurrentFilePassword(zip, ""); - unzCloseCurrentFile(zip); - if (ret == UNZ_OK || ret == MZ_PASSWORD_ERROR) { - passwordProtected = YES; - } - break; - } - unz_file_info fileInfo = {}; - ret = unzGetCurrentFileInfo(zip, &fileInfo, NULL, 0, NULL, 0, NULL, 0); - unzCloseCurrentFile(zip); - if (ret != UNZ_OK) { - break; - } else if ((fileInfo.flag & MZ_ZIP_FLAG_ENCRYPTED) == 1) { - passwordProtected = YES; - break; - } - - ret = unzGoToNextFile(zip); - } while (ret == UNZ_OK); - } - - unzClose(zip); - return passwordProtected; -} - -+ (BOOL)isPasswordValidForArchiveAtPath:(NSString *)path password:(NSString *)pw error:(NSError **)error { - if (error) { - *error = nil; - } - - zipFile zip = unzOpen(path.fileSystemRepresentation); - if (zip == NULL) { - if (error) { - *error = [NSError errorWithDomain:SSZipArchiveErrorDomain - code:SSZipArchiveErrorCodeFailedOpenZipFile - userInfo:@{NSLocalizedDescriptionKey: @"failed to open zip file"}]; - } - return NO; - } - - // Initialize passwordValid to YES (No password required) - BOOL passwordValid = YES; - int ret = unzGoToFirstFile(zip); - if (ret == UNZ_OK) { - do { - if (pw.length == 0) { - ret = unzOpenCurrentFile(zip); - } else { - ret = unzOpenCurrentFilePassword(zip, [pw cStringUsingEncoding:NSUTF8StringEncoding]); - } - if (ret != UNZ_OK) { - if (ret != MZ_PASSWORD_ERROR) { - if (error) { - *error = [NSError errorWithDomain:SSZipArchiveErrorDomain - code:SSZipArchiveErrorCodeFailedOpenFileInZip - userInfo:@{NSLocalizedDescriptionKey: @"failed to open file in zip archive"}]; - } - } - passwordValid = NO; - break; - } - unz_file_info fileInfo = {}; - ret = unzGetCurrentFileInfo(zip, &fileInfo, NULL, 0, NULL, 0, NULL, 0); - if (ret != UNZ_OK) { - if (error) { - *error = [NSError errorWithDomain:SSZipArchiveErrorDomain - code:SSZipArchiveErrorCodeFileInfoNotLoadable - userInfo:@{NSLocalizedDescriptionKey: @"failed to retrieve info for file"}]; - } - passwordValid = NO; - break; - } else if ((fileInfo.flag & 1) == 1) { - unsigned char buffer[10] = {0}; - int readBytes = unzReadCurrentFile(zip, buffer, (unsigned)MIN(10UL,fileInfo.uncompressed_size)); - if (readBytes < 0) { - // Let's assume error Z_DATA_ERROR is caused by an invalid password - // Let's assume other errors are caused by Content Not Readable - if (readBytes != Z_DATA_ERROR) { - if (error) { - *error = [NSError errorWithDomain:SSZipArchiveErrorDomain - code:SSZipArchiveErrorCodeFileContentNotReadable - userInfo:@{NSLocalizedDescriptionKey: @"failed to read contents of file entry"}]; - } - } - passwordValid = NO; - break; - } - passwordValid = YES; - break; - } - - unzCloseCurrentFile(zip); - ret = unzGoToNextFile(zip); - } while (ret == UNZ_OK); - } - - unzClose(zip); - return passwordValid; -} - -+ (NSNumber *)payloadSizeForArchiveAtPath:(NSString *)path error:(NSError **)error { - if (error) { - *error = nil; - } - - zipFile zip = unzOpen(path.fileSystemRepresentation); - if (zip == NULL) { - if (error) { - *error = [NSError errorWithDomain:SSZipArchiveErrorDomain - code:SSZipArchiveErrorCodeFailedOpenZipFile - userInfo:@{NSLocalizedDescriptionKey: @"failed to open zip file"}]; - } - return @0; - } - - unsigned long long totalSize = 0; - int ret = unzGoToFirstFile(zip); - if (ret == UNZ_OK) { - do { - ret = unzOpenCurrentFile(zip); - if (ret != UNZ_OK) { - if (error) { - *error = [NSError errorWithDomain:SSZipArchiveErrorDomain - code:SSZipArchiveErrorCodeFailedOpenFileInZip - userInfo:@{NSLocalizedDescriptionKey: @"failed to open file in zip archive"}]; - } - break; - } - unz_file_info fileInfo = {}; - ret = unzGetCurrentFileInfo(zip, &fileInfo, NULL, 0, NULL, 0, NULL, 0); - if (ret != UNZ_OK) { - if (error) { - *error = [NSError errorWithDomain:SSZipArchiveErrorDomain - code:SSZipArchiveErrorCodeFileInfoNotLoadable - userInfo:@{NSLocalizedDescriptionKey: @"failed to retrieve info for file"}]; - } - break; - } - - totalSize += fileInfo.uncompressed_size; - - unzCloseCurrentFile(zip); - ret = unzGoToNextFile(zip); - } while (ret == UNZ_OK); - } - - unzClose(zip); - - return [NSNumber numberWithUnsignedLongLong:totalSize]; -} - -#pragma mark - Unzipping - -+ (BOOL)unzipFileAtPath:(NSString *)path toDestination:(NSString *)destination -{ - return [self unzipFileAtPath:path toDestination:destination delegate:nil]; -} - -+ (BOOL)unzipFileAtPath:(NSString *)path toDestination:(NSString *)destination overwrite:(BOOL)overwrite password:(nullable NSString *)password error:(NSError **)error -{ - return [self unzipFileAtPath:path toDestination:destination preserveAttributes:YES overwrite:overwrite password:password error:error delegate:nil progressHandler:nil completionHandler:nil]; -} - -+ (BOOL)unzipFileAtPath:(NSString *)path toDestination:(NSString *)destination delegate:(nullable id)delegate -{ - return [self unzipFileAtPath:path toDestination:destination preserveAttributes:YES overwrite:YES password:nil error:nil delegate:delegate progressHandler:nil completionHandler:nil]; -} - -+ (BOOL)unzipFileAtPath:(NSString *)path - toDestination:(NSString *)destination - overwrite:(BOOL)overwrite - password:(nullable NSString *)password - error:(NSError **)error - delegate:(nullable id)delegate -{ - return [self unzipFileAtPath:path toDestination:destination preserveAttributes:YES overwrite:overwrite password:password error:error delegate:delegate progressHandler:nil completionHandler:nil]; -} - -+ (BOOL)unzipFileAtPath:(NSString *)path - toDestination:(NSString *)destination - overwrite:(BOOL)overwrite - password:(NSString *)password - progressHandler:(void (^)(NSString *entry, unz_file_info zipInfo, long entryNumber, long total))progressHandler - completionHandler:(void (^)(NSString *path, BOOL succeeded, NSError * _Nullable error))completionHandler -{ - return [self unzipFileAtPath:path toDestination:destination preserveAttributes:YES overwrite:overwrite password:password error:nil delegate:nil progressHandler:progressHandler completionHandler:completionHandler]; -} - -+ (BOOL)unzipFileAtPath:(NSString *)path - toDestination:(NSString *)destination - progressHandler:(void (^_Nullable)(NSString *entry, unz_file_info zipInfo, long entryNumber, long total))progressHandler - completionHandler:(void (^_Nullable)(NSString *path, BOOL succeeded, NSError * _Nullable error))completionHandler -{ - return [self unzipFileAtPath:path toDestination:destination preserveAttributes:YES overwrite:YES password:nil error:nil delegate:nil progressHandler:progressHandler completionHandler:completionHandler]; -} - -+ (BOOL)unzipFileAtPath:(NSString *)path - toDestination:(NSString *)destination - preserveAttributes:(BOOL)preserveAttributes - overwrite:(BOOL)overwrite - password:(nullable NSString *)password - error:(NSError * *)error - delegate:(nullable id)delegate -{ - return [self unzipFileAtPath:path toDestination:destination preserveAttributes:preserveAttributes overwrite:overwrite password:password error:error delegate:delegate progressHandler:nil completionHandler:nil]; -} - -+ (BOOL)unzipFileAtPath:(NSString *)path - toDestination:(NSString *)destination - preserveAttributes:(BOOL)preserveAttributes - overwrite:(BOOL)overwrite - password:(nullable NSString *)password - error:(NSError **)error - delegate:(nullable id)delegate - progressHandler:(void (^_Nullable)(NSString *entry, unz_file_info zipInfo, long entryNumber, long total))progressHandler - completionHandler:(void (^_Nullable)(NSString *path, BOOL succeeded, NSError * _Nullable error))completionHandler -{ - return [self unzipFileAtPath:path toDestination:destination preserveAttributes:preserveAttributes overwrite:overwrite nestedZipLevel:0 password:password error:error delegate:delegate progressHandler:progressHandler completionHandler:completionHandler]; -} - -+ (BOOL)unzipFileAtPath:(NSString *)path - toDestination:(NSString *)destination - preserveAttributes:(BOOL)preserveAttributes - overwrite:(BOOL)overwrite - nestedZipLevel:(NSInteger)nestedZipLevel - password:(nullable NSString *)password - error:(NSError **)error - delegate:(nullable id)delegate - progressHandler:(void (^_Nullable)(NSString *entry, unz_file_info zipInfo, long entryNumber, long total))progressHandler - completionHandler:(void (^_Nullable)(NSString *path, BOOL succeeded, NSError * _Nullable error))completionHandler -{ - return [self unzipFileAtPath:path - toDestination:destination - preserveAttributes:preserveAttributes - overwrite:overwrite - symlinksValidWithin:destination - nestedZipLevel:nestedZipLevel - password:password - error:error - delegate:delegate - progressHandler:progressHandler - completionHandler:completionHandler]; -} - - -+ (BOOL)unzipFileAtPath:(NSString *)path - toDestination:(NSString *)destination - preserveAttributes:(BOOL)preserveAttributes - overwrite:(BOOL)overwrite - symlinksValidWithin:(nullable NSString *)symlinksValidWithin - nestedZipLevel:(NSInteger)nestedZipLevel - password:(nullable NSString *)password - error:(NSError **)error - delegate:(nullable id)delegate - progressHandler:(void (^_Nullable)(NSString *entry, unz_file_info zipInfo, long entryNumber, long total))progressHandler - completionHandler:(void (^_Nullable)(NSString *path, BOOL succeeded, NSError * _Nullable error))completionHandler -{ - // Guard against empty strings - if (path.length == 0 || destination.length == 0) - { - NSDictionary *userInfo = @{NSLocalizedDescriptionKey: @"received invalid argument(s)"}; - NSError *err = [NSError errorWithDomain:SSZipArchiveErrorDomain code:SSZipArchiveErrorCodeInvalidArguments userInfo:userInfo]; - if (error) - { - *error = err; - } - if (completionHandler) - { - completionHandler(nil, NO, err); - } - return NO; - } - - // Begin opening - zipFile zip = unzOpen(path.fileSystemRepresentation); - if (zip == NULL) - { - NSDictionary *userInfo = @{NSLocalizedDescriptionKey: @"failed to open zip file"}; - NSError *err = [NSError errorWithDomain:SSZipArchiveErrorDomain code:SSZipArchiveErrorCodeFailedOpenZipFile userInfo:userInfo]; - if (error) - { - *error = err; - } - if (completionHandler) - { - completionHandler(nil, NO, err); - } - return NO; - } - - NSDictionary * fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:path error:nil]; - unsigned long long fileSize = [[fileAttributes objectForKey:NSFileSize] unsignedLongLongValue]; - unsigned long long currentPosition = 0; - - unz_global_info globalInfo = {}; - unzGetGlobalInfo(zip, &globalInfo); - - // Begin unzipping - int ret = 0; - ret = unzGoToFirstFile(zip); - if (ret != UNZ_OK && ret != MZ_END_OF_LIST) - { - NSDictionary *userInfo = @{NSLocalizedDescriptionKey: @"failed to open first file in zip file"}; - NSError *err = [NSError errorWithDomain:SSZipArchiveErrorDomain code:SSZipArchiveErrorCodeFailedOpenFileInZip userInfo:userInfo]; - if (error) - { - *error = err; - } - if (completionHandler) - { - completionHandler(nil, NO, err); - } - unzClose(zip); - return NO; - } - - BOOL success = YES; - BOOL canceled = NO; - int crc_ret = 0; - unsigned char buffer[4096] = {0}; - NSFileManager *fileManager = [NSFileManager defaultManager]; - NSMutableArray *directoriesModificationDates = [[NSMutableArray alloc] init]; - - // Message delegate - if ([delegate respondsToSelector:@selector(zipArchiveWillUnzipArchiveAtPath:zipInfo:)]) { - [delegate zipArchiveWillUnzipArchiveAtPath:path zipInfo:globalInfo]; - } - if ([delegate respondsToSelector:@selector(zipArchiveProgressEvent:total:)]) { - [delegate zipArchiveProgressEvent:currentPosition total:fileSize]; - } - - NSInteger currentFileNumber = -1; - NSError *unzippingError; - do { - currentFileNumber++; - if (ret == MZ_END_OF_LIST) { - break; - } - @autoreleasepool { - if (password.length == 0) { - ret = unzOpenCurrentFile(zip); - } else { - ret = unzOpenCurrentFilePassword(zip, [password cStringUsingEncoding:NSUTF8StringEncoding]); - } - - if (ret != UNZ_OK) { - unzippingError = [NSError errorWithDomain:@"SSZipArchiveErrorDomain" code:SSZipArchiveErrorCodeFailedOpenFileInZip userInfo:@{NSLocalizedDescriptionKey: @"failed to open file in zip file"}]; - success = NO; - break; - } - - // Reading data and write to file - unz_file_info fileInfo; - memset(&fileInfo, 0, sizeof(unz_file_info)); - - ret = unzGetCurrentFileInfo(zip, &fileInfo, NULL, 0, NULL, 0, NULL, 0); - if (ret != UNZ_OK) { - unzippingError = [NSError errorWithDomain:@"SSZipArchiveErrorDomain" code:SSZipArchiveErrorCodeFileInfoNotLoadable userInfo:@{NSLocalizedDescriptionKey: @"failed to retrieve info for file"}]; - success = NO; - unzCloseCurrentFile(zip); - break; - } - - currentPosition += fileInfo.compressed_size; - - // Message delegate - if ([delegate respondsToSelector:@selector(zipArchiveShouldUnzipFileAtIndex:totalFiles:archivePath:fileInfo:)]) { - if (![delegate zipArchiveShouldUnzipFileAtIndex:currentFileNumber - totalFiles:(NSInteger)globalInfo.number_entry - archivePath:path - fileInfo:fileInfo]) { - success = NO; - canceled = YES; - break; - } - } - if ([delegate respondsToSelector:@selector(zipArchiveWillUnzipFileAtIndex:totalFiles:archivePath:fileInfo:)]) { - [delegate zipArchiveWillUnzipFileAtIndex:currentFileNumber totalFiles:(NSInteger)globalInfo.number_entry - archivePath:path fileInfo:fileInfo]; - } - if ([delegate respondsToSelector:@selector(zipArchiveProgressEvent:total:)]) { - [delegate zipArchiveProgressEvent:(NSInteger)currentPosition total:(NSInteger)fileSize]; - } - - char *filename = (char *)malloc(fileInfo.size_filename + 1); - if (filename == NULL) - { - success = NO; - break; - } - - unzGetCurrentFileInfo(zip, &fileInfo, filename, fileInfo.size_filename + 1, NULL, 0, NULL, 0); - filename[fileInfo.size_filename] = '\0'; - - BOOL fileIsSymbolicLink = _fileIsSymbolicLink(&fileInfo); - - NSString * strPath = [SSZipArchive _filenameStringWithCString:filename - version_made_by:fileInfo.version - general_purpose_flag:fileInfo.flag - size:fileInfo.size_filename]; - if ([strPath hasPrefix:@"__MACOSX/"]) { - // ignoring resource forks: https://superuser.com/questions/104500/what-is-macosx-folder - unzCloseCurrentFile(zip); - ret = unzGoToNextFile(zip); - free(filename); - continue; - } - - // Check if it contains directory - BOOL isDirectory = NO; - if (filename[fileInfo.size_filename-1] == '/' || filename[fileInfo.size_filename-1] == '\\') { - isDirectory = YES; - } - free(filename); - - // Sanitize paths in the file name. - strPath = [strPath _sanitizedPath]; - if (!strPath.length) { - // if filename data is unsalvageable, we default to currentFileNumber - strPath = @(currentFileNumber).stringValue; - } - - NSString *fullPath = [destination stringByAppendingPathComponent:strPath]; - NSError *err = nil; - NSDictionary *directoryAttr; - if (preserveAttributes) { - NSDate *modDate = [[self class] _dateWithMSDOSFormat:(UInt32)fileInfo.mz_dos_date]; - directoryAttr = @{NSFileCreationDate: modDate, NSFileModificationDate: modDate}; - [directoriesModificationDates addObject: @{@"path": fullPath, @"modDate": modDate}]; - } - if (isDirectory) { - [fileManager createDirectoryAtPath:fullPath withIntermediateDirectories:YES attributes:directoryAttr error:&err]; - } else { - [fileManager createDirectoryAtPath:fullPath.stringByDeletingLastPathComponent withIntermediateDirectories:YES attributes:directoryAttr error:&err]; - } - if (err != nil) { - if ([err.domain isEqualToString:NSCocoaErrorDomain] && - err.code == 640) { - unzippingError = err; - unzCloseCurrentFile(zip); - success = NO; - break; - } - NSLog(@"[SSZipArchive] Error: %@", err.localizedDescription); - } - - if ([fileManager fileExistsAtPath:fullPath] && !isDirectory && !overwrite) { - //FIXME: couldBe CRC Check? - unzCloseCurrentFile(zip); - ret = unzGoToNextFile(zip); - continue; - } - - if (isDirectory && !fileIsSymbolicLink) { - // nothing to read/write for a directory - } else if (!fileIsSymbolicLink) { - // ensure we are not creating stale file entries - int readBytes = unzReadCurrentFile(zip, buffer, 4096); - if (readBytes >= 0) { - FILE *fp = fopen(fullPath.fileSystemRepresentation, "wb"); - while (fp) { - if (readBytes > 0) { - if (0 == fwrite(buffer, readBytes, 1, fp)) { - if (ferror(fp)) { - NSString *message = [NSString stringWithFormat:@"Failed to write file (check your free space)"]; - NSLog(@"[SSZipArchive] %@", message); - success = NO; - unzippingError = [NSError errorWithDomain:@"SSZipArchiveErrorDomain" code:SSZipArchiveErrorCodeFailedToWriteFile userInfo:@{NSLocalizedDescriptionKey: message}]; - break; - } - } - } else { - break; - } - readBytes = unzReadCurrentFile(zip, buffer, 4096); - if (readBytes < 0) { - // Let's assume error Z_DATA_ERROR is caused by an invalid password - // Let's assume other errors are caused by Content Not Readable - success = NO; - } - } - - if (fp) { - fclose(fp); - - if (nestedZipLevel - && [fullPath.pathExtension.lowercaseString isEqualToString:@"zip"] - && [self unzipFileAtPath:fullPath - toDestination:fullPath.stringByDeletingLastPathComponent - preserveAttributes:preserveAttributes - overwrite:overwrite - symlinksValidWithin:symlinksValidWithin - nestedZipLevel:nestedZipLevel - 1 - password:password - error:nil - delegate:nil - progressHandler:nil - completionHandler:nil]) { - [directoriesModificationDates removeLastObject]; - [[NSFileManager defaultManager] removeItemAtPath:fullPath error:nil]; - } else if (preserveAttributes) { - - // Set the original datetime property - if (fileInfo.mz_dos_date != 0) { - NSDate *orgDate = [[self class] _dateWithMSDOSFormat:(UInt32)fileInfo.mz_dos_date]; - NSDictionary *attr = @{NSFileModificationDate: orgDate}; - - if (attr) { - if (![fileManager setAttributes:attr ofItemAtPath:fullPath error:nil]) { - // Can't set attributes - NSLog(@"[SSZipArchive] Failed to set attributes - whilst setting modification date"); - } - } - } - - // Set the original permissions on the file (+read/write to solve #293) - uLong permissions = fileInfo.external_fa >> 16 | 0b110000000; - if (permissions != 0) { - // Store it into a NSNumber - NSNumber *permissionsValue = @(permissions); - - // Retrieve any existing attributes - NSMutableDictionary *attrs = [[NSMutableDictionary alloc] initWithDictionary:[fileManager attributesOfItemAtPath:fullPath error:nil]]; - - // Set the value in the attributes dict - [attrs setObject:permissionsValue forKey:NSFilePosixPermissions]; - - // Update attributes - if (![fileManager setAttributes:attrs ofItemAtPath:fullPath error:nil]) { - // Unable to set the permissions attribute - NSLog(@"[SSZipArchive] Failed to set attributes - whilst setting permissions"); - } - } - } - } - else - { - // if we couldn't open file descriptor we can validate global errno to see the reason - int errnoSave = errno; - BOOL isSeriousError = NO; - switch (errnoSave) { - case EISDIR: - // Is a directory - // assumed case - break; - - case ENOSPC: - case EMFILE: - // No space left on device - // or - // Too many open files - isSeriousError = YES; - break; - - default: - // ignore case - // Just log the error - { - NSError *errorObject = [NSError errorWithDomain:NSPOSIXErrorDomain - code:errnoSave - userInfo:nil]; - NSLog(@"[SSZipArchive] Failed to open file on unzipping.(%@)", errorObject); - } - break; - } - - if (isSeriousError) { - // serious case - unzippingError = [NSError errorWithDomain:NSPOSIXErrorDomain - code:errnoSave - userInfo:nil]; - unzCloseCurrentFile(zip); - // Log the error - NSLog(@"[SSZipArchive] Failed to open file on unzipping.(%@)", unzippingError); - - // Break unzipping - success = NO; - break; - } - } - } else { - // Let's assume error Z_DATA_ERROR is caused by an invalid password - // Let's assume other errors are caused by Content Not Readable - success = NO; - break; - } - } - else - { - // Assemble the path for the symbolic link - NSMutableString *destinationPath = [NSMutableString string]; - int bytesRead = 0; - while ((bytesRead = unzReadCurrentFile(zip, buffer, 4096)) > 0) - { - buffer[bytesRead] = 0; - [destinationPath appendString:@((const char *)buffer)]; - } - if (bytesRead < 0) { - // Let's assume error Z_DATA_ERROR is caused by an invalid password - // Let's assume other errors are caused by Content Not Readable - success = NO; - break; - } - - // compose symlink full path - NSString *symlinkFullDestinationPath = destinationPath; - if (![symlinkFullDestinationPath isAbsolutePath]) { - symlinkFullDestinationPath = [[fullPath stringByDeletingLastPathComponent] stringByAppendingPathComponent:destinationPath]; - } - - if (symlinksValidWithin != nil && [symlinkFullDestinationPath _escapesTargetDirectory: symlinksValidWithin]) { - NSString *message = [NSString stringWithFormat:@"Symlink escapes target directory \"~%@ -> %@\"", strPath, destinationPath]; - NSLog(@"[SSZipArchive] %@", message); - success = NO; - unzippingError = [NSError errorWithDomain:SSZipArchiveErrorDomain code:SSZipArchiveErrorCodeSymlinkEscapesTargetDirectory userInfo:@{NSLocalizedDescriptionKey: message}]; - } else { - // Check if the symlink exists and delete it if we're overwriting - if (overwrite) - { - if ([fileManager fileExistsAtPath:fullPath]) - { - NSError *localError = nil; - BOOL removeSuccess = [fileManager removeItemAtPath:fullPath error:&localError]; - if (!removeSuccess) - { - NSString *message = [NSString stringWithFormat:@"Failed to delete existing symbolic link at \"%@\"", localError.localizedDescription]; - NSLog(@"[SSZipArchive] %@", message); - success = NO; - unzippingError = [NSError errorWithDomain:SSZipArchiveErrorDomain code:localError.code userInfo:@{NSLocalizedDescriptionKey: message}]; - } - } - } - - // Create the symbolic link (making sure it stays relative if it was relative before) - int symlinkError = symlink([destinationPath cStringUsingEncoding:NSUTF8StringEncoding], - [fullPath cStringUsingEncoding:NSUTF8StringEncoding]); - - if (symlinkError != 0) - { - // Bubble the error up to the completion handler - NSString *message = [NSString stringWithFormat:@"Failed to create symbolic link at \"%@\" to \"%@\" - symlink() error code: %d", fullPath, destinationPath, errno]; - NSLog(@"[SSZipArchive] %@", message); - success = NO; - unzippingError = [NSError errorWithDomain:NSPOSIXErrorDomain code:symlinkError userInfo:@{NSLocalizedDescriptionKey: message}]; - } - } - } - - crc_ret = unzCloseCurrentFile(zip); - if (crc_ret == MZ_CRC_ERROR) { - // CRC ERROR - success = NO; - break; - } - ret = unzGoToNextFile(zip); - - // Message delegate - if ([delegate respondsToSelector:@selector(zipArchiveDidUnzipFileAtIndex:totalFiles:archivePath:fileInfo:)]) { - [delegate zipArchiveDidUnzipFileAtIndex:currentFileNumber totalFiles:(NSInteger)globalInfo.number_entry - archivePath:path fileInfo:fileInfo]; - } else if ([delegate respondsToSelector: @selector(zipArchiveDidUnzipFileAtIndex:totalFiles:archivePath:unzippedFilePath:)]) { - [delegate zipArchiveDidUnzipFileAtIndex: currentFileNumber totalFiles: (NSInteger)globalInfo.number_entry - archivePath:path unzippedFilePath: fullPath]; - } - - if (progressHandler) - { - progressHandler(strPath, fileInfo, currentFileNumber, globalInfo.number_entry); - } - } - } while (ret == UNZ_OK && success); - - // Close - unzClose(zip); - - // The process of decompressing the .zip archive causes the modification times on the folders - // to be set to the present time. So, when we are done, they need to be explicitly set. - // set the modification date on all of the directories. - if (success && preserveAttributes) { - NSError * err = nil; - for (NSDictionary * d in directoriesModificationDates) { - if (![[NSFileManager defaultManager] setAttributes:@{NSFileModificationDate: [d objectForKey:@"modDate"]} ofItemAtPath:[d objectForKey:@"path"] error:&err]) { - NSLog(@"[SSZipArchive] Set attributes failed for directory: %@.", [d objectForKey:@"path"]); - } - if (err) { - NSLog(@"[SSZipArchive] Error setting directory file modification date attribute: %@", err.localizedDescription); - } - } - } - - // Message delegate - if (success && [delegate respondsToSelector:@selector(zipArchiveDidUnzipArchiveAtPath:zipInfo:unzippedPath:)]) { - [delegate zipArchiveDidUnzipArchiveAtPath:path zipInfo:globalInfo unzippedPath:destination]; - } - // final progress event = 100% - if (!canceled && [delegate respondsToSelector:@selector(zipArchiveProgressEvent:total:)]) { - [delegate zipArchiveProgressEvent:fileSize total:fileSize]; - } - - NSError *retErr = nil; - if (crc_ret == MZ_CRC_ERROR) - { - NSDictionary *userInfo = @{NSLocalizedDescriptionKey: @"crc check failed for file"}; - retErr = [NSError errorWithDomain:SSZipArchiveErrorDomain code:SSZipArchiveErrorCodeFileInfoNotLoadable userInfo:userInfo]; - } - - if (error) { - if (unzippingError) { - *error = unzippingError; - } - else { - *error = retErr; - } - } - if (completionHandler) - { - if (unzippingError) { - completionHandler(path, success, unzippingError); - } - else - { - completionHandler(path, success, retErr); - } - } - return success; -} - -#pragma mark - Zipping -+ (BOOL)createZipFileAtPath:(NSString *)path withFilesAtPaths:(NSArray *)paths -{ - return [SSZipArchive createZipFileAtPath:path withFilesAtPaths:paths withPassword:nil]; -} -+ (BOOL)createZipFileAtPath:(NSString *)path withContentsOfDirectory:(NSString *)directoryPath { - return [SSZipArchive createZipFileAtPath:path withContentsOfDirectory:directoryPath withPassword:nil]; -} - -+ (BOOL)createZipFileAtPath:(NSString *)path withContentsOfDirectory:(NSString *)directoryPath keepParentDirectory:(BOOL)keepParentDirectory { - return [SSZipArchive createZipFileAtPath:path withContentsOfDirectory:directoryPath keepParentDirectory:keepParentDirectory withPassword:nil]; -} - -+ (BOOL)createZipFileAtPath:(NSString *)path withFilesAtPaths:(NSArray *)paths withPassword:(NSString *)password { - return [self createZipFileAtPath:path withFilesAtPaths:paths withPassword:password progressHandler:nil]; -} - -+ (BOOL)createZipFileAtPath:(NSString *)path withFilesAtPaths:(NSArray *)paths withPassword:(NSString *)password progressHandler:(void(^ _Nullable)(NSUInteger entryNumber, NSUInteger total))progressHandler -{ - SSZipArchive *zipArchive = [[SSZipArchive alloc] initWithPath:path]; - BOOL success = [zipArchive open]; - if (success) { - NSUInteger total = paths.count, complete = 0; - for (NSString *filePath in paths) { - success &= [zipArchive writeFile:filePath withPassword:password]; - if (progressHandler) { - complete++; - progressHandler(complete, total); - } - } - success &= [zipArchive close]; - } - return success; -} - -+ (BOOL)createZipFileAtPath:(NSString *)path withContentsOfDirectory:(NSString *)directoryPath withPassword:(nullable NSString *)password { - return [SSZipArchive createZipFileAtPath:path withContentsOfDirectory:directoryPath keepParentDirectory:NO withPassword:password]; -} - - -+ (BOOL)createZipFileAtPath:(NSString *)path withContentsOfDirectory:(NSString *)directoryPath keepParentDirectory:(BOOL)keepParentDirectory withPassword:(nullable NSString *)password { - return [SSZipArchive createZipFileAtPath:path - withContentsOfDirectory:directoryPath - keepParentDirectory:keepParentDirectory - withPassword:password - andProgressHandler:nil - ]; -} - -+ (BOOL)createZipFileAtPath:(NSString *)path - withContentsOfDirectory:(NSString *)directoryPath - keepParentDirectory:(BOOL)keepParentDirectory - withPassword:(nullable NSString *)password - andProgressHandler:(void(^ _Nullable)(NSUInteger entryNumber, NSUInteger total))progressHandler { - return [self createZipFileAtPath:path withContentsOfDirectory:directoryPath keepParentDirectory:keepParentDirectory compressionLevel:Z_DEFAULT_COMPRESSION password:password AES:YES progressHandler:progressHandler]; -} - -+ (BOOL)createZipFileAtPath:(NSString *)path - withContentsOfDirectory:(NSString *)directoryPath - keepParentDirectory:(BOOL)keepParentDirectory - compressionLevel:(int)compressionLevel - password:(nullable NSString *)password - AES:(BOOL)aes - progressHandler:(void(^ _Nullable)(NSUInteger entryNumber, NSUInteger total))progressHandler { - - SSZipArchive *zipArchive = [[SSZipArchive alloc] initWithPath:path]; - BOOL success = [zipArchive open]; - if (success) { - // use a local fileManager (queue/thread compatibility) - NSFileManager *fileManager = [[NSFileManager alloc] init]; - NSDirectoryEnumerator *dirEnumerator = [fileManager enumeratorAtPath:directoryPath]; - NSArray *allObjects = dirEnumerator.allObjects; - NSUInteger total = allObjects.count, complete = 0; - if (keepParentDirectory && !total) { - allObjects = @[@""]; - total = 1; - } - for (__strong NSString *fileName in allObjects) { - NSString *fullFilePath = [directoryPath stringByAppendingPathComponent:fileName]; - if ([fullFilePath isEqualToString:path]) { - NSLog(@"[SSZipArchive] the archive path and the file path: %@ are the same, which is forbidden.", fullFilePath); - continue; - } - - if (keepParentDirectory) { - fileName = [directoryPath.lastPathComponent stringByAppendingPathComponent:fileName]; - } - - BOOL isDir; - [fileManager fileExistsAtPath:fullFilePath isDirectory:&isDir]; - if (!isDir) { - // file - success &= [zipArchive writeFileAtPath:fullFilePath withFileName:fileName compressionLevel:compressionLevel password:password AES:aes]; - } else { - // directory - if (![fileManager enumeratorAtPath:fullFilePath].nextObject) { - // empty directory - success &= [zipArchive writeFolderAtPath:fullFilePath withFolderName:fileName withPassword:password]; - } - } - if (progressHandler) { - complete++; - progressHandler(complete, total); - } - } - success &= [zipArchive close]; - } - return success; -} - -+ (BOOL)createZipFileAtPath:(NSString *)path withFilesAtPaths:(NSArray *)paths withPassword:(nullable NSString *)password keepSymlinks:(BOOL)keeplinks { - if (!keeplinks) { - return [SSZipArchive createZipFileAtPath:path withFilesAtPaths:paths withPassword:password]; - } else { - SSZipArchive *zipArchive = [[SSZipArchive alloc] initWithPath:path]; - BOOL success = [zipArchive open]; - if (success) { - for (NSString *filePath in paths) { - //is symlink - if (mz_os_is_symlink(filePath.fileSystemRepresentation) == MZ_OK) { - success &= [zipArchive writeSymlinkFileAtPath:filePath withFileName:nil compressionLevel:Z_DEFAULT_COMPRESSION password:password AES:YES]; - } else { - success &= [zipArchive writeFile:filePath withPassword:password]; - } - } - success &= [zipArchive close]; - } - return success; - } -} - -+ (BOOL)createZipFileAtPath:(NSString *)path - withContentsOfDirectory:(NSString *)directoryPath - keepParentDirectory:(BOOL)keepParentDirectory - compressionLevel:(int)compressionLevel - password:(nullable NSString *)password - AES:(BOOL)aes - progressHandler:(void(^ _Nullable)(NSUInteger entryNumber, NSUInteger total))progressHandler - keepSymlinks:(BOOL)keeplinks { - if (!keeplinks) { - return [SSZipArchive createZipFileAtPath:path - withContentsOfDirectory:directoryPath - keepParentDirectory:keepParentDirectory - compressionLevel:compressionLevel - password:password - AES:aes - progressHandler:progressHandler]; - } else { - SSZipArchive *zipArchive = [[SSZipArchive alloc] initWithPath:path]; - BOOL success = [zipArchive open]; - if (success) { - // use a local fileManager (queue/thread compatibility) - NSFileManager *fileManager = [[NSFileManager alloc] init]; - NSDirectoryEnumerator *dirEnumerator = [fileManager enumeratorAtPath:directoryPath]; - NSArray *allObjects = dirEnumerator.allObjects; - NSUInteger total = allObjects.count, complete = 0; - if (keepParentDirectory && !total) { - allObjects = @[@""]; - total = 1; - } - for (__strong NSString *fileName in allObjects) { - NSString *fullFilePath = [directoryPath stringByAppendingPathComponent:fileName]; - - if (keepParentDirectory) { - fileName = [directoryPath.lastPathComponent stringByAppendingPathComponent:fileName]; - } - //is symlink - BOOL isSymlink = NO; - if (mz_os_is_symlink(fullFilePath.fileSystemRepresentation) == MZ_OK) - isSymlink = YES; - BOOL isDir; - [fileManager fileExistsAtPath:fullFilePath isDirectory:&isDir]; - if (!isDir || isSymlink) { - // file or symlink - if (!isSymlink) { - success &= [zipArchive writeFileAtPath:fullFilePath withFileName:fileName compressionLevel:compressionLevel password:password AES:aes]; - } else { - success &= [zipArchive writeSymlinkFileAtPath:fullFilePath withFileName:fileName compressionLevel:compressionLevel password:password AES:aes]; - } - } else { - // directory - if (![fileManager enumeratorAtPath:fullFilePath].nextObject) { - // empty directory - success &= [zipArchive writeFolderAtPath:fullFilePath withFolderName:fileName withPassword:password]; - } - } - if (progressHandler) { - complete++; - progressHandler(complete, total); - } - } - success &= [zipArchive close]; - } - return success; - } -} - -- (BOOL)writeSymlinkFileAtPath:(NSString *)path withFileName:(nullable NSString *)fileName compressionLevel:(int)compressionLevel password:(nullable NSString *)password AES:(BOOL)aes -{ - NSAssert((_zip != NULL), @"Attempting to write to an archive which was never opened"); - //read symlink - char link_path[1024]; - int32_t err = MZ_OK; - err = mz_os_read_symlink(path.fileSystemRepresentation, link_path, sizeof(link_path)); - if (err != MZ_OK) { - NSLog(@"[SSZipArchive] Failed to read sylink"); - return NO; - } - - if (!fileName) { - fileName = path.lastPathComponent; - } - - zip_fileinfo zipInfo = {}; - [SSZipArchive zipInfo:&zipInfo setAttributesOfItemAtPath:path]; - - //unpdate zipInfo.external_fa - uint32_t target_attrib = 0; - uint32_t src_attrib = 0; - uint32_t src_sys = 0; - mz_os_get_file_attribs(path.fileSystemRepresentation, &src_attrib); - src_sys = MZ_HOST_SYSTEM(MZ_VERSION_MADEBY); - - if ((src_sys != MZ_HOST_SYSTEM_MSDOS) && (src_sys != MZ_HOST_SYSTEM_WINDOWS_NTFS)) { - /* High bytes are OS specific attributes, low byte is always DOS attributes */ - if (mz_zip_attrib_convert(src_sys, src_attrib, MZ_HOST_SYSTEM_MSDOS, &target_attrib) == MZ_OK) - zipInfo.external_fa = target_attrib; - zipInfo.external_fa |= (src_attrib << 16); - } else { - zipInfo.external_fa = src_attrib; - } - - uint16_t version_madeby = 3 << 8;//UNIX - int error = zipOpenNewFileInZip5(_zip, fileName.fileSystemRepresentation, &zipInfo, NULL, 0, NULL, 0, NULL, Z_DEFLATED, compressionLevel, 0, -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, password.UTF8String, 0, aes, version_madeby, 0, 0); - zipWriteInFileInZip(_zip, link_path, (uint32_t)strlen(link_path)); - zipCloseFileInZip(_zip); - return error == ZIP_OK; -} - -// disabling `init` because designated initializer is `initWithPath:` -- (instancetype)init { @throw nil; } - -// designated initializer -- (instancetype)initWithPath:(NSString *)path -{ - if ((self = [super init])) { - _path = [path copy]; - } - return self; -} - - -- (BOOL)open -{ - NSAssert((_zip == NULL), @"Attempting to open an archive which is already open"); - _zip = zipOpen(_path.fileSystemRepresentation, APPEND_STATUS_CREATE); - return (NULL != _zip); -} - -- (BOOL)openForAppending -{ - NSAssert((_zip == NULL), @"Attempting to open an archive which is already open"); - _zip = zipOpen(_path.fileSystemRepresentation, APPEND_STATUS_ADDINZIP); - return (NULL != _zip); -} - -- (BOOL)writeFolderAtPath:(NSString *)path withFolderName:(NSString *)folderName withPassword:(nullable NSString *)password -{ - NSAssert((_zip != NULL), @"Attempting to write to an archive which was never opened"); - - zip_fileinfo zipInfo = {}; - - [SSZipArchive zipInfo:&zipInfo setAttributesOfItemAtPath:path]; - - int error = _zipOpenEntry(_zip, [folderName stringByAppendingString:@"/"], &zipInfo, Z_NO_COMPRESSION, password, NO); - const void *buffer = NULL; - zipWriteInFileInZip(_zip, buffer, 0); - zipCloseFileInZip(_zip); - return error == ZIP_OK; -} - -- (BOOL)writeFile:(NSString *)path withPassword:(nullable NSString *)password -{ - return [self writeFileAtPath:path withFileName:nil withPassword:password]; -} - -- (BOOL)writeFileAtPath:(NSString *)path withFileName:(nullable NSString *)fileName withPassword:(nullable NSString *)password -{ - return [self writeFileAtPath:path withFileName:fileName compressionLevel:Z_DEFAULT_COMPRESSION password:password AES:YES]; -} - -// supports writing files with logical folder/directory structure -// *path* is the absolute path of the file that will be compressed -// *fileName* is the relative name of the file how it is stored within the zip e.g. /folder/subfolder/text1.txt -- (BOOL)writeFileAtPath:(NSString *)path withFileName:(nullable NSString *)fileName compressionLevel:(int)compressionLevel password:(nullable NSString *)password AES:(BOOL)aes -{ - NSAssert((_zip != NULL), @"Attempting to write to an archive which was never opened"); - - FILE *input = fopen(path.fileSystemRepresentation, "r"); - if (NULL == input) { - return NO; - } - - if (!fileName) { - fileName = path.lastPathComponent; - } - - zip_fileinfo zipInfo = {}; - - [SSZipArchive zipInfo:&zipInfo setAttributesOfItemAtPath:path]; - - void *buffer = malloc(CHUNK); - if (buffer == NULL) - { - fclose(input); - return NO; - } - - int error = _zipOpenEntry(_zip, fileName, &zipInfo, compressionLevel, password, aes); - - while (!feof(input) && !ferror(input)) - { - unsigned int len = (unsigned int) fread(buffer, 1, CHUNK, input); - zipWriteInFileInZip(_zip, buffer, len); - } - - zipCloseFileInZip(_zip); - free(buffer); - fclose(input); - return error == ZIP_OK; -} - -- (BOOL)writeData:(NSData *)data filename:(nullable NSString *)filename withPassword:(nullable NSString *)password -{ - return [self writeData:data filename:filename compressionLevel:Z_DEFAULT_COMPRESSION password:password AES:YES]; -} - -- (BOOL)writeData:(NSData *)data filename:(nullable NSString *)filename compressionLevel:(int)compressionLevel password:(nullable NSString *)password AES:(BOOL)aes -{ - if (!_zip) { - return NO; - } - if (!data) { - return NO; - } - zip_fileinfo zipInfo = {}; - [SSZipArchive zipInfo:&zipInfo setDate:[NSDate date]]; - - int error = _zipOpenEntry(_zip, filename, &zipInfo, compressionLevel, password, aes); - - zipWriteInFileInZip(_zip, data.bytes, (unsigned int)data.length); - - zipCloseFileInZip(_zip); - return error == ZIP_OK; -} - -- (BOOL)close -{ - NSAssert((_zip != NULL), @"[SSZipArchive] Attempting to close an archive which was never opened"); - int error = zipClose(_zip, NULL); - _zip = nil; - return error == ZIP_OK; -} - -#pragma mark - Private - -+ (NSString *)_filenameStringWithCString:(const char *)filename - version_made_by:(uint16_t)version_made_by - general_purpose_flag:(uint16_t)flag - size:(uint16_t)size_filename { - - // Respect Language encoding flag only reading filename as UTF-8 when this is set - // when file entry created on dos system. - // - // https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT - // Bit 11: Language encoding flag (EFS). If this bit is set, - // the filename and comment fields for this file - // MUST be encoded using UTF-8. (see APPENDIX D) - uint16_t made_by = version_made_by >> 8; - BOOL made_on_dos = made_by == 0; - BOOL languageEncoding = (flag & (1 << 11)) != 0; - if (!languageEncoding && made_on_dos) { - // APPNOTE.TXT D.1: - // D.2 If general purpose bit 11 is unset, the file name and comment should conform - // to the original ZIP character encoding. If general purpose bit 11 is set, the - // filename and comment must support The Unicode Standard, Version 4.1.0 or - // greater using the character encoding form defined by the UTF-8 storage - // specification. The Unicode Standard is published by the The Unicode - // Consortium (www.unicode.org). UTF-8 encoded data stored within ZIP files - // is expected to not include a byte order mark (BOM). - - // Code Page 437 corresponds to kCFStringEncodingDOSLatinUS - NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingDOSLatinUS); - NSString* strPath = [NSString stringWithCString:filename encoding:encoding]; - if (strPath) { - return strPath; - } - } - - // attempting unicode encoding - NSString * strPath = @(filename); - if (strPath) { - return strPath; - } - - // if filename is non-unicode, detect and transform Encoding - NSData *data = [NSData dataWithBytes:(const void *)filename length:sizeof(unsigned char) * size_filename]; -// Testing availability of @available (https://stackoverflow.com/a/46927445/1033581) -#if __clang_major__ < 9 - // Xcode 8- - if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber10_9_2) { -#else - // Xcode 9+ - if (@available(macOS 10.10, iOS 8.0, watchOS 2.0, tvOS 9.0, *)) { -#endif - // supported encodings are in [NSString availableStringEncodings] - [NSString stringEncodingForData:data encodingOptions:nil convertedString:&strPath usedLossyConversion:nil]; - } else { - // fallback to a simple manual detect for macOS 10.9 or older - NSArray *encodings = @[@(kCFStringEncodingGB_18030_2000), @(kCFStringEncodingShiftJIS)]; - for (NSNumber *encoding in encodings) { - strPath = [NSString stringWithCString:filename encoding:(NSStringEncoding)CFStringConvertEncodingToNSStringEncoding(encoding.unsignedIntValue)]; - if (strPath) { - break; - } - } - } - if (strPath) { - return strPath; - } - - // if filename encoding is non-detected, we default to something based on data - // _hexString is more readable than _base64RFC4648 for debugging unknown encodings - strPath = [data _hexString]; - return strPath; -} - -+ (void)zipInfo:(zip_fileinfo *)zipInfo setAttributesOfItemAtPath:(NSString *)path -{ - NSDictionary *attr = [[NSFileManager defaultManager] attributesOfItemAtPath:path error: nil]; - if (attr) - { - NSDate *fileDate = (NSDate *)[attr objectForKey:NSFileModificationDate]; - if (fileDate) - { - [self zipInfo:zipInfo setDate:fileDate]; - } - - // Write permissions into the external attributes, for details on this see here: https://unix.stackexchange.com/a/14727 - // Get the permissions value from the files attributes - NSNumber *permissionsValue = (NSNumber *)[attr objectForKey:NSFilePosixPermissions]; - if (permissionsValue != nil) { - // Get the short value for the permissions - short permissionsShort = permissionsValue.shortValue; - - // Convert this into an octal by adding 010000, 010000 being the flag for a regular file - NSInteger permissionsOctal = 0100000 + permissionsShort; - - // Convert this into a long value - uLong permissionsLong = @(permissionsOctal).unsignedLongValue; - - // Store this into the external file attributes once it has been shifted 16 places left to form part of the second from last byte - - // Casted back to an unsigned int to match type of external_fa in minizip - zipInfo->external_fa = (unsigned int)(permissionsLong << 16L); - } - } -} - -+ (void)zipInfo:(zip_fileinfo *)zipInfo setDate:(NSDate *)date -{ - NSCalendar *currentCalendar = SSZipArchive._gregorian; - NSCalendarUnit flags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond; - NSDateComponents *components = [currentCalendar components:flags fromDate:date]; - struct tm tmz_date; - tmz_date.tm_sec = (unsigned int)components.second; - tmz_date.tm_min = (unsigned int)components.minute; - tmz_date.tm_hour = (unsigned int)components.hour; - tmz_date.tm_mday = (unsigned int)components.day; - // ISO/IEC 9899 struct tm is 0-indexed for January but NSDateComponents for gregorianCalendar is 1-indexed for January - tmz_date.tm_mon = (unsigned int)components.month - 1; - // ISO/IEC 9899 struct tm is 0-indexed for AD 1900 but NSDateComponents for gregorianCalendar is 1-indexed for AD 1 - tmz_date.tm_year = (unsigned int)components.year - 1900; - zipInfo->mz_dos_date = mz_zip_tm_to_dosdate(&tmz_date); -} - -+ (NSCalendar *)_gregorian -{ - static NSCalendar *gregorian; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; - }); - - return gregorian; -} - -// Format from http://newsgroups.derkeiler.com/Archive/Comp/comp.os.msdos.programmer/2009-04/msg00060.html -// Two consecutive words, or a longword, YYYYYYYMMMMDDDDD hhhhhmmmmmmsssss -// YYYYYYY is years from 1980 = 0 -// sssss is (seconds/2). -// -// 3658 = 0011 0110 0101 1000 = 0011011 0010 11000 = 27 2 24 = 2007-02-24 -// 7423 = 0111 0100 0010 0011 - 01110 100001 00011 = 14 33 3 = 14:33:06 -+ (NSDate *)_dateWithMSDOSFormat:(UInt32)msdosDateTime -{ - // the whole `_dateWithMSDOSFormat:` method is equivalent but faster than this one line, - // essentially because `mktime` is slow: - //NSDate *date = [NSDate dateWithTimeIntervalSince1970:dosdate_to_time_t(msdosDateTime)]; - static const UInt32 kYearMask = 0xFE000000; - static const UInt32 kMonthMask = 0x1E00000; - static const UInt32 kDayMask = 0x1F0000; - static const UInt32 kHourMask = 0xF800; - static const UInt32 kMinuteMask = 0x7E0; - static const UInt32 kSecondMask = 0x1F; - - NSAssert(0xFFFFFFFF == (kYearMask | kMonthMask | kDayMask | kHourMask | kMinuteMask | kSecondMask), @"[SSZipArchive] MSDOS date masks don't add up"); - - NSDateComponents *components = [[NSDateComponents alloc] init]; - components.year = 1980 + ((msdosDateTime & kYearMask) >> 25); - components.month = (msdosDateTime & kMonthMask) >> 21; - components.day = (msdosDateTime & kDayMask) >> 16; - components.hour = (msdosDateTime & kHourMask) >> 11; - components.minute = (msdosDateTime & kMinuteMask) >> 5; - components.second = (msdosDateTime & kSecondMask) * 2; - - NSDate *date = [self._gregorian dateFromComponents:components]; - return date; -} - -@end - -int _zipOpenEntry(zipFile entry, NSString *name, const zip_fileinfo *zipfi, int level, NSString *password, BOOL aes) -{ - // https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT - uint16_t made_on_darwin = 19 << 8; - //MZ_ZIP_FLAG_UTF8 - uint16_t flag_base = 1 << 11; - return zipOpenNewFileInZip5(entry, name.fileSystemRepresentation, zipfi, NULL, 0, NULL, 0, NULL, Z_DEFLATED, level, 0, -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, password.UTF8String, 0, aes, made_on_darwin, flag_base, 1); -} - -#pragma mark - Private tools for file info - -BOOL _fileIsSymbolicLink(const unz_file_info *fileInfo) -{ - // - // Determine whether this is a symbolic link: - // - File is stored with 'version made by' value of UNIX (3), - // as per https://www.pkware.com/documents/casestudies/APPNOTE.TXT - // in the upper byte of the version field. - // - BSD4.4 st_mode constants are stored in the high 16 bits of the - // external file attributes (defacto standard, verified against libarchive) - // - // The original constants can be found here: - // https://minnie.tuhs.org/cgi-bin/utree.pl?file=4.4BSD/usr/include/sys/stat.h - // - const uLong ZipUNIXVersion = 3; - const uLong BSD_SFMT = 0170000; - const uLong BSD_IFLNK = 0120000; - - BOOL fileIsSymbolicLink = ((fileInfo->version >> 8) == ZipUNIXVersion) && BSD_IFLNK == (BSD_SFMT & (fileInfo->external_fa >> 16)); - return fileIsSymbolicLink; -} - -#pragma mark - Private tools for unreadable encodings - -@implementation NSData (SSZipArchive) - -// `base64EncodedStringWithOptions` uses a base64 alphabet with '+' and '/'. -// we got those alternatives to make it compatible with filenames: https://en.wikipedia.org/wiki/Base64 -// * modified Base64 encoding for IMAP mailbox names (RFC 3501): uses '+' and ',' -// * modified Base64 for URL and filenames (RFC 4648): uses '-' and '_' -- (NSString *)_base64RFC4648 -{ - NSString *strName = [self base64EncodedStringWithOptions:0]; - strName = [strName stringByReplacingOccurrencesOfString:@"+" withString:@"-"]; - strName = [strName stringByReplacingOccurrencesOfString:@"/" withString:@"_"]; - return strName; -} - -// initWithBytesNoCopy from NSProgrammer, Jan 25 '12: https://stackoverflow.com/a/9009321/1033581 -// hexChars from Peter, Aug 19 '14: https://stackoverflow.com/a/25378464/1033581 -// not implemented as too lengthy: a potential mapping improvement from Moose, Nov 3 '15: https://stackoverflow.com/a/33501154/1033581 -- (NSString *)_hexString -{ - const char *hexChars = "0123456789ABCDEF"; - NSUInteger length = self.length; - const unsigned char *bytes = self.bytes; - char *chars = malloc(length * 2); - if (chars == NULL) { - // we directly raise an exception instead of using NSAssert to make sure assertion is not disabled as this is irrecoverable - [NSException raise:@"NSInternalInconsistencyException" format:@"failed malloc" arguments:nil]; - return nil; - } - char *s = chars; - NSUInteger i = length; - while (i--) { - *s++ = hexChars[*bytes >> 4]; - *s++ = hexChars[*bytes & 0xF]; - bytes++; - } - NSString *str = [[NSString alloc] initWithBytesNoCopy:chars - length:length * 2 - encoding:NSASCIIStringEncoding - freeWhenDone:YES]; - return str; -} - -@end - -#pragma mark Private tools for security - -@implementation NSString (SSZipArchive) - -// One implementation alternative would be to use the algorithm found at mz_path_resolve from https://github.com/nmoinvaz/minizip/blob/dev/mz_os.c, -// but making sure to work with unichar values and not ascii values to avoid breaking Unicode characters containing 2E ('.') or 2F ('/') in their decomposition -/// Sanitize path traversal characters to prevent directory backtracking. Ignoring these characters mimicks the default behavior of the Unarchiving tool on macOS. -- (NSString *)_sanitizedPath -{ - // Change Windows paths to Unix paths: https://en.wikipedia.org/wiki/Path_(computing) - // Possible improvement: only do this if the archive was created on a non-Unix system - NSString *strPath = [self stringByReplacingOccurrencesOfString:@"\\" withString:@"/"]; - - // Percent-encode file path (where path is defined by https://tools.ietf.org/html/rfc8089) - // The key part is to allow characters "." and "/" and disallow "%". - // CharacterSet.urlPathAllowed seems to do the job -#if (__MAC_OS_X_VERSION_MIN_REQUIRED >= 1090 || __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 || __WATCH_OS_VERSION_MIN_REQUIRED >= 20000 || __TV_OS_VERSION_MIN_REQUIRED >= 90000) - strPath = [strPath stringByAddingPercentEncodingWithAllowedCharacters:NSCharacterSet.URLPathAllowedCharacterSet]; -#else - // Testing availability of @available (https://stackoverflow.com/a/46927445/1033581) -#if __clang_major__ < 9 - // Xcode 8- - if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber10_8_4) { -#else - // Xcode 9+ - if (@available(macOS 10.9, iOS 7.0, watchOS 2.0, tvOS 9.0, *)) { -#endif - strPath = [strPath stringByAddingPercentEncodingWithAllowedCharacters:NSCharacterSet.URLPathAllowedCharacterSet]; - } else { - strPath = [strPath stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; - } -#endif - - // `NSString.stringByAddingPercentEncodingWithAllowedCharacters:` may theorically fail: https://stackoverflow.com/questions/33558933/ - // But because we auto-detect encoding using `NSString.stringEncodingForData:encodingOptions:convertedString:usedLossyConversion:`, - // we likely already prevent UTF-16, UTF-32 and invalid Unicode in the form of unpaired surrogate chars: https://stackoverflow.com/questions/53043876/ - // To be on the safe side, we will still perform a guard check. - if (strPath == nil) { - return nil; - } - - // Add scheme "file:///" to support sanitation on names with a colon like "file:a/../../../usr/bin" - strPath = [@"file:///" stringByAppendingString:strPath]; - - // Sanitize path traversal characters to prevent directory backtracking. Ignoring these characters mimicks the default behavior of the Unarchiving tool on macOS. - // "../../../../../../../../../../../tmp/test.txt" -> "tmp/test.txt" - // "a/b/../c.txt" -> "a/c.txt" - strPath = [NSURL URLWithString:strPath].standardizedURL.absoluteString; - - // Remove the "file:///" scheme - strPath = strPath.length < 8 ? @"" : [strPath substringFromIndex:8]; - - // Remove the percent-encoding -#if (__MAC_OS_X_VERSION_MIN_REQUIRED >= 1090 || __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000 || __WATCH_OS_VERSION_MIN_REQUIRED >= 20000 || __TV_OS_VERSION_MIN_REQUIRED >= 90000) - strPath = strPath.stringByRemovingPercentEncoding; -#else - // Testing availability of @available (https://stackoverflow.com/a/46927445/1033581) -#if __clang_major__ < 9 - // Xcode 8- - if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber10_8_4) { -#else - // Xcode 9+ - if (@available(macOS 10.9, iOS 7.0, watchOS 2.0, tvOS 9.0, *)) { -#endif - strPath = strPath.stringByRemovingPercentEncoding; - } else { - strPath = [strPath stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; - } -#endif - - return strPath; -} - -/// Detects if the path represented in this string is pointing outside of the targetDirectory passed as argument. -/// -/// Helps detecting and avoiding a security vulnerability described here: -/// https://nvd.nist.gov/vuln/detail/CVE-2022-36943 -- (BOOL)_escapesTargetDirectory:(NSString *)targetDirectory { - NSString *standardizedPath = [[self stringByStandardizingPath] stringByResolvingSymlinksInPath]; - NSString *standardizedTargetPath = [[targetDirectory stringByStandardizingPath] stringByResolvingSymlinksInPath]; - - NSArray *targetPathComponents = [standardizedTargetPath pathComponents]; - NSArray *pathComponents = [standardizedPath pathComponents]; - - if (pathComponents.count < targetPathComponents.count) return YES; - - for (int idx = 0; idx < targetPathComponents.count; idx++) { - if (![pathComponents[idx] isEqual: targetPathComponents[idx]]) { - return YES; - } - } - - return NO; -} - -@end diff --git a/iosApp/Pods/SSZipArchive/SSZipArchive/SSZipCommon.h b/iosApp/Pods/SSZipArchive/SSZipArchive/SSZipCommon.h deleted file mode 100644 index 6c77573..0000000 --- a/iosApp/Pods/SSZipArchive/SSZipArchive/SSZipCommon.h +++ /dev/null @@ -1,71 +0,0 @@ -#ifndef SSZipCommon -#define SSZipCommon - -// typedefs moved from mz_compat.h to here for public access - -/* unz_global_info structure contain global data about the ZIPfile - These data comes from the end of central dir */ -typedef struct unz_global_info64_s -{ - uint64_t number_entry; /* total number of entries in the central dir on this disk */ - uint32_t number_disk_with_CD; /* number the the disk with central dir, used for spanning ZIP */ - uint16_t size_comment; /* size of the global comment of the zipfile */ -} unz_global_info64; - - -typedef struct unz_global_info_s -{ - uint32_t number_entry; /* total number of entries in the central dir on this disk */ - uint32_t number_disk_with_CD; /* number the the disk with central dir, used for spanning ZIP */ - uint16_t size_comment; /* size of the global comment of the zipfile */ -} unz_global_info; - -/* unz_file_info contain information about a file in the zipfile */ -/* https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT */ -typedef struct unz_file_info64_s -{ - uint16_t version; /* version made by 2 bytes */ - uint16_t version_needed; /* version needed to extract 2 bytes */ - uint16_t flag; /* general purpose bit flag 2 bytes */ - uint16_t compression_method; /* compression method 2 bytes */ - uint32_t dos_date; /* last mod file date in Dos fmt 4 bytes */ - struct tm tmu_date; - uint32_t crc; /* crc-32 4 bytes */ - uint64_t compressed_size; /* compressed size 8 bytes */ - uint64_t uncompressed_size; /* uncompressed size 8 bytes */ - uint16_t size_filename; /* filename length 2 bytes */ - uint16_t size_file_extra; /* extra field length 2 bytes */ - uint16_t size_file_comment; /* file comment length 2 bytes */ - - uint32_t disk_num_start; /* disk number start 4 bytes */ - uint16_t internal_fa; /* internal file attributes 2 bytes */ - uint32_t external_fa; /* external file attributes 4 bytes */ - - uint64_t disk_offset; - - uint16_t size_file_extra_internal; -} unz_file_info64; - -typedef struct unz_file_info_s -{ - uint16_t version; /* version made by 2 bytes */ - uint16_t version_needed; /* version needed to extract 2 bytes */ - uint16_t flag; /* general purpose bit flag 2 bytes */ - uint16_t compression_method; /* compression method 2 bytes */ - uint32_t dos_date; /* last mod file date in Dos fmt 4 bytes */ - struct tm tmu_date; - uint32_t crc; /* crc-32 4 bytes */ - uint32_t compressed_size; /* compressed size 4 bytes */ - uint32_t uncompressed_size; /* uncompressed size 4 bytes */ - uint16_t size_filename; /* filename length 2 bytes */ - uint16_t size_file_extra; /* extra field length 2 bytes */ - uint16_t size_file_comment; /* file comment length 2 bytes */ - - uint16_t disk_num_start; /* disk number start 2 bytes */ - uint16_t internal_fa; /* internal file attributes 2 bytes */ - uint32_t external_fa; /* external file attributes 4 bytes */ - - uint64_t disk_offset; -} unz_file_info; - -#endif diff --git a/iosApp/Pods/SSZipArchive/SSZipArchive/Supporting Files/PrivacyInfo.xcprivacy b/iosApp/Pods/SSZipArchive/SSZipArchive/Supporting Files/PrivacyInfo.xcprivacy deleted file mode 100644 index 276f761..0000000 --- a/iosApp/Pods/SSZipArchive/SSZipArchive/Supporting Files/PrivacyInfo.xcprivacy +++ /dev/null @@ -1,23 +0,0 @@ - - - - - NSPrivacyTracking - - NSPrivacyCollectedDataTypes - - NSPrivacyTrackingDomains - - NSPrivacyAccessedAPITypes - - - NSPrivacyAccessedAPIType - NSPrivacyAccessedAPICategoryFileTimestamp - NSPrivacyAccessedAPITypeReasons - - C617.1 - - - - - diff --git a/iosApp/Pods/SSZipArchive/SSZipArchive/include/ZipArchive.h b/iosApp/Pods/SSZipArchive/SSZipArchive/include/ZipArchive.h deleted file mode 100644 index e81fc9b..0000000 --- a/iosApp/Pods/SSZipArchive/SSZipArchive/include/ZipArchive.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// ZipArchive.h -// ZipArchive -// -// Created by Serhii Mumriak on 12/1/15. -// - -#import - -//! Project version number for ZipArchive. -FOUNDATION_EXPORT double ZipArchiveVersionNumber; - -//! Project version string for ZipArchive. -FOUNDATION_EXPORT const unsigned char ZipArchiveVersionString[]; - -// In this header, you should import all the public headers of your framework using statements like #import - -// This is to account for the many different ways this library gets imported. -#if __has_include() -#import -#elif __has_include("../SSZipArchive.h") -#import "../SSZipArchive.h" -#else -#import "SSZipArchive.h" -#endif diff --git a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz.h b/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz.h deleted file mode 100644 index a085f24..0000000 --- a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz.h +++ /dev/null @@ -1,273 +0,0 @@ -/* mz.h -- Errors codes, zip flags and magic - part of the minizip-ng project - - Copyright (C) Nathan Moinvaziri - https://github.com/zlib-ng/minizip-ng - - This program is distributed under the terms of the same license as zlib. - See the accompanying LICENSE file for the full text of the license. -*/ - -#ifndef MZ_H -#define MZ_H - -/***************************************************************************/ - -/* MZ_VERSION */ -#define MZ_VERSION ("3.0.9") -#define MZ_VERSION_BUILD (030009) - -/* MZ_ERROR */ -#define MZ_OK (0) /* zlib */ -#define MZ_STREAM_ERROR (-1) /* zlib */ -#define MZ_DATA_ERROR (-3) /* zlib */ -#define MZ_MEM_ERROR (-4) /* zlib */ -#define MZ_BUF_ERROR (-5) /* zlib */ -#define MZ_VERSION_ERROR (-6) /* zlib */ - -#define MZ_END_OF_LIST (-100) -#define MZ_END_OF_STREAM (-101) - -#define MZ_PARAM_ERROR (-102) -#define MZ_FORMAT_ERROR (-103) -#define MZ_INTERNAL_ERROR (-104) -#define MZ_CRC_ERROR (-105) -#define MZ_CRYPT_ERROR (-106) -#define MZ_EXIST_ERROR (-107) -#define MZ_PASSWORD_ERROR (-108) -#define MZ_SUPPORT_ERROR (-109) -#define MZ_HASH_ERROR (-110) -#define MZ_OPEN_ERROR (-111) -#define MZ_CLOSE_ERROR (-112) -#define MZ_SEEK_ERROR (-113) -#define MZ_TELL_ERROR (-114) -#define MZ_READ_ERROR (-115) -#define MZ_WRITE_ERROR (-116) -#define MZ_SIGN_ERROR (-117) -#define MZ_SYMLINK_ERROR (-118) - -/* MZ_OPEN */ -#define MZ_OPEN_MODE_READ (0x01) -#define MZ_OPEN_MODE_WRITE (0x02) -#define MZ_OPEN_MODE_READWRITE (MZ_OPEN_MODE_READ | MZ_OPEN_MODE_WRITE) -#define MZ_OPEN_MODE_APPEND (0x04) -#define MZ_OPEN_MODE_CREATE (0x08) -#define MZ_OPEN_MODE_EXISTING (0x10) - -/* MZ_SEEK */ -#define MZ_SEEK_SET (0) -#define MZ_SEEK_CUR (1) -#define MZ_SEEK_END (2) - -/* MZ_COMPRESS */ -#define MZ_COMPRESS_METHOD_STORE (0) -#define MZ_COMPRESS_METHOD_DEFLATE (8) -#define MZ_COMPRESS_METHOD_BZIP2 (12) -#define MZ_COMPRESS_METHOD_LZMA (14) -#define MZ_COMPRESS_METHOD_ZSTD (93) -#define MZ_COMPRESS_METHOD_XZ (95) -#define MZ_COMPRESS_METHOD_AES (99) - -#define MZ_COMPRESS_LEVEL_DEFAULT (-1) -#define MZ_COMPRESS_LEVEL_FAST (2) -#define MZ_COMPRESS_LEVEL_NORMAL (6) -#define MZ_COMPRESS_LEVEL_BEST (9) - -/* MZ_ZIP_FLAG */ -#define MZ_ZIP_FLAG_ENCRYPTED (1 << 0) -#define MZ_ZIP_FLAG_LZMA_EOS_MARKER (1 << 1) -#define MZ_ZIP_FLAG_DEFLATE_MAX (1 << 1) -#define MZ_ZIP_FLAG_DEFLATE_NORMAL (0) -#define MZ_ZIP_FLAG_DEFLATE_FAST (1 << 2) -#define MZ_ZIP_FLAG_DEFLATE_SUPER_FAST (MZ_ZIP_FLAG_DEFLATE_FAST | \ - MZ_ZIP_FLAG_DEFLATE_MAX) -#define MZ_ZIP_FLAG_DATA_DESCRIPTOR (1 << 3) -#define MZ_ZIP_FLAG_UTF8 (1 << 11) -#define MZ_ZIP_FLAG_MASK_LOCAL_INFO (1 << 13) - -/* MZ_ZIP_EXTENSION */ -#define MZ_ZIP_EXTENSION_ZIP64 (0x0001) -#define MZ_ZIP_EXTENSION_NTFS (0x000a) -#define MZ_ZIP_EXTENSION_AES (0x9901) -#define MZ_ZIP_EXTENSION_UNIX1 (0x000d) -#define MZ_ZIP_EXTENSION_SIGN (0x10c5) -#define MZ_ZIP_EXTENSION_HASH (0x1a51) -#define MZ_ZIP_EXTENSION_CDCD (0xcdcd) - -/* MZ_ZIP64 */ -#define MZ_ZIP64_AUTO (0) -#define MZ_ZIP64_FORCE (1) -#define MZ_ZIP64_DISABLE (2) - -/* MZ_HOST_SYSTEM */ -#define MZ_HOST_SYSTEM(VERSION_MADEBY) ((uint8_t)(VERSION_MADEBY >> 8)) -#define MZ_HOST_SYSTEM_MSDOS (0) -#define MZ_HOST_SYSTEM_UNIX (3) -#define MZ_HOST_SYSTEM_WINDOWS_NTFS (10) -#define MZ_HOST_SYSTEM_RISCOS (13) -#define MZ_HOST_SYSTEM_OSX_DARWIN (19) - -/* MZ_PKCRYPT */ -#define MZ_PKCRYPT_HEADER_SIZE (12) - -/* MZ_AES */ -#define MZ_AES_VERSION (1) -#define MZ_AES_ENCRYPTION_MODE_128 (0x01) -#define MZ_AES_ENCRYPTION_MODE_192 (0x02) -#define MZ_AES_ENCRYPTION_MODE_256 (0x03) -#define MZ_AES_KEY_LENGTH(MODE) (8 * (MODE & 3) + 8) -#define MZ_AES_KEY_LENGTH_MAX (32) -#define MZ_AES_BLOCK_SIZE (16) -#define MZ_AES_HEADER_SIZE(MODE) ((4 * (MODE & 3) + 4) + 2) -#define MZ_AES_FOOTER_SIZE (10) - -/* MZ_HASH */ -#define MZ_HASH_MD5 (10) -#define MZ_HASH_MD5_SIZE (16) -#define MZ_HASH_SHA1 (20) -#define MZ_HASH_SHA1_SIZE (20) -#define MZ_HASH_SHA224 (22) -#define MZ_HASH_SHA224_SIZE (28) -#define MZ_HASH_SHA256 (23) -#define MZ_HASH_SHA256_SIZE (32) -#define MZ_HASH_SHA384 (24) -#define MZ_HASH_SHA384_SIZE (48) -#define MZ_HASH_SHA512 (25) -#define MZ_HASH_SHA512_SIZE (64) -#define MZ_HASH_MAX_SIZE (256) - -/* MZ_ENCODING */ -#define MZ_ENCODING_CODEPAGE_437 (437) -#define MZ_ENCODING_CODEPAGE_932 (932) -#define MZ_ENCODING_CODEPAGE_936 (936) -#define MZ_ENCODING_CODEPAGE_950 (950) -#define MZ_ENCODING_UTF8 (65001) - -/* MZ_UTILITY */ -#define MZ_UNUSED(SYMBOL) ((void)SYMBOL) - -#if defined(_WIN32) && defined(MZ_EXPORTS) -#define MZ_EXPORT __declspec(dllexport) -#else -#define MZ_EXPORT -#endif - -/***************************************************************************/ - -#include /* size_t, NULL, malloc */ -#include /* time_t, time() */ -#include /* memset, strncpy, strlen */ -#include - -#if defined(HAVE_STDINT_H) -# include -#elif defined(__has_include) -# if __has_include() -# include -# endif -#endif - -#ifndef INT8_MAX -typedef signed char int8_t; -#endif -#ifndef INT16_MAX -typedef short int16_t; -#endif -#ifndef INT32_MAX -typedef int int32_t; -#endif -#ifndef INT64_MAX -typedef long long int64_t; -#endif -#ifndef UINT8_MAX -typedef unsigned char uint8_t; -#endif -#ifndef UINT16_MAX -typedef unsigned short uint16_t; -#endif -#ifndef UINT32_MAX -typedef unsigned int uint32_t; -#endif -#ifndef UINT64_MAX -typedef unsigned long long uint64_t; -#endif - -#if defined(HAVE_INTTYPES_H) -# include -#elif defined(__has_include) -# if __has_include() -# include -# endif -#endif - -#ifndef PRId8 -# define PRId8 "hhd" -#endif -#ifndef PRIu8 -# define PRIu8 "hhu" -#endif -#ifndef PRIx8 -# define PRIx8 "hhx" -#endif -#ifndef PRId16 -# define PRId16 "hd" -#endif -#ifndef PRIu16 -# define PRIu16 "hu" -#endif -#ifndef PRIx16 -# define PRIx16 "hx" -#endif -#ifndef PRId32 -# define PRId32 "d" -#endif -#ifndef PRIu32 -# define PRIu32 "u" -#endif -#ifndef PRIx32 -# define PRIx32 "x" -#endif -#if ULONG_MAX == 0xfffffffful -# ifndef PRId64 -# define PRId64 "ld" -# endif -# ifndef PRIu64 -# define PRIu64 "lu" -# endif -# ifndef PRIx64 -# define PRIx64 "lx" -# endif -#else -# ifndef PRId64 -# define PRId64 "lld" -# endif -# ifndef PRIu64 -# define PRIu64 "llu" -# endif -# ifndef PRIx64 -# define PRIx64 "llx" -# endif -#endif - -#ifndef INT16_MAX -# define INT16_MAX 32767 -#endif -#ifndef INT32_MAX -# define INT32_MAX 2147483647L -#endif -#ifndef INT64_MAX -# define INT64_MAX 9223372036854775807LL -#endif -#ifndef UINT16_MAX -# define UINT16_MAX 65535U -#endif -#ifndef UINT32_MAX -# define UINT32_MAX 4294967295UL -#endif -#ifndef UINT64_MAX -# define UINT64_MAX 18446744073709551615ULL -#endif - -/***************************************************************************/ - -#endif diff --git a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_compat.c b/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_compat.c deleted file mode 100644 index 9f251d5..0000000 --- a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_compat.c +++ /dev/null @@ -1,1306 +0,0 @@ -/* mz_compat.c -- Backwards compatible interface for older versions - part of the minizip-ng project - - Copyright (C) Nathan Moinvaziri - https://github.com/zlib-ng/minizip-ng - Copyright (C) 1998-2010 Gilles Vollant - https://www.winimage.com/zLibDll/minizip.html - - This program is distributed under the terms of the same license as zlib. - See the accompanying LICENSE file for the full text of the license. - - WARNING: Be very careful updating/overwriting this file. - It has specific changes for SSZipArchive support with some structs moved to SSZipCommon for public access -*/ - -#include "mz.h" -#include "mz_os.h" -#include "mz_strm.h" -#include "mz_strm_mem.h" -#include "mz_strm_os.h" -#include "mz_strm_zlib.h" -#include "mz_zip.h" - -#include /* SEEK */ - -#include "mz_compat.h" - -/***************************************************************************/ - -typedef struct mz_compat_s { - void *stream; - void *handle; - uint64_t entry_index; - int64_t entry_pos; - int64_t total_out; -} mz_compat; - -/***************************************************************************/ - -typedef struct mz_stream_ioapi_s { - mz_stream stream; - void *handle; - zlib_filefunc_def filefunc; - zlib_filefunc64_def filefunc64; -} mz_stream_ioapi; - -/***************************************************************************/ - -static int32_t mz_stream_ioapi_open(void *stream, const char *path, int32_t mode); -static int32_t mz_stream_ioapi_is_open(void *stream); -static int32_t mz_stream_ioapi_read(void *stream, void *buf, int32_t size); -static int32_t mz_stream_ioapi_write(void *stream, const void *buf, int32_t size); -static int64_t mz_stream_ioapi_tell(void *stream); -static int32_t mz_stream_ioapi_seek(void *stream, int64_t offset, int32_t origin); -static int32_t mz_stream_ioapi_close(void *stream); -static int32_t mz_stream_ioapi_error(void *stream); -static void *mz_stream_ioapi_create(void **stream); -static void mz_stream_ioapi_delete(void **stream); - -/***************************************************************************/ - -static mz_stream_vtbl mz_stream_ioapi_vtbl = { - mz_stream_ioapi_open, - mz_stream_ioapi_is_open, - mz_stream_ioapi_read, - mz_stream_ioapi_write, - mz_stream_ioapi_tell, - mz_stream_ioapi_seek, - mz_stream_ioapi_close, - mz_stream_ioapi_error, - mz_stream_ioapi_create, - mz_stream_ioapi_delete, - NULL, - NULL -}; - -/***************************************************************************/ - -static int32_t mz_stream_ioapi_open(void *stream, const char *path, int32_t mode) { - mz_stream_ioapi *ioapi = (mz_stream_ioapi *)stream; - int32_t ioapi_mode = 0; - - if ((mode & MZ_OPEN_MODE_READWRITE) == MZ_OPEN_MODE_READ) - ioapi_mode = ZLIB_FILEFUNC_MODE_READ; - else if (mode & MZ_OPEN_MODE_APPEND) - ioapi_mode = ZLIB_FILEFUNC_MODE_EXISTING; - else if (mode & MZ_OPEN_MODE_CREATE) - ioapi_mode = ZLIB_FILEFUNC_MODE_CREATE; - else - return MZ_OPEN_ERROR; - - if (ioapi->filefunc64.zopen64_file) - ioapi->handle = ioapi->filefunc64.zopen64_file(ioapi->filefunc64.opaque, path, ioapi_mode); - else if (ioapi->filefunc.zopen_file) - ioapi->handle = ioapi->filefunc.zopen_file(ioapi->filefunc.opaque, path, ioapi_mode); - - if (!ioapi->handle) - return MZ_PARAM_ERROR; - - return MZ_OK; -} - -static int32_t mz_stream_ioapi_is_open(void *stream) { - mz_stream_ioapi *ioapi = (mz_stream_ioapi *)stream; - if (!ioapi->handle) - return MZ_OPEN_ERROR; - return MZ_OK; -} - -static int32_t mz_stream_ioapi_read(void *stream, void *buf, int32_t size) { - mz_stream_ioapi *ioapi = (mz_stream_ioapi *)stream; - read_file_func zread = NULL; - void *opaque = NULL; - - if (mz_stream_ioapi_is_open(stream) != MZ_OK) - return MZ_OPEN_ERROR; - - if (ioapi->filefunc64.zread_file) { - zread = ioapi->filefunc64.zread_file; - opaque = ioapi->filefunc64.opaque; - } else if (ioapi->filefunc.zread_file) { - zread = ioapi->filefunc.zread_file; - opaque = ioapi->filefunc.opaque; - } else - return MZ_PARAM_ERROR; - - return (int32_t)zread(opaque, ioapi->handle, buf, size); -} - -static int32_t mz_stream_ioapi_write(void *stream, const void *buf, int32_t size) { - mz_stream_ioapi *ioapi = (mz_stream_ioapi *)stream; - write_file_func zwrite = NULL; - int32_t written = 0; - void *opaque = NULL; - - if (mz_stream_ioapi_is_open(stream) != MZ_OK) - return MZ_OPEN_ERROR; - - if (ioapi->filefunc64.zwrite_file) { - zwrite = ioapi->filefunc64.zwrite_file; - opaque = ioapi->filefunc64.opaque; - } else if (ioapi->filefunc.zwrite_file) { - zwrite = ioapi->filefunc.zwrite_file; - opaque = ioapi->filefunc.opaque; - } else - return MZ_PARAM_ERROR; - - written = (int32_t)zwrite(opaque, ioapi->handle, buf, size); - return written; -} - -static int64_t mz_stream_ioapi_tell(void *stream) { - mz_stream_ioapi *ioapi = (mz_stream_ioapi *)stream; - - if (mz_stream_ioapi_is_open(stream) != MZ_OK) - return MZ_OPEN_ERROR; - - if (ioapi->filefunc64.ztell64_file) - return ioapi->filefunc64.ztell64_file(ioapi->filefunc64.opaque, ioapi->handle); - else if (ioapi->filefunc.ztell_file) - return ioapi->filefunc.ztell_file(ioapi->filefunc.opaque, ioapi->handle); - - return MZ_INTERNAL_ERROR; -} - -static int32_t mz_stream_ioapi_seek(void *stream, int64_t offset, int32_t origin) { - mz_stream_ioapi *ioapi = (mz_stream_ioapi *)stream; - - if (mz_stream_ioapi_is_open(stream) != MZ_OK) - return MZ_OPEN_ERROR; - - if (ioapi->filefunc64.zseek64_file) { - if (ioapi->filefunc64.zseek64_file(ioapi->filefunc64.opaque, ioapi->handle, offset, origin) != 0) - return MZ_INTERNAL_ERROR; - } else if (ioapi->filefunc.zseek_file) { - if (ioapi->filefunc.zseek_file(ioapi->filefunc.opaque, ioapi->handle, (int32_t)offset, origin) != 0) - return MZ_INTERNAL_ERROR; - } else - return MZ_PARAM_ERROR; - - return MZ_OK; -} - -static int32_t mz_stream_ioapi_close(void *stream) { - mz_stream_ioapi *ioapi = (mz_stream_ioapi *)stream; - close_file_func zclose = NULL; - void *opaque = NULL; - - if (mz_stream_ioapi_is_open(stream) != MZ_OK) - return MZ_OPEN_ERROR; - - if (ioapi->filefunc.zclose_file) { - zclose = ioapi->filefunc.zclose_file; - opaque = ioapi->filefunc.opaque; - } else if (ioapi->filefunc64.zclose_file) { - zclose = ioapi->filefunc64.zclose_file; - opaque = ioapi->filefunc64.opaque; - } else - return MZ_PARAM_ERROR; - - if (zclose(opaque, ioapi->handle) != 0) - return MZ_CLOSE_ERROR; - ioapi->handle = NULL; - return MZ_OK; -} - -static int32_t mz_stream_ioapi_error(void *stream) { - mz_stream_ioapi *ioapi = (mz_stream_ioapi *)stream; - testerror_file_func zerror = NULL; - void *opaque = NULL; - - if (mz_stream_ioapi_is_open(stream) != MZ_OK) - return MZ_OPEN_ERROR; - - if (ioapi->filefunc.zerror_file) { - zerror = ioapi->filefunc.zerror_file; - opaque = ioapi->filefunc.opaque; - } else if (ioapi->filefunc64.zerror_file) { - zerror = ioapi->filefunc64.zerror_file; - opaque = ioapi->filefunc64.opaque; - } else - return MZ_PARAM_ERROR; - - return zerror(opaque, ioapi->handle); -} - -static int32_t mz_stream_ioapi_set_filefunc(void *stream, zlib_filefunc_def *filefunc) { - mz_stream_ioapi *ioapi = (mz_stream_ioapi *)stream; - memcpy(&ioapi->filefunc, filefunc, sizeof(zlib_filefunc_def)); - return MZ_OK; -} - -static int32_t mz_stream_ioapi_set_filefunc64(void *stream, zlib_filefunc64_def *filefunc) { - mz_stream_ioapi *ioapi = (mz_stream_ioapi *)stream; - memcpy(&ioapi->filefunc64, filefunc, sizeof(zlib_filefunc64_def)); - return MZ_OK; -} - -static void *mz_stream_ioapi_create(void **stream) { - mz_stream_ioapi *ioapi = NULL; - - ioapi = (mz_stream_ioapi *)calloc(1, sizeof(mz_stream_ioapi)); - if (ioapi) - ioapi->stream.vtbl = &mz_stream_ioapi_vtbl; - if (stream) - *stream = ioapi; - - return ioapi; -} - -static void mz_stream_ioapi_delete(void **stream) { - mz_stream_ioapi *ioapi = NULL; - if (!stream) - return; - ioapi = (mz_stream_ioapi *)*stream; - if (ioapi) - free(ioapi); - *stream = NULL; -} - -/***************************************************************************/ - -void fill_fopen_filefunc(zlib_filefunc_def *pzlib_filefunc_def) { - /* For 32-bit file support only, compile with MZ_FILE32_API */ - if (pzlib_filefunc_def) - memset(pzlib_filefunc_def, 0, sizeof(zlib_filefunc_def)); -} - -void fill_fopen64_filefunc(zlib_filefunc64_def *pzlib_filefunc_def) { - /* All mz_stream_os_* support large files if compilation supports it */ - if (pzlib_filefunc_def) - memset(pzlib_filefunc_def, 0, sizeof(zlib_filefunc64_def)); -} - -void fill_win32_filefunc(zlib_filefunc_def *pzlib_filefunc_def) { - /* Handled by mz_stream_os_win32 */ - if (pzlib_filefunc_def) - memset(pzlib_filefunc_def, 0, sizeof(zlib_filefunc_def)); -} - -void fill_win32_filefunc64(zlib_filefunc64_def *pzlib_filefunc_def) { - /* Automatically supported in mz_stream_os_win32 */ - if (pzlib_filefunc_def) - memset(pzlib_filefunc_def, 0, sizeof(zlib_filefunc64_def)); -} - -void fill_win32_filefunc64A(zlib_filefunc64_def *pzlib_filefunc_def) { - /* Automatically supported in mz_stream_os_win32 */ - if (pzlib_filefunc_def) - memset(pzlib_filefunc_def, 0, sizeof(zlib_filefunc64_def)); -} - -/* NOTE: fill_win32_filefunc64W is no longer necessary since wide-character - support is automatically handled by the underlying os stream. Do not - pass wide-characters to zipOpen or unzOpen. */ - -void fill_memory_filefunc(zlib_filefunc_def *pzlib_filefunc_def) { - /* Use opaque to indicate which stream interface to create */ - if (pzlib_filefunc_def) { - memset(pzlib_filefunc_def, 0, sizeof(zlib_filefunc_def)); - pzlib_filefunc_def->opaque = mz_stream_mem_get_interface(); - } -} - -/***************************************************************************/ - -static int32_t zipConvertAppendToStreamMode(int append) { - int32_t mode = MZ_OPEN_MODE_WRITE; - switch (append) { - case APPEND_STATUS_CREATE: - mode |= MZ_OPEN_MODE_CREATE; - break; - case APPEND_STATUS_CREATEAFTER: - mode |= MZ_OPEN_MODE_CREATE | MZ_OPEN_MODE_APPEND; - break; - case APPEND_STATUS_ADDINZIP: - mode |= MZ_OPEN_MODE_READ | MZ_OPEN_MODE_APPEND; - break; - } - return mode; -} - -zipFile zipOpen(const char *path, int append) { - return zipOpen2(path, append, NULL, NULL); -} - -zipFile zipOpen64(const void *path, int append) { - return zipOpen2(path, append, NULL, NULL); -} - -zipFile zipOpen2(const char *path, int append, const char **globalcomment, - zlib_filefunc_def *pzlib_filefunc_def) { - zipFile zip = NULL; - int32_t mode = zipConvertAppendToStreamMode(append); - void *stream = NULL; - - if (pzlib_filefunc_def) { - if (pzlib_filefunc_def->zopen_file) { - if (!mz_stream_ioapi_create(&stream)) - return NULL; - mz_stream_ioapi_set_filefunc(stream, pzlib_filefunc_def); - } else if (pzlib_filefunc_def->opaque) { - if (!mz_stream_create(&stream, (mz_stream_vtbl *)pzlib_filefunc_def->opaque)) - return NULL; - } - } - - if (!stream) { - if (!mz_stream_os_create(&stream)) - return NULL; - } - - if (mz_stream_open(stream, path, mode) != MZ_OK) { - mz_stream_delete(&stream); - return NULL; - } - - zip = zipOpen_MZ(stream, append, globalcomment); - - if (!zip) { - mz_stream_delete(&stream); - return NULL; - } - - return zip; -} - -zipFile zipOpen2_64(const void *path, int append, const char **globalcomment, - zlib_filefunc64_def *pzlib_filefunc_def) { - zipFile zip = NULL; - int32_t mode = zipConvertAppendToStreamMode(append); - void *stream = NULL; - - if (pzlib_filefunc_def) { - if (pzlib_filefunc_def->zopen64_file) { - if (!mz_stream_ioapi_create(&stream)) - return NULL; - mz_stream_ioapi_set_filefunc64(stream, pzlib_filefunc_def); - } else if (pzlib_filefunc_def->opaque) { - if (!mz_stream_create(&stream, (mz_stream_vtbl *)pzlib_filefunc_def->opaque)) - return NULL; - } - } - - if (!stream) { - if (!mz_stream_os_create(&stream)) - return NULL; - } - - if (mz_stream_open(stream, path, mode) != MZ_OK) { - mz_stream_delete(&stream); - return NULL; - } - - zip = zipOpen_MZ(stream, append, globalcomment); - - if (!zip) { - mz_stream_delete(&stream); - return NULL; - } - - return zip; -} - -zipFile zipOpen_MZ(void *stream, int append, const char **globalcomment) { - mz_compat *compat = NULL; - int32_t err = MZ_OK; - int32_t mode = zipConvertAppendToStreamMode(append); - void *handle = NULL; - - mz_zip_create(&handle); - err = mz_zip_open(handle, stream, mode); - - if (err != MZ_OK) { - mz_zip_delete(&handle); - return NULL; - } - - if (globalcomment) - mz_zip_get_comment(handle, globalcomment); - - compat = (mz_compat *)calloc(1, sizeof(mz_compat)); - if (compat) { - compat->handle = handle; - compat->stream = stream; - } else { - mz_zip_delete(&handle); - } - - return (zipFile)compat; -} - -void* zipGetHandle_MZ(zipFile file) { - mz_compat *compat = (mz_compat *)file; - if (!compat) - return NULL; - return compat->handle; -} - -void* zipGetStream_MZ(zipFile file) { - mz_compat *compat = (mz_compat *)file; - if (!compat) - return NULL; - return (void *)compat->stream; -} - -int zipOpenNewFileInZip5(zipFile file, const char *filename, const zip_fileinfo *zipfi, - const void *extrafield_local, uint16_t size_extrafield_local, const void *extrafield_global, - uint16_t size_extrafield_global, const char *comment, int compression_method, int level, - int raw, int windowBits, int memLevel, int strategy, const char *password, - unsigned long crc_for_crypting, signed char aes, unsigned long version_madeby, unsigned long flag_base, int zip64) { - mz_compat *compat = (mz_compat *)file; - mz_zip_file file_info; - - MZ_UNUSED(strategy); - MZ_UNUSED(memLevel); - MZ_UNUSED(windowBits); - MZ_UNUSED(size_extrafield_local); - MZ_UNUSED(extrafield_local); - MZ_UNUSED(crc_for_crypting); - - if (!compat) - return ZIP_PARAMERROR; - - memset(&file_info, 0, sizeof(file_info)); - - if (zipfi) { - uint64_t dos_date = 0; - - if (zipfi->mz_dos_date != 0) - dos_date = zipfi->mz_dos_date; - else - dos_date = mz_zip_tm_to_dosdate(&zipfi->tmz_date); - - file_info.modified_date = mz_zip_dosdate_to_time_t(dos_date); - file_info.external_fa = zipfi->external_fa; - file_info.internal_fa = zipfi->internal_fa; - } - - if (!filename) - filename = "-"; - - file_info.compression_method = (uint16_t)compression_method; - file_info.filename = filename; - /* file_info.extrafield_local = extrafield_local; */ - /* file_info.extrafield_local_size = size_extrafield_local; */ - file_info.extrafield = extrafield_global; - file_info.extrafield_size = size_extrafield_global; - file_info.version_madeby = (uint16_t)version_madeby; - file_info.comment = comment; - if (file_info.comment) - file_info.comment_size = (uint16_t)strlen(file_info.comment); - file_info.flag = (uint16_t)flag_base; - if (zip64) - file_info.zip64 = MZ_ZIP64_FORCE; - else - file_info.zip64 = MZ_ZIP64_DISABLE; -#ifdef HAVE_WZAES - if ((aes && password) || (raw && (file_info.flag & MZ_ZIP_FLAG_ENCRYPTED))) - file_info.aes_version = MZ_AES_VERSION; -#endif - - return mz_zip_entry_write_open(compat->handle, &file_info, (int16_t)level, (uint8_t)raw, password); -} - -int zipOpenNewFileInZip4_64(zipFile file, const char *filename, const zip_fileinfo *zipfi, - const void *extrafield_local, uint16_t size_extrafield_local, const void *extrafield_global, - uint16_t size_extrafield_global, const char *comment, int compression_method, int level, - int raw, int windowBits, int memLevel, int strategy, const char *password, - unsigned long crc_for_crypting, unsigned long version_madeby, unsigned long flag_base, int zip64) { - return zipOpenNewFileInZip5(file, filename, zipfi, extrafield_local, size_extrafield_local, - extrafield_global, size_extrafield_global, comment, compression_method, level, raw, windowBits, - memLevel, strategy, password, crc_for_crypting, 0, version_madeby, flag_base, zip64); -} - -int zipOpenNewFileInZip4(zipFile file, const char *filename, const zip_fileinfo *zipfi, - const void *extrafield_local, uint16_t size_extrafield_local, const void *extrafield_global, - uint16_t size_extrafield_global, const char *comment, int compression_method, int level, - int raw, int windowBits, int memLevel, int strategy, const char *password, - unsigned long crc_for_crypting, unsigned long version_madeby, unsigned long flag_base) { - return zipOpenNewFileInZip4_64(file, filename, zipfi, extrafield_local, size_extrafield_local, - extrafield_global, size_extrafield_global, comment, compression_method, level, raw, windowBits, - memLevel, strategy, password, crc_for_crypting, version_madeby, flag_base, 0); -} - -int zipOpenNewFileInZip3(zipFile file, const char *filename, const zip_fileinfo *zipfi, - const void *extrafield_local, uint16_t size_extrafield_local, const void *extrafield_global, - uint16_t size_extrafield_global, const char *comment, int compression_method, int level, - int raw, int windowBits, int memLevel, int strategy, const char *password, - unsigned long crc_for_crypting) { - return zipOpenNewFileInZip3_64(file, filename, zipfi, extrafield_local, size_extrafield_local, - extrafield_global, size_extrafield_global, comment, compression_method, level, raw, windowBits, - memLevel, strategy, password, crc_for_crypting, 0); -} - -int zipOpenNewFileInZip3_64(zipFile file, const char *filename, const zip_fileinfo *zipfi, - const void *extrafield_local, uint16_t size_extrafield_local, const void *extrafield_global, - uint16_t size_extrafield_global, const char *comment, int compression_method, int level, - int raw, int windowBits, int memLevel, int strategy, const char *password, - unsigned long crc_for_crypting, int zip64) { - return zipOpenNewFileInZip4_64(file, filename, zipfi, extrafield_local, size_extrafield_local, - extrafield_global, size_extrafield_global, comment, compression_method, level, raw, windowBits, - memLevel, strategy, password, crc_for_crypting, MZ_VERSION_MADEBY, 0, zip64); -} - -int zipOpenNewFileInZip2(zipFile file, const char *filename, const zip_fileinfo *zipfi, - const void *extrafield_local, uint16_t size_extrafield_local, const void *extrafield_global, - uint16_t size_extrafield_global, const char *comment, int compression_method, int level, - int raw) { - return zipOpenNewFileInZip3_64(file, filename, zipfi, extrafield_local, size_extrafield_local, - extrafield_global, size_extrafield_global, comment, compression_method, level, raw, - 0, 0, 0, NULL, 0, 0); -} - -int zipOpenNewFileInZip2_64(zipFile file, const char *filename, const zip_fileinfo *zipfi, - const void *extrafield_local, uint16_t size_extrafield_local, const void *extrafield_global, - uint16_t size_extrafield_global, const char *comment, int compression_method, int level, - int raw, int zip64) { - return zipOpenNewFileInZip3_64(file, filename, zipfi, extrafield_local, size_extrafield_local, - extrafield_global, size_extrafield_global, comment, compression_method, level, raw, 0, - 0, 0, NULL, 0, zip64); -} - -int zipOpenNewFileInZip(zipFile file, const char *filename, const zip_fileinfo *zipfi, - const void *extrafield_local, uint16_t size_extrafield_local, const void *extrafield_global, - uint16_t size_extrafield_global, const char *comment, int compression_method, int level) { - return zipOpenNewFileInZip_64(file, filename, zipfi, extrafield_local, size_extrafield_local, - extrafield_global, size_extrafield_global, comment, compression_method, level, 0); -} - -int zipOpenNewFileInZip_64(zipFile file, const char *filename, const zip_fileinfo *zipfi, - const void *extrafield_local, uint16_t size_extrafield_local, const void *extrafield_global, - uint16_t size_extrafield_global, const char *comment, int compression_method, int level, - int zip64) { - return zipOpenNewFileInZip2_64(file, filename, zipfi, extrafield_local, size_extrafield_local, - extrafield_global, size_extrafield_global, comment, compression_method, level, 0, zip64); -} - -int zipWriteInFileInZip(zipFile file, const void *buf, uint32_t len) { - mz_compat *compat = (mz_compat *)file; - int32_t written = 0; - if (!compat || len >= INT32_MAX) - return ZIP_PARAMERROR; - written = mz_zip_entry_write(compat->handle, buf, (int32_t)len); - if ((written < 0) || ((uint32_t)written != len)) - return ZIP_ERRNO; - return ZIP_OK; -} - -int zipCloseFileInZipRaw(zipFile file, unsigned long uncompressed_size, uint32_t crc32) { - return zipCloseFileInZipRaw64(file, uncompressed_size, crc32); -} - -int zipCloseFileInZipRaw64(zipFile file, uint64_t uncompressed_size, uint32_t crc32) { - mz_compat *compat = (mz_compat *)file; - if (!compat) - return ZIP_PARAMERROR; - return mz_zip_entry_close_raw(compat->handle, (int64_t)uncompressed_size, crc32); -} - -int zipCloseFileInZip(zipFile file) { - return zipCloseFileInZip64(file); -} - -int zipCloseFileInZip64(zipFile file) { - mz_compat *compat = (mz_compat *)file; - if (!compat) - return ZIP_PARAMERROR; - return mz_zip_entry_close(compat->handle); -} - -int zipClose(zipFile file, const char *global_comment) { - return zipClose_64(file, global_comment); -} - -int zipClose_64(zipFile file, const char *global_comment) { - return zipClose2_64(file, global_comment, MZ_VERSION_MADEBY); -} - -int zipClose2_64(zipFile file, const char *global_comment, uint16_t version_madeby) { - mz_compat *compat = (mz_compat *)file; - int32_t err = MZ_OK; - - if (compat->handle) - err = zipClose2_MZ(file, global_comment, version_madeby); - - if (compat->stream) { - mz_stream_close(compat->stream); - mz_stream_delete(&compat->stream); - } - - free(compat); - - return err; -} - -/* Only closes the zip handle, does not close the stream */ -int zipClose_MZ(zipFile file, const char *global_comment) { - return zipClose2_MZ(file, global_comment, MZ_VERSION_MADEBY); -} - -/* Only closes the zip handle, does not close the stream */ -int zipClose2_MZ(zipFile file, const char *global_comment, uint16_t version_madeby) { - mz_compat *compat = (mz_compat *)file; - int32_t err = MZ_OK; - - if (!compat) - return ZIP_PARAMERROR; - if (!compat->handle) - return err; - - if (global_comment) - mz_zip_set_comment(compat->handle, global_comment); - - mz_zip_set_version_madeby(compat->handle, version_madeby); - err = mz_zip_close(compat->handle); - mz_zip_delete(&compat->handle); - - return err; -} - -/***************************************************************************/ - -unzFile unzOpen(const char *path) { - return unzOpen64(path); -} - -unzFile unzOpen64(const void *path) { - return unzOpen2(path, NULL); -} - -unzFile unzOpen2(const char *path, zlib_filefunc_def *pzlib_filefunc_def) { - unzFile unz = NULL; - void *stream = NULL; - - if (pzlib_filefunc_def) { - if (pzlib_filefunc_def->zopen_file) { - if (!mz_stream_ioapi_create(&stream)) - return NULL; - mz_stream_ioapi_set_filefunc(stream, pzlib_filefunc_def); - } else if (pzlib_filefunc_def->opaque) { - if (!mz_stream_create(&stream, (mz_stream_vtbl *)pzlib_filefunc_def->opaque)) - return NULL; - } - } - - if (!stream) { - if (!mz_stream_os_create(&stream)) - return NULL; - } - - if (mz_stream_open(stream, path, MZ_OPEN_MODE_READ) != MZ_OK) { - mz_stream_delete(&stream); - return NULL; - } - - unz = unzOpen_MZ(stream); - if (!unz) { - mz_stream_close(stream); - mz_stream_delete(&stream); - return NULL; - } - return unz; -} - -unzFile unzOpen2_64(const void *path, zlib_filefunc64_def *pzlib_filefunc_def) { - unzFile unz = NULL; - void *stream = NULL; - - if (pzlib_filefunc_def) { - if (pzlib_filefunc_def->zopen64_file) { - if (!mz_stream_ioapi_create(&stream)) - return NULL; - mz_stream_ioapi_set_filefunc64(stream, pzlib_filefunc_def); - } else if (pzlib_filefunc_def->opaque) { - if (!mz_stream_create(&stream, (mz_stream_vtbl *)pzlib_filefunc_def->opaque)) - return NULL; - } - } - - if (!stream) { - if (!mz_stream_os_create(&stream)) - return NULL; - } - - if (mz_stream_open(stream, path, MZ_OPEN_MODE_READ) != MZ_OK) { - mz_stream_delete(&stream); - return NULL; - } - - unz = unzOpen_MZ(stream); - if (!unz) { - mz_stream_close(stream); - mz_stream_delete(&stream); - return NULL; - } - return unz; -} - -void* unzGetHandle_MZ(unzFile file) { - mz_compat *compat = (mz_compat *)file; - if (!compat) - return NULL; - return compat->handle; -} - -void* unzGetStream_MZ(unzFile file) { - mz_compat *compat = (mz_compat *)file; - if (!compat) - return NULL; - return compat->stream; -} - -unzFile unzOpen_MZ(void *stream) { - mz_compat *compat = NULL; - int32_t err = MZ_OK; - void *handle = NULL; - - mz_zip_create(&handle); - err = mz_zip_open(handle, stream, MZ_OPEN_MODE_READ); - - if (err != MZ_OK) { - mz_zip_delete(&handle); - return NULL; - } - - compat = (mz_compat *)calloc(1, sizeof(mz_compat)); - if (compat) { - compat->handle = handle; - compat->stream = stream; - - mz_zip_goto_first_entry(compat->handle); - } else { - mz_zip_delete(&handle); - } - - return (unzFile)compat; -} - -int unzClose(unzFile file) { - mz_compat *compat = (mz_compat *)file; - int32_t err = MZ_OK; - - if (!compat) - return UNZ_PARAMERROR; - - if (compat->handle) - err = unzClose_MZ(file); - - if (compat->stream) { - mz_stream_close(compat->stream); - mz_stream_delete(&compat->stream); - } - - free(compat); - - return err; -} - -/* Only closes the zip handle, does not close the stream */ -int unzClose_MZ(unzFile file) { - mz_compat *compat = (mz_compat *)file; - int32_t err = MZ_OK; - - if (!compat) - return UNZ_PARAMERROR; - - err = mz_zip_close(compat->handle); - mz_zip_delete(&compat->handle); - - return err; -} - -int unzGetGlobalInfo(unzFile file, unz_global_info* pglobal_info32) { - mz_compat *compat = (mz_compat *)file; - unz_global_info64 global_info64; - int32_t err = MZ_OK; - - memset(pglobal_info32, 0, sizeof(unz_global_info)); - if (!compat) - return UNZ_PARAMERROR; - - err = unzGetGlobalInfo64(file, &global_info64); - if (err == MZ_OK) { - pglobal_info32->number_entry = (uint32_t)global_info64.number_entry; - pglobal_info32->size_comment = global_info64.size_comment; - pglobal_info32->number_disk_with_CD = global_info64.number_disk_with_CD; - } - return err; -} - -int unzGetGlobalInfo64(unzFile file, unz_global_info64 *pglobal_info) { - mz_compat *compat = (mz_compat *)file; - const char *comment_ptr = NULL; - int32_t err = MZ_OK; - - memset(pglobal_info, 0, sizeof(unz_global_info64)); - if (!compat) - return UNZ_PARAMERROR; - err = mz_zip_get_comment(compat->handle, &comment_ptr); - if (err == MZ_OK) - pglobal_info->size_comment = (uint16_t)strlen(comment_ptr); - if ((err == MZ_OK) || (err == MZ_EXIST_ERROR)) - err = mz_zip_get_number_entry(compat->handle, &pglobal_info->number_entry); - if (err == MZ_OK) - err = mz_zip_get_disk_number_with_cd(compat->handle, &pglobal_info->number_disk_with_CD); - return err; -} - -int unzGetGlobalComment(unzFile file, char *comment, unsigned long comment_size) { - mz_compat *compat = (mz_compat *)file; - const char *comment_ptr = NULL; - int32_t err = MZ_OK; - - if (!comment || !comment_size) - return UNZ_PARAMERROR; - err = mz_zip_get_comment(compat->handle, &comment_ptr); - if (err == MZ_OK) { - strncpy(comment, comment_ptr, comment_size - 1); - comment[comment_size - 1] = 0; - } - return err; -} - -int unzOpenCurrentFile3(unzFile file, int *method, int *level, int raw, const char *password) { - mz_compat *compat = (mz_compat *)file; - mz_zip_file *file_info = NULL; - int32_t err = MZ_OK; - void *stream = NULL; - - if (!compat) - return UNZ_PARAMERROR; - if (method) - *method = 0; - if (level) - *level = 0; - - if (mz_zip_entry_is_open(compat->handle) == MZ_OK) { - /* zlib minizip does not error out here if close returns errors */ - unzCloseCurrentFile(file); - } - - compat->total_out = 0; - err = mz_zip_entry_read_open(compat->handle, (uint8_t)raw, password); - if (err == MZ_OK) - err = mz_zip_entry_get_info(compat->handle, &file_info); - if (err == MZ_OK) { - if (method) { - *method = file_info->compression_method; - } - - if (level) { - *level = 6; - switch (file_info->flag & 0x06) { - case MZ_ZIP_FLAG_DEFLATE_SUPER_FAST: - *level = 1; - break; - case MZ_ZIP_FLAG_DEFLATE_FAST: - *level = 2; - break; - case MZ_ZIP_FLAG_DEFLATE_MAX: - *level = 9; - break; - } - } - } - if (err == MZ_OK) - err = mz_zip_get_stream(compat->handle, &stream); - if (err == MZ_OK) - compat->entry_pos = mz_stream_tell(stream); - return err; -} - -int unzOpenCurrentFile(unzFile file) { - return unzOpenCurrentFile3(file, NULL, NULL, 0, NULL); -} - -int unzOpenCurrentFilePassword(unzFile file, const char *password) { - return unzOpenCurrentFile3(file, NULL, NULL, 0, password); -} - -int unzOpenCurrentFile2(unzFile file, int *method, int *level, int raw) { - return unzOpenCurrentFile3(file, method, level, raw, NULL); -} - -int unzReadCurrentFile(unzFile file, void *buf, uint32_t len) { - mz_compat *compat = (mz_compat *)file; - int32_t err = MZ_OK; - if (!compat || len >= INT32_MAX) - return UNZ_PARAMERROR; - err = mz_zip_entry_read(compat->handle, buf, (int32_t)len); - if (err > 0) - compat->total_out += (uint32_t)err; - return err; -} - -int unzCloseCurrentFile(unzFile file) { - mz_compat *compat = (mz_compat *)file; - int32_t err = MZ_OK; - if (!compat) - return UNZ_PARAMERROR; - err = mz_zip_entry_close(compat->handle); - return err; -} - -int unzGetCurrentFileInfo(unzFile file, unz_file_info *pfile_info, char *filename, - unsigned long filename_size, void *extrafield, unsigned long extrafield_size, char *comment, - unsigned long comment_size) { - mz_compat *compat = (mz_compat *)file; - mz_zip_file *file_info = NULL; - uint16_t bytes_to_copy = 0; - int32_t err = MZ_OK; - - if (!compat) - return UNZ_PARAMERROR; - - err = mz_zip_entry_get_info(compat->handle, &file_info); - if (err != MZ_OK) - return err; - - if (pfile_info) { - pfile_info->version = file_info->version_madeby; - pfile_info->version_needed = file_info->version_needed; - pfile_info->flag = file_info->flag; - pfile_info->compression_method = file_info->compression_method; - pfile_info->mz_dos_date = mz_zip_time_t_to_dos_date(file_info->modified_date); - //mz_zip_time_t_to_tm(file_info->modified_date, &pfile_info->tmu_date); - //pfile_info->tmu_date.tm_year += 1900; - pfile_info->crc = file_info->crc; - - pfile_info->size_filename = file_info->filename_size; - pfile_info->size_file_extra = file_info->extrafield_size; - pfile_info->size_file_comment = file_info->comment_size; - - pfile_info->disk_num_start = (uint16_t)file_info->disk_number; - pfile_info->internal_fa = file_info->internal_fa; - pfile_info->external_fa = file_info->external_fa; - - pfile_info->compressed_size = (uint32_t)file_info->compressed_size; - pfile_info->uncompressed_size = (uint32_t)file_info->uncompressed_size; - } - if (filename_size > 0 && filename && file_info->filename) { - bytes_to_copy = (uint16_t)filename_size; - if (bytes_to_copy > file_info->filename_size) - bytes_to_copy = file_info->filename_size; - memcpy(filename, file_info->filename, bytes_to_copy); - if (bytes_to_copy < filename_size) - filename[bytes_to_copy] = 0; - } - if (extrafield_size > 0 && extrafield) { - bytes_to_copy = (uint16_t)extrafield_size; - if (bytes_to_copy > file_info->extrafield_size) - bytes_to_copy = file_info->extrafield_size; - memcpy(extrafield, file_info->extrafield, bytes_to_copy); - } - if (comment_size > 0 && comment && file_info->comment) { - bytes_to_copy = (uint16_t)comment_size; - if (bytes_to_copy > file_info->comment_size) - bytes_to_copy = file_info->comment_size; - memcpy(comment, file_info->comment, bytes_to_copy); - if (bytes_to_copy < comment_size) - comment[bytes_to_copy] = 0; - } - return err; -} - -int unzGetCurrentFileInfo64(unzFile file, unz_file_info64 * pfile_info, char *filename, - unsigned long filename_size, void *extrafield, unsigned long extrafield_size, char *comment, - unsigned long comment_size) { - mz_compat *compat = (mz_compat *)file; - mz_zip_file *file_info = NULL; - uint16_t bytes_to_copy = 0; - int32_t err = MZ_OK; - - if (!compat) - return UNZ_PARAMERROR; - - err = mz_zip_entry_get_info(compat->handle, &file_info); - if (err != MZ_OK) - return err; - - if (pfile_info) { - pfile_info->version = file_info->version_madeby; - pfile_info->version_needed = file_info->version_needed; - pfile_info->flag = file_info->flag; - pfile_info->compression_method = file_info->compression_method; - pfile_info->mz_dos_date = mz_zip_time_t_to_dos_date(file_info->modified_date); - //mz_zip_time_t_to_tm(file_info->modified_date, &pfile_info->tmu_date); - //pfile_info->tmu_date.tm_year += 1900; - pfile_info->crc = file_info->crc; - - pfile_info->size_filename = file_info->filename_size; - pfile_info->size_file_extra = file_info->extrafield_size; - pfile_info->size_file_comment = file_info->comment_size; - - pfile_info->disk_num_start = file_info->disk_number; - pfile_info->internal_fa = file_info->internal_fa; - pfile_info->external_fa = file_info->external_fa; - - pfile_info->compressed_size = (uint64_t)file_info->compressed_size; - pfile_info->uncompressed_size = (uint64_t)file_info->uncompressed_size; - } - if (filename_size > 0 && filename && file_info->filename) { - bytes_to_copy = (uint16_t)filename_size; - if (bytes_to_copy > file_info->filename_size) - bytes_to_copy = file_info->filename_size; - memcpy(filename, file_info->filename, bytes_to_copy); - if (bytes_to_copy < filename_size) - filename[bytes_to_copy] = 0; - } - if (extrafield_size > 0 && extrafield) { - bytes_to_copy = (uint16_t)extrafield_size; - if (bytes_to_copy > file_info->extrafield_size) - bytes_to_copy = file_info->extrafield_size; - memcpy(extrafield, file_info->extrafield, bytes_to_copy); - } - if (comment_size > 0 && comment && file_info->comment) { - bytes_to_copy = (uint16_t)comment_size; - if (bytes_to_copy > file_info->comment_size) - bytes_to_copy = file_info->comment_size; - memcpy(comment, file_info->comment, bytes_to_copy); - if (bytes_to_copy < comment_size) - comment[bytes_to_copy] = 0; - } - return err; -} - -int unzGoToFirstFile(unzFile file) { - mz_compat *compat = (mz_compat *)file; - if (!compat) - return UNZ_PARAMERROR; - compat->entry_index = 0; - return mz_zip_goto_first_entry(compat->handle); -} - -int unzGoToNextFile(unzFile file) { - mz_compat *compat = (mz_compat *)file; - int32_t err = MZ_OK; - if (!compat) - return UNZ_PARAMERROR; - err = mz_zip_goto_next_entry(compat->handle); - if (err != MZ_END_OF_LIST) - compat->entry_index += 1; - return err; -} - -int unzLocateFile(unzFile file, const char *filename, unzFileNameComparer filename_compare_func) { - mz_compat *compat = (mz_compat *)file; - mz_zip_file *file_info = NULL; - uint64_t preserve_index = 0; - int32_t err = MZ_OK; - int32_t result = 0; - - if (!compat) - return UNZ_PARAMERROR; - - preserve_index = compat->entry_index; - - err = mz_zip_goto_first_entry(compat->handle); - while (err == MZ_OK) { - err = mz_zip_entry_get_info(compat->handle, &file_info); - if (err != MZ_OK) - break; - - if ((intptr_t)filename_compare_func > 2) { - result = filename_compare_func(file, filename, file_info->filename); - } else { - int32_t case_sensitive = (int32_t)(intptr_t)filename_compare_func; - result = mz_path_compare_wc(filename, file_info->filename, !case_sensitive); - } - - if (result == 0) - return MZ_OK; - - err = mz_zip_goto_next_entry(compat->handle); - } - - compat->entry_index = preserve_index; - return err; -} - -/***************************************************************************/ - -int unzGetFilePos(unzFile file, unz_file_pos *file_pos) { - unz64_file_pos file_pos64; - int32_t err = 0; - - err = unzGetFilePos64(file, &file_pos64); - if (err < 0) - return err; - - file_pos->pos_in_zip_directory = (uint32_t)file_pos64.pos_in_zip_directory; - file_pos->num_of_file = (uint32_t)file_pos64.num_of_file; - return err; -} - -int unzGoToFilePos(unzFile file, unz_file_pos *file_pos) { - mz_compat *compat = (mz_compat *)file; - unz64_file_pos file_pos64; - - if (!compat || !file_pos) - return UNZ_PARAMERROR; - - file_pos64.pos_in_zip_directory = file_pos->pos_in_zip_directory; - file_pos64.num_of_file = file_pos->num_of_file; - - return unzGoToFilePos64(file, &file_pos64); -} - -int unzGetFilePos64(unzFile file, unz64_file_pos *file_pos) { - mz_compat *compat = (mz_compat *)file; - int64_t offset = 0; - - if (!compat || !file_pos) - return UNZ_PARAMERROR; - - offset = unzGetOffset64(file); - if (offset < 0) - return (int)offset; - - file_pos->pos_in_zip_directory = offset; - file_pos->num_of_file = compat->entry_index; - return UNZ_OK; -} - -int unzGoToFilePos64(unzFile file, const unz64_file_pos *file_pos) { - mz_compat *compat = (mz_compat *)file; - int32_t err = MZ_OK; - - if (!compat || !file_pos) - return UNZ_PARAMERROR; - - err = mz_zip_goto_entry(compat->handle, file_pos->pos_in_zip_directory); - if (err == MZ_OK) - compat->entry_index = file_pos->num_of_file; - return err; -} - -unsigned long unzGetOffset(unzFile file) { - return (uint32_t)unzGetOffset64(file); -} - -int64_t unzGetOffset64(unzFile file) { - mz_compat *compat = (mz_compat *)file; - if (!compat) - return UNZ_PARAMERROR; - return mz_zip_get_entry(compat->handle); -} - -int unzSetOffset(unzFile file, unsigned long pos) { - return unzSetOffset64(file, pos); -} - -int unzSetOffset64(unzFile file, int64_t pos) { - mz_compat *compat = (mz_compat *)file; - if (!compat) - return UNZ_PARAMERROR; - return (int)mz_zip_goto_entry(compat->handle, pos); -} - -int unzGetLocalExtrafield(unzFile file, void *buf, unsigned int len) { - mz_compat *compat = (mz_compat *)file; - mz_zip_file *file_info = NULL; - int32_t err = MZ_OK; - int32_t bytes_to_copy = 0; - - if (!compat || !buf || len >= INT32_MAX) - return UNZ_PARAMERROR; - - err = mz_zip_entry_get_local_info(compat->handle, &file_info); - if (err != MZ_OK) - return err; - - bytes_to_copy = (int32_t)len; - if (bytes_to_copy > file_info->extrafield_size) - bytes_to_copy = file_info->extrafield_size; - - memcpy(buf, file_info->extrafield, bytes_to_copy); - return MZ_OK; -} - -int32_t unzTell(unzFile file) { - return unztell(file); -} - -int32_t unztell(unzFile file) { - return (int32_t)unztell64(file); -} - -uint64_t unzTell64(unzFile file) { - return unztell64(file); -} - -uint64_t unztell64(unzFile file) { - mz_compat *compat = (mz_compat *)file; - if (!compat) - return UNZ_PARAMERROR; - return compat->total_out; -} - -int unzSeek(unzFile file, int32_t offset, int origin) { - return unzSeek64(file, offset, origin); -} - -int unzSeek64(unzFile file, int64_t offset, int origin) { - mz_compat *compat = (mz_compat *)file; - mz_zip_file *file_info = NULL; - int64_t position = 0; - int32_t err = MZ_OK; - void *stream = NULL; - - if (!compat) - return UNZ_PARAMERROR; - err = mz_zip_entry_get_info(compat->handle, &file_info); - if (err != MZ_OK) - return err; - if (file_info->compression_method != MZ_COMPRESS_METHOD_STORE) - return UNZ_ERRNO; - - if (origin == SEEK_SET) - position = offset; - else if (origin == SEEK_CUR) - position = compat->total_out + offset; - else if (origin == SEEK_END) - position = (int64_t)file_info->compressed_size + offset; - else - return UNZ_PARAMERROR; - - if (position > (int64_t)file_info->compressed_size) - return UNZ_PARAMERROR; - - err = mz_zip_get_stream(compat->handle, &stream); - if (err == MZ_OK) - err = mz_stream_seek(stream, compat->entry_pos + position, MZ_SEEK_SET); - if (err == MZ_OK) - compat->total_out = position; - return err; -} - -int unzEndOfFile(unzFile file) { - return unzeof(file); -} - -int unzeof(unzFile file) { - mz_compat *compat = (mz_compat *)file; - mz_zip_file *file_info = NULL; - int32_t err = MZ_OK; - - if (!compat) - return UNZ_PARAMERROR; - err = mz_zip_entry_get_info(compat->handle, &file_info); - if (err != MZ_OK) - return err; - if (compat->total_out == (int64_t)file_info->uncompressed_size) - return 1; - return 0; -} - -void* unzGetStream(unzFile file) { - mz_compat *compat = (mz_compat *)file; - if (!compat) - return NULL; - return (void *)compat->stream; -} - -/***************************************************************************/ diff --git a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_compat.h b/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_compat.h deleted file mode 100644 index 6192166..0000000 --- a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_compat.h +++ /dev/null @@ -1,346 +0,0 @@ -/* mz_compat.h -- Backwards compatible interface for older versions - part of the minizip-ng project - - Copyright (C) Nathan Moinvaziri - https://github.com/zlib-ng/minizip-ng - Copyright (C) 1998-2010 Gilles Vollant - https://www.winimage.com/zLibDll/minizip.html - - This program is distributed under the terms of the same license as zlib. - See the accompanying LICENSE file for the full text of the license. - - WARNING: Be very careful updating/overwriting this file. - It has specific changes for SSZipArchive support with some structs moved to SSZipCommon for public access -*/ - -#ifndef MZ_COMPAT_H -#define MZ_COMPAT_H - -#include "mz.h" -#include "../SSZipCommon.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/***************************************************************************/ - -#if defined(HAVE_ZLIB) && defined(MAX_MEM_LEVEL) -#ifndef DEF_MEM_LEVEL -# if MAX_MEM_LEVEL >= 8 -# define DEF_MEM_LEVEL 8 -# else -# define DEF_MEM_LEVEL MAX_MEM_LEVEL -# endif -#endif -#endif -#ifndef MAX_WBITS -#define MAX_WBITS 15 //removed () to suppress warning about ambiguous expansion of macro -SSZipArchive -#endif -#ifndef DEF_MEM_LEVEL -#define DEF_MEM_LEVEL (8) -#endif - -#ifndef ZEXPORT -# define ZEXPORT MZ_EXPORT -#endif - -/***************************************************************************/ - -#if defined(STRICTZIP) || defined(STRICTZIPUNZIP) -/* like the STRICT of WIN32, we define a pointer that cannot be converted - from (void*) without cast */ -typedef struct TagzipFile__ { int unused; } zip_file__; -typedef zip_file__ *zipFile; -#else -typedef void *zipFile; -#endif - -/***************************************************************************/ - -typedef uint64_t ZPOS64_T; - -#ifndef ZCALLBACK -#define ZCALLBACK -#endif - -typedef void* (ZCALLBACK *open_file_func) (void *opaque, const char *filename, int mode); -typedef void* (ZCALLBACK *open64_file_func) (void *opaque, const void *filename, int mode); -typedef unsigned long (ZCALLBACK *read_file_func) (void *opaque, void *stream, void* buf, unsigned long size); -typedef unsigned long (ZCALLBACK *write_file_func) (void *opaque, void *stream, const void* buf, - unsigned long size); -typedef int (ZCALLBACK *close_file_func) (void *opaque, void *stream); -typedef int (ZCALLBACK *testerror_file_func)(void *opaque, void *stream); -typedef long (ZCALLBACK *tell_file_func) (void *opaque, void *stream); -typedef ZPOS64_T (ZCALLBACK *tell64_file_func) (void *opaque, void *stream); -typedef long (ZCALLBACK *seek_file_func) (void *opaque, void *stream, unsigned long offset, int origin); -typedef long (ZCALLBACK *seek64_file_func) (void *opaque, void *stream, ZPOS64_T offset, int origin); - -typedef struct zlib_filefunc_def_s -{ - open_file_func zopen_file; - read_file_func zread_file; - write_file_func zwrite_file; - tell_file_func ztell_file; - seek_file_func zseek_file; - close_file_func zclose_file; - testerror_file_func zerror_file; - void* opaque; -} zlib_filefunc_def; - -typedef struct zlib_filefunc64_def_s -{ - open64_file_func zopen64_file; - read_file_func zread_file; - write_file_func zwrite_file; - tell64_file_func ztell64_file; - seek64_file_func zseek64_file; - close_file_func zclose_file; - testerror_file_func zerror_file; - void* opaque; -} zlib_filefunc64_def; - -/***************************************************************************/ - -#define ZLIB_FILEFUNC_SEEK_SET (0) -#define ZLIB_FILEFUNC_SEEK_CUR (1) -#define ZLIB_FILEFUNC_SEEK_END (2) - -#define ZLIB_FILEFUNC_MODE_READ (1) -#define ZLIB_FILEFUNC_MODE_WRITE (2) -#define ZLIB_FILEFUNC_MODE_READWRITEFILTER (3) - -#define ZLIB_FILEFUNC_MODE_EXISTING (4) -#define ZLIB_FILEFUNC_MODE_CREATE (8) - -/***************************************************************************/ - -ZEXPORT void fill_fopen_filefunc(zlib_filefunc_def *pzlib_filefunc_def); -ZEXPORT void fill_fopen64_filefunc(zlib_filefunc64_def *pzlib_filefunc_def); -ZEXPORT void fill_win32_filefunc(zlib_filefunc_def *pzlib_filefunc_def); -ZEXPORT void fill_win32_filefunc64(zlib_filefunc64_def *pzlib_filefunc_def); -ZEXPORT void fill_win32_filefunc64A(zlib_filefunc64_def *pzlib_filefunc_def); -ZEXPORT void fill_memory_filefunc(zlib_filefunc_def *pzlib_filefunc_def); - -/***************************************************************************/ - - -// SSZipArchive 2.x+ uses dos_date -#define MZ_COMPAT_VERSION 120 - -#if MZ_COMPAT_VERSION <= 110 -#define mz_dos_date dosDate -#else -#define mz_dos_date dos_date -#endif - -typedef struct tm tm_unz; -typedef struct tm tm_zip; - -typedef struct { - uint32_t mz_dos_date; - struct tm tmz_date; - uint16_t internal_fa; /* internal file attributes 2 bytes */ - uint32_t external_fa; /* external file attributes 4 bytes */ -} zip_fileinfo; - -typedef const char *zipcharpc; - -/***************************************************************************/ - -#define ZIP_OK (0) -#define ZIP_EOF (0) -#define ZIP_ERRNO (-1) -#define ZIP_PARAMERROR (-102) -#define ZIP_BADZIPFILE (-103) -#define ZIP_INTERNALERROR (-104) - -#ifndef Z_DEFLATED -#define Z_DEFLATED 8 //removed () to suppress warning about ambiguous expansion of macro -SSZipArchive -#endif -#define Z_BZIP2ED (12) - -#define APPEND_STATUS_CREATE (0) -#define APPEND_STATUS_CREATEAFTER (1) -#define APPEND_STATUS_ADDINZIP (2) - -/***************************************************************************/ -/* Writing a zip file */ - -ZEXPORT zipFile zipOpen(const char *path, int append); -ZEXPORT zipFile zipOpen64(const void *path, int append); -ZEXPORT zipFile zipOpen2(const char *path, int append, const char **globalcomment, - zlib_filefunc_def *pzlib_filefunc_def); - -ZEXPORT zipFile zipOpen2_64(const void *path, int append, const char **globalcomment, - zlib_filefunc64_def *pzlib_filefunc_def); -ZEXPORT zipFile zipOpen_MZ(void *stream, int append, const char **globalcomment); - -ZEXPORT void* zipGetHandle_MZ(zipFile); -ZEXPORT void* zipGetStream_MZ(zipFile file); - -ZEXPORT int zipOpenNewFileInZip(zipFile file, const char *filename, const zip_fileinfo *zipfi, - const void *extrafield_local, uint16_t size_extrafield_local, const void *extrafield_global, - uint16_t size_extrafield_global, const char *comment, int compression_method, int level); -ZEXPORT int zipOpenNewFileInZip_64(zipFile file, const char *filename, const zip_fileinfo *zipfi, - const void *extrafield_local, uint16_t size_extrafield_local, const void *extrafield_global, - uint16_t size_extrafield_global, const char *comment, int compression_method, int level, - int zip64); -ZEXPORT int zipOpenNewFileInZip2(zipFile file, const char *filename, const zip_fileinfo *zipfi, - const void *extrafield_local, uint16_t size_extrafield_local, const void *extrafield_global, - uint16_t size_extrafield_global, const char *comment, int compression_method, int level, - int raw); -ZEXPORT int zipOpenNewFileInZip2_64(zipFile file, const char *filename, const zip_fileinfo *zipfi, - const void *extrafield_local, uint16_t size_extrafield_local, const void *extrafield_global, - uint16_t size_extrafield_global, const char *comment, int compression_method, int level, - int raw, int zip64); -ZEXPORT int zipOpenNewFileInZip3(zipFile file, const char *filename, const zip_fileinfo *zipfi, - const void *extrafield_local, uint16_t size_extrafield_local, const void *extrafield_global, - uint16_t size_extrafield_global, const char *comment, int compression_method, int level, - int raw, int windowBits, int memLevel, int strategy, const char *password, - unsigned long crc_for_crypting); -ZEXPORT int zipOpenNewFileInZip3_64(zipFile file, const char *filename, const zip_fileinfo *zipfi, - const void *extrafield_local, uint16_t size_extrafield_local, const void *extrafield_global, - uint16_t size_extrafield_global, const char *comment, int compression_method, int level, - int raw, int windowBits, int memLevel, int strategy, const char *password, - unsigned long crc_for_crypting, int zip64); -ZEXPORT int zipOpenNewFileInZip4(zipFile file, const char *filename, const zip_fileinfo *zipfi, - const void *extrafield_local, uint16_t size_extrafield_local, const void *extrafield_global, - uint16_t size_extrafield_global, const char *comment, int compression_method, int level, - int raw, int windowBits, int memLevel, int strategy, const char *password, - unsigned long crc_for_crypting, unsigned long version_madeby, unsigned long flag_base); -ZEXPORT int zipOpenNewFileInZip4_64(zipFile file, const char *filename, const zip_fileinfo *zipfi, - const void *extrafield_local, uint16_t size_extrafield_local, const void *extrafield_global, - uint16_t size_extrafield_global, const char *comment, int compression_method, int level, - int raw, int windowBits, int memLevel, int strategy, const char *password, - unsigned long crc_for_crypting, unsigned long version_madeby, unsigned long flag_base, int zip64); -ZEXPORT int zipOpenNewFileInZip5(zipFile file, const char *filename, const zip_fileinfo *zipfi, - const void *extrafield_local, uint16_t size_extrafield_local, const void *extrafield_global, - uint16_t size_extrafield_global, const char *comment, int compression_method, int level, - int raw, int windowBits, int memLevel, int strategy, const char *password, - unsigned long crc_for_crypting, signed char aes, unsigned long version_madeby, unsigned long flag_base, int zip64); - -ZEXPORT int zipWriteInFileInZip(zipFile file, const void *buf, uint32_t len); - -ZEXPORT int zipCloseFileInZipRaw(zipFile file, unsigned long uncompressed_size, uint32_t crc32); -ZEXPORT int zipCloseFileInZipRaw64(zipFile file, uint64_t uncompressed_size, uint32_t crc32); -ZEXPORT int zipCloseFileInZip(zipFile file); -ZEXPORT int zipCloseFileInZip64(zipFile file); - -ZEXPORT int zipClose(zipFile file, const char *global_comment); -ZEXPORT int zipClose_64(zipFile file, const char *global_comment); -ZEXPORT int zipClose2_64(zipFile file, const char *global_comment, uint16_t version_madeby); - int zipClose_MZ(zipFile file, const char *global_comment); - int zipClose2_MZ(zipFile file, const char *global_comment, uint16_t version_madeby); - -/***************************************************************************/ - -#if defined(STRICTUNZIP) || defined(STRICTZIPUNZIP) -/* like the STRICT of WIN32, we define a pointer that cannot be converted - from (void*) without cast */ -typedef struct TagunzFile__ { int unused; } unz_file__; -typedef unz_file__ *unzFile; -#else -typedef void *unzFile; -#endif - -/***************************************************************************/ - -#define UNZ_OK (0) -#define UNZ_END_OF_LIST_OF_FILE (-100) -#define UNZ_ERRNO (-1) -#define UNZ_EOF (0) -#define UNZ_PARAMERROR (-102) -#define UNZ_BADZIPFILE (-103) -#define UNZ_INTERNALERROR (-104) -#define UNZ_CRCERROR (-105) -#define UNZ_BADPASSWORD (-106) - -/***************************************************************************/ - -typedef int (*unzFileNameComparer)(unzFile file, const char *filename1, const char *filename2); -typedef int (*unzIteratorFunction)(unzFile file); -typedef int (*unzIteratorFunction2)(unzFile file, unz_file_info64 *pfile_info, char *filename, - uint16_t filename_size, void *extrafield, uint16_t extrafield_size, char *comment, - uint16_t comment_size); - -/***************************************************************************/ -/* Reading a zip file */ - -ZEXPORT unzFile unzOpen(const char *path); -ZEXPORT unzFile unzOpen64(const void *path); -ZEXPORT unzFile unzOpen2(const char *path, zlib_filefunc_def *pzlib_filefunc_def); -ZEXPORT unzFile unzOpen2_64(const void *path, zlib_filefunc64_def *pzlib_filefunc_def); - unzFile unzOpen_MZ(void *stream); - -ZEXPORT int unzClose(unzFile file); -ZEXPORT int unzClose_MZ(unzFile file); - -ZEXPORT void* unzGetHandle_MZ(unzFile file); -ZEXPORT void* unzGetStream_MZ(zipFile file); - -ZEXPORT int unzGetGlobalInfo(unzFile file, unz_global_info* pglobal_info32); -ZEXPORT int unzGetGlobalInfo64(unzFile file, unz_global_info64 *pglobal_info); -ZEXPORT int unzGetGlobalComment(unzFile file, char *comment, unsigned long comment_size); - -ZEXPORT int unzOpenCurrentFile(unzFile file); -ZEXPORT int unzOpenCurrentFilePassword(unzFile file, const char *password); -ZEXPORT int unzOpenCurrentFile2(unzFile file, int *method, int *level, int raw); -ZEXPORT int unzOpenCurrentFile3(unzFile file, int *method, int *level, int raw, const char *password); -ZEXPORT int unzReadCurrentFile(unzFile file, void *buf, uint32_t len); -ZEXPORT int unzCloseCurrentFile(unzFile file); - -ZEXPORT int unzGetCurrentFileInfo(unzFile file, unz_file_info *pfile_info, char *filename, - unsigned long filename_size, void *extrafield, unsigned long extrafield_size, char *comment, - unsigned long comment_size); -ZEXPORT int unzGetCurrentFileInfo64(unzFile file, unz_file_info64 * pfile_info, char *filename, - unsigned long filename_size, void *extrafield, unsigned long extrafield_size, char *comment, - unsigned long comment_size); - -ZEXPORT int unzGoToFirstFile(unzFile file); -ZEXPORT int unzGoToNextFile(unzFile file); -ZEXPORT int unzLocateFile(unzFile file, const char *filename, unzFileNameComparer filename_compare_func); - -ZEXPORT int unzGetLocalExtrafield(unzFile file, void *buf, unsigned int len); - -/***************************************************************************/ -/* Raw access to zip file */ - -typedef struct unz_file_pos_s { - uint32_t pos_in_zip_directory; /* offset in zip file directory */ - uint32_t num_of_file; /* # of file */ -} unz_file_pos; - -ZEXPORT int unzGetFilePos(unzFile file, unz_file_pos *file_pos); -ZEXPORT int unzGoToFilePos(unzFile file, unz_file_pos *file_pos); - -typedef struct unz64_file_pos_s { - int64_t pos_in_zip_directory; /* offset in zip file directory */ - uint64_t num_of_file; /* # of file */ -} unz64_file_pos; - -ZEXPORT int unzGetFilePos64(unzFile file, unz64_file_pos *file_pos); -ZEXPORT int unzGoToFilePos64(unzFile file, const unz64_file_pos *file_pos); - -ZEXPORT int64_t unzGetOffset64(unzFile file); -ZEXPORT unsigned long - unzGetOffset(unzFile file); -ZEXPORT int unzSetOffset64(unzFile file, int64_t pos); -ZEXPORT int unzSetOffset(unzFile file, unsigned long pos); -ZEXPORT int32_t unztell(unzFile file); -ZEXPORT int32_t unzTell(unzFile file); -ZEXPORT uint64_t unztell64(unzFile file); -ZEXPORT uint64_t unzTell64(unzFile file); -ZEXPORT int unzSeek(unzFile file, int32_t offset, int origin); -ZEXPORT int unzSeek64(unzFile file, int64_t offset, int origin); -ZEXPORT int unzEndOfFile(unzFile file); -ZEXPORT int unzeof(unzFile file); -ZEXPORT void* unzGetStream(unzFile file); - -/***************************************************************************/ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_crypt.c b/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_crypt.c deleted file mode 100644 index 86b97d9..0000000 --- a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_crypt.c +++ /dev/null @@ -1,187 +0,0 @@ -/* mz_crypt.c -- Crypto/hash functions - part of the minizip-ng project - - Copyright (C) Nathan Moinvaziri - https://github.com/zlib-ng/minizip-ng - - This program is distributed under the terms of the same license as zlib. - See the accompanying LICENSE file for the full text of the license. -*/ - -#include "mz.h" -#include "mz_os.h" -#include "mz_crypt.h" - -#if defined(HAVE_ZLIB) -# if !defined(ZLIB_COMPAT) -# include "zlib-ng.h" -# define ZLIB_PREFIX(x) zng_##x -# else -# include "zlib.h" -# define ZLIB_PREFIX(x) x -# endif -#elif defined(HAVE_LZMA) -# include "lzma.h" -#endif - -/***************************************************************************/ - -#if defined(MZ_ZIP_NO_CRYPTO) -int32_t mz_crypt_rand(uint8_t *buf, int32_t size) { - return mz_os_rand(buf, size); -} -#endif - -uint32_t mz_crypt_crc32_update(uint32_t value, const uint8_t *buf, int32_t size) { -#if defined(HAVE_ZLIB) - /* Define z_crc_t in zlib 1.2.5 and less or if using zlib-ng */ -# if (ZLIB_VERNUM < 0x1270) - typedef unsigned long z_crc_t; -# else - typedef uint32_t z_crc_t; -# endif - return (uint32_t)ZLIB_PREFIX(crc32)((z_crc_t)value, buf, (uInt)size); -#elif defined(HAVE_LZMA) - return (uint32_t)lzma_crc32(buf, (size_t)size, (uint32_t)value); -#else - static uint32_t crc32_table[256] = { - 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, - 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, - 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, - 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, - 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, - 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, - 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, - 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, - 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, - 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, - 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, - 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, - 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, - 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, - 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, - 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, - 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, - 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, - 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, - 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, - 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, - 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, - 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, - 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, - 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, - 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, - 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, - 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, - 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, - 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, - 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, - 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, - 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, - 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, - 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, - 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, - 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, - 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, - 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, - 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, - 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, - 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, - 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d - }; - value = ~value; - - while (size > 0) { - value = (value >> 8) ^ crc32_table[(value ^ *buf) & 0xFF]; - - buf += 1; - size -= 1; - } - - return ~value; -#endif -} - -#if defined(HAVE_WZAES) -int32_t mz_crypt_pbkdf2(uint8_t *password, int32_t password_length, uint8_t *salt, - int32_t salt_length, uint16_t iteration_count, uint8_t *key, uint16_t key_length) { - void *hmac1 = NULL; - void *hmac2 = NULL; - void *hmac3 = NULL; - int32_t err = MZ_OK; - uint16_t i = 0; - uint16_t j = 0; - uint16_t k = 0; - uint16_t block_count = 0; - uint8_t uu[MZ_HASH_SHA1_SIZE]; - uint8_t ux[MZ_HASH_SHA1_SIZE]; - - if (!password || !salt || !key) - return MZ_PARAM_ERROR; - - memset(key, 0, key_length); - - mz_crypt_hmac_create(&hmac1); - mz_crypt_hmac_create(&hmac2); - mz_crypt_hmac_create(&hmac3); - - mz_crypt_hmac_set_algorithm(hmac1, MZ_HASH_SHA1); - mz_crypt_hmac_set_algorithm(hmac2, MZ_HASH_SHA1); - mz_crypt_hmac_set_algorithm(hmac3, MZ_HASH_SHA1); - - err = mz_crypt_hmac_init(hmac1, password, password_length); - if (err == MZ_OK) - err = mz_crypt_hmac_init(hmac2, password, password_length); - if (err == MZ_OK) - err = mz_crypt_hmac_update(hmac2, salt, salt_length); - - block_count = 1 + ((uint16_t)key_length - 1) / MZ_HASH_SHA1_SIZE; - - for (i = 0; (err == MZ_OK) && (i < block_count); i += 1) { - memset(ux, 0, sizeof(ux)); - - err = mz_crypt_hmac_copy(hmac2, hmac3); - if (err != MZ_OK) - break; - - uu[0] = (uint8_t)((i + 1) >> 24); - uu[1] = (uint8_t)((i + 1) >> 16); - uu[2] = (uint8_t)((i + 1) >> 8); - uu[3] = (uint8_t)(i + 1); - - for (j = 0, k = 4; j < iteration_count; j += 1) { - err = mz_crypt_hmac_update(hmac3, uu, k); - if (err == MZ_OK) - err = mz_crypt_hmac_end(hmac3, uu, sizeof(uu)); - if (err != MZ_OK) - break; - - for (k = 0; k < MZ_HASH_SHA1_SIZE; k += 1) - ux[k] ^= uu[k]; - - err = mz_crypt_hmac_copy(hmac1, hmac3); - if (err != MZ_OK) - break; - } - - if (err != MZ_OK) - break; - - j = 0; - k = i * MZ_HASH_SHA1_SIZE; - - while (j < MZ_HASH_SHA1_SIZE && k < key_length) - key[k++] = ux[j++]; - } - - /* hmac3 uses the same provider as hmac2, so it must be deleted - before the context is destroyed. */ - mz_crypt_hmac_delete(&hmac3); - mz_crypt_hmac_delete(&hmac1); - mz_crypt_hmac_delete(&hmac2); - - return err; -} -#endif - -/***************************************************************************/ diff --git a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_crypt.h b/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_crypt.h deleted file mode 100644 index de9ccd6..0000000 --- a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_crypt.h +++ /dev/null @@ -1,65 +0,0 @@ -/* mz_crypt.h -- Crypto/hash functions - part of the minizip-ng project - - Copyright (C) Nathan Moinvaziri - https://github.com/zlib-ng/minizip-ng - - This program is distributed under the terms of the same license as zlib. - See the accompanying LICENSE file for the full text of the license. -*/ - -#ifndef MZ_CRYPT_H -#define MZ_CRYPT_H - -#ifdef __cplusplus -extern "C" { -#endif - -/***************************************************************************/ - -uint32_t mz_crypt_crc32_update(uint32_t value, const uint8_t *buf, int32_t size); - -int32_t mz_crypt_pbkdf2(uint8_t *password, int32_t password_length, uint8_t *salt, - int32_t salt_length, uint16_t iteration_count, uint8_t *key, uint16_t key_length); - -/***************************************************************************/ - -int32_t mz_crypt_rand(uint8_t *buf, int32_t size); - -void mz_crypt_sha_reset(void *handle); -int32_t mz_crypt_sha_begin(void *handle); -int32_t mz_crypt_sha_update(void *handle, const void *buf, int32_t size); -int32_t mz_crypt_sha_end(void *handle, uint8_t *digest, int32_t digest_size); -void mz_crypt_sha_set_algorithm(void *handle, uint16_t algorithm); -void* mz_crypt_sha_create(void **handle); -void mz_crypt_sha_delete(void **handle); - -void mz_crypt_aes_reset(void *handle); -int32_t mz_crypt_aes_encrypt(void *handle, uint8_t *buf, int32_t size); -int32_t mz_crypt_aes_decrypt(void *handle, uint8_t *buf, int32_t size); -int32_t mz_crypt_aes_set_encrypt_key(void *handle, const void *key, int32_t key_length); -int32_t mz_crypt_aes_set_decrypt_key(void *handle, const void *key, int32_t key_length); -void mz_crypt_aes_set_mode(void *handle, int32_t mode); -void* mz_crypt_aes_create(void **handle); -void mz_crypt_aes_delete(void **handle); - -void mz_crypt_hmac_reset(void *handle); -int32_t mz_crypt_hmac_init(void *handle, const void *key, int32_t key_length); -int32_t mz_crypt_hmac_update(void *handle, const void *buf, int32_t size); -int32_t mz_crypt_hmac_end(void *handle, uint8_t *digest, int32_t digest_size); -int32_t mz_crypt_hmac_copy(void *src_handle, void *target_handle); -void mz_crypt_hmac_set_algorithm(void *handle, uint16_t algorithm); -void* mz_crypt_hmac_create(void **handle); -void mz_crypt_hmac_delete(void **handle); - -int32_t mz_crypt_sign(uint8_t *message, int32_t message_size, uint8_t *cert_data, int32_t cert_data_size, - const char *cert_pwd, uint8_t **signature, int32_t *signature_size); -int32_t mz_crypt_sign_verify(uint8_t *message, int32_t message_size, uint8_t *signature, int32_t signature_size); - -/***************************************************************************/ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_crypt_apple.c b/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_crypt_apple.c deleted file mode 100644 index 6acab3e..0000000 --- a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_crypt_apple.c +++ /dev/null @@ -1,526 +0,0 @@ -/* mz_crypt_apple.c -- Crypto/hash functions for Apple - part of the minizip-ng project - - Copyright (C) Nathan Moinvaziri - https://github.com/zlib-ng/minizip-ng - - This program is distributed under the terms of the same license as zlib. - See the accompanying LICENSE file for the full text of the license. -*/ - -#include "mz.h" - -#include -#include -#include -#include -#include -#include - -/***************************************************************************/ - -int32_t mz_crypt_rand(uint8_t *buf, int32_t size) { - if (SecRandomCopyBytes(kSecRandomDefault, size, buf) != errSecSuccess) - return 0; - return size; -} - -/***************************************************************************/ - -typedef struct mz_crypt_sha_s { - union { - CC_SHA1_CTX ctx1; - CC_SHA256_CTX ctx256; - CC_SHA512_CTX ctx512; - }; - int32_t error; - int32_t initialized; - uint16_t algorithm; -} mz_crypt_sha; - -/***************************************************************************/ - -static const uint8_t mz_crypt_sha_digest_size[] = { - MZ_HASH_SHA1_SIZE, 0, MZ_HASH_SHA224_SIZE, - MZ_HASH_SHA256_SIZE, MZ_HASH_SHA384_SIZE, MZ_HASH_SHA512_SIZE -}; - -/***************************************************************************/ - -void mz_crypt_sha_reset(void *handle) { - mz_crypt_sha *sha = (mz_crypt_sha *)handle; - - sha->error = 0; - sha->initialized = 0; -} - -int32_t mz_crypt_sha_begin(void *handle) { - mz_crypt_sha *sha = (mz_crypt_sha *)handle; - - if (!sha) - return MZ_PARAM_ERROR; - - mz_crypt_sha_reset(handle); - - switch (sha->algorithm) { - case MZ_HASH_SHA1: - sha->error = CC_SHA1_Init(&sha->ctx1); - break; - case MZ_HASH_SHA224: - sha->error = CC_SHA224_Init(&sha->ctx256); - break; - case MZ_HASH_SHA256: - sha->error = CC_SHA256_Init(&sha->ctx256); - break; - case MZ_HASH_SHA384: - sha->error = CC_SHA384_Init(&sha->ctx512); - break; - case MZ_HASH_SHA512: - sha->error = CC_SHA512_Init(&sha->ctx512); - break; - default: - return MZ_PARAM_ERROR; - } - - if (!sha->error) - return MZ_HASH_ERROR; - - sha->initialized = 1; - return MZ_OK; -} - -int32_t mz_crypt_sha_update(void *handle, const void *buf, int32_t size) { - mz_crypt_sha *sha = (mz_crypt_sha *)handle; - - if (!sha || !buf || !sha->initialized) - return MZ_PARAM_ERROR; - - switch (sha->algorithm) { - case MZ_HASH_SHA1: - sha->error = CC_SHA1_Update(&sha->ctx1, buf, size); - break; - case MZ_HASH_SHA224: - sha->error = CC_SHA224_Update(&sha->ctx256, buf, size); - break; - case MZ_HASH_SHA256: - sha->error = CC_SHA256_Update(&sha->ctx256, buf, size); - break; - case MZ_HASH_SHA384: - sha->error = CC_SHA384_Update(&sha->ctx512, buf, size); - break; - case MZ_HASH_SHA512: - sha->error = CC_SHA512_Update(&sha->ctx512, buf, size); - break; - } - - if (!sha->error) - return MZ_HASH_ERROR; - - return size; -} - -int32_t mz_crypt_sha_end(void *handle, uint8_t *digest, int32_t digest_size) { - mz_crypt_sha *sha = (mz_crypt_sha *)handle; - - if (!sha || !digest || !sha->initialized) - return MZ_PARAM_ERROR; - if (digest_size < mz_crypt_sha_digest_size[sha->algorithm - MZ_HASH_SHA1]) - return MZ_PARAM_ERROR; - - switch (sha->algorithm) { - case MZ_HASH_SHA1: - sha->error = CC_SHA1_Final(digest, &sha->ctx1); - break; - case MZ_HASH_SHA224: - sha->error = CC_SHA224_Final(digest, &sha->ctx256); - break; - case MZ_HASH_SHA256: - sha->error = CC_SHA256_Final(digest, &sha->ctx256); - break; - case MZ_HASH_SHA384: - sha->error = CC_SHA384_Final(digest, &sha->ctx512); - break; - case MZ_HASH_SHA512: - sha->error = CC_SHA512_Final(digest, &sha->ctx512); - break; - } - - if (!sha->error) - return MZ_HASH_ERROR; - - return MZ_OK; -} - -void mz_crypt_sha_set_algorithm(void *handle, uint16_t algorithm) { - mz_crypt_sha *sha = (mz_crypt_sha *)handle; - if (MZ_HASH_SHA1 <= algorithm && algorithm <= MZ_HASH_SHA512) - sha->algorithm = algorithm; -} - -void *mz_crypt_sha_create(void **handle) { - mz_crypt_sha *sha = NULL; - - sha = (mz_crypt_sha *)calloc(1, sizeof(mz_crypt_sha)); - if (sha) { - memset(sha, 0, sizeof(mz_crypt_sha)); - sha->algorithm = MZ_HASH_SHA256; - } - if (handle) - *handle = sha; - - return sha; -} - -void mz_crypt_sha_delete(void **handle) { - mz_crypt_sha *sha = NULL; - if (!handle) - return; - sha = (mz_crypt_sha *)*handle; - if (sha) { - mz_crypt_sha_reset(*handle); - free(sha); - } - *handle = NULL; -} - -/***************************************************************************/ - -typedef struct mz_crypt_aes_s { - CCCryptorRef crypt; - int32_t mode; - int32_t error; -} mz_crypt_aes; - -/***************************************************************************/ - -void mz_crypt_aes_reset(void *handle) { - mz_crypt_aes *aes = (mz_crypt_aes *)handle; - - if (aes->crypt) - CCCryptorRelease(aes->crypt); - aes->crypt = NULL; -} - -int32_t mz_crypt_aes_encrypt(void *handle, uint8_t *buf, int32_t size) { - mz_crypt_aes *aes = (mz_crypt_aes *)handle; - size_t data_moved = 0; - - if (!aes || !buf) - return MZ_PARAM_ERROR; - if (size != MZ_AES_BLOCK_SIZE) - return MZ_PARAM_ERROR; - - aes->error = CCCryptorUpdate(aes->crypt, buf, size, buf, size, &data_moved); - - if (aes->error != kCCSuccess) - return MZ_HASH_ERROR; - - return size; -} - -int32_t mz_crypt_aes_decrypt(void *handle, uint8_t *buf, int32_t size) { - mz_crypt_aes *aes = (mz_crypt_aes *)handle; - size_t data_moved = 0; - - if (!aes || !buf) - return MZ_PARAM_ERROR; - if (size != MZ_AES_BLOCK_SIZE) - return MZ_PARAM_ERROR; - - aes->error = CCCryptorUpdate(aes->crypt, buf, size, buf, size, &data_moved); - - if (aes->error != kCCSuccess) - return MZ_HASH_ERROR; - - return size; -} - -int32_t mz_crypt_aes_set_encrypt_key(void *handle, const void *key, int32_t key_length) { - mz_crypt_aes *aes = (mz_crypt_aes *)handle; - - if (!aes || !key || !key_length) - return MZ_PARAM_ERROR; - - mz_crypt_aes_reset(handle); - - aes->error = CCCryptorCreate(kCCEncrypt, kCCAlgorithmAES, kCCOptionECBMode, - key, key_length, NULL, &aes->crypt); - - if (aes->error != kCCSuccess) - return MZ_HASH_ERROR; - - return MZ_OK; -} - -int32_t mz_crypt_aes_set_decrypt_key(void *handle, const void *key, int32_t key_length) { - mz_crypt_aes *aes = (mz_crypt_aes *)handle; - - if (!aes || !key || !key_length) - return MZ_PARAM_ERROR; - - mz_crypt_aes_reset(handle); - - aes->error = CCCryptorCreate(kCCDecrypt, kCCAlgorithmAES, kCCOptionECBMode, - key, key_length, NULL, &aes->crypt); - - if (aes->error != kCCSuccess) - return MZ_HASH_ERROR; - - return MZ_OK; -} - -void mz_crypt_aes_set_mode(void *handle, int32_t mode) { - mz_crypt_aes *aes = (mz_crypt_aes *)handle; - aes->mode = mode; -} - -void *mz_crypt_aes_create(void **handle) { - mz_crypt_aes *aes = NULL; - - aes = (mz_crypt_aes *)calloc(1, sizeof(mz_crypt_aes)); - if (handle) - *handle = aes; - - return aes; -} - -void mz_crypt_aes_delete(void **handle) { - mz_crypt_aes *aes = NULL; - if (!handle) - return; - aes = (mz_crypt_aes *)*handle; - if (aes) { - mz_crypt_aes_reset(*handle); - free(aes); - } - *handle = NULL; -} - -/***************************************************************************/ - -typedef struct mz_crypt_hmac_s { - CCHmacContext ctx; - int32_t initialized; - int32_t error; - uint16_t algorithm; -} mz_crypt_hmac; - -/***************************************************************************/ - -static void mz_crypt_hmac_free(void *handle) { - mz_crypt_hmac *hmac = (mz_crypt_hmac *)handle; - memset(&hmac->ctx, 0, sizeof(hmac->ctx)); -} - -void mz_crypt_hmac_reset(void *handle) { - mz_crypt_hmac *hmac = (mz_crypt_hmac *)handle; - mz_crypt_hmac_free(handle); - hmac->error = 0; -} - -int32_t mz_crypt_hmac_init(void *handle, const void *key, int32_t key_length) { - mz_crypt_hmac *hmac = (mz_crypt_hmac *)handle; - CCHmacAlgorithm algorithm = 0; - - if (!hmac || !key) - return MZ_PARAM_ERROR; - - mz_crypt_hmac_reset(handle); - - if (hmac->algorithm == MZ_HASH_SHA1) - algorithm = kCCHmacAlgSHA1; - else if (hmac->algorithm == MZ_HASH_SHA256) - algorithm = kCCHmacAlgSHA256; - else - return MZ_PARAM_ERROR; - - CCHmacInit(&hmac->ctx, algorithm, key, key_length); - return MZ_OK; -} - -int32_t mz_crypt_hmac_update(void *handle, const void *buf, int32_t size) { - mz_crypt_hmac *hmac = (mz_crypt_hmac *)handle; - - if (!hmac || !buf) - return MZ_PARAM_ERROR; - - CCHmacUpdate(&hmac->ctx, buf, size); - return MZ_OK; -} - -int32_t mz_crypt_hmac_end(void *handle, uint8_t *digest, int32_t digest_size) { - mz_crypt_hmac *hmac = (mz_crypt_hmac *)handle; - - if (!hmac || !digest) - return MZ_PARAM_ERROR; - - if (hmac->algorithm == MZ_HASH_SHA1) { - if (digest_size < MZ_HASH_SHA1_SIZE) - return MZ_BUF_ERROR; - CCHmacFinal(&hmac->ctx, digest); - } else { - if (digest_size < MZ_HASH_SHA256_SIZE) - return MZ_BUF_ERROR; - CCHmacFinal(&hmac->ctx, digest); - } - - return MZ_OK; -} - -void mz_crypt_hmac_set_algorithm(void *handle, uint16_t algorithm) { - mz_crypt_hmac *hmac = (mz_crypt_hmac *)handle; - hmac->algorithm = algorithm; -} - -int32_t mz_crypt_hmac_copy(void *src_handle, void *target_handle) { - mz_crypt_hmac *source = (mz_crypt_hmac *)src_handle; - mz_crypt_hmac *target = (mz_crypt_hmac *)target_handle; - - if (!source || !target) - return MZ_PARAM_ERROR; - - memcpy(&target->ctx, &source->ctx, sizeof(CCHmacContext)); - return MZ_OK; -} - -void *mz_crypt_hmac_create(void **handle) { - mz_crypt_hmac *hmac = NULL; - - hmac = (mz_crypt_hmac *)calloc(1, sizeof(mz_crypt_hmac)); - if (hmac) - hmac->algorithm = MZ_HASH_SHA256; - if (handle) - *handle = hmac; - - return hmac; -} - -void mz_crypt_hmac_delete(void **handle) { - mz_crypt_hmac *hmac = NULL; - if (!handle) - return; - hmac = (mz_crypt_hmac *)*handle; - if (hmac) { - mz_crypt_hmac_free(*handle); - free(hmac); - } - *handle = NULL; -} - -/***************************************************************************/ - -#if defined(MZ_ZIP_SIGNING) -int32_t mz_crypt_sign(uint8_t *message, int32_t message_size, uint8_t *cert_data, int32_t cert_data_size, - const char *cert_pwd, uint8_t **signature, int32_t *signature_size) { - CFStringRef password_ref = NULL; - CFDictionaryRef options_dict = NULL; - CFDictionaryRef identity_trust = NULL; - CFDataRef signature_out = NULL; - CFDataRef pkcs12_data = NULL; - CFArrayRef items = 0; - SecIdentityRef identity = NULL; - SecTrustRef trust = NULL; - OSStatus status = noErr; - const void *options_key[2] = {kSecImportExportPassphrase, kSecReturnRef}; - const void *options_values[2] = {0, kCFBooleanTrue}; - int32_t err = MZ_SIGN_ERROR; - - if (!message || !cert_data || !signature || !signature_size) - return MZ_PARAM_ERROR; - - *signature = NULL; - *signature_size = 0; - - password_ref = CFStringCreateWithCString(0, cert_pwd, kCFStringEncodingUTF8); - options_values[0] = password_ref; - - options_dict = CFDictionaryCreate(0, options_key, options_values, 2, 0, 0); - if (options_dict) - pkcs12_data = CFDataCreate(0, cert_data, cert_data_size); - if (pkcs12_data) - status = SecPKCS12Import(pkcs12_data, options_dict, &items); - if (status == noErr) - identity_trust = CFArrayGetValueAtIndex(items, 0); - if (identity_trust) - identity = (SecIdentityRef)CFDictionaryGetValue(identity_trust, kSecImportItemIdentity); - if (identity) - trust = (SecTrustRef)CFDictionaryGetValue(identity_trust, kSecImportItemTrust); - if (trust) { - status = CMSEncodeContent(identity, NULL, NULL, FALSE, 0, message, message_size, &signature_out); - - if (status == errSecSuccess) { - *signature_size = CFDataGetLength(signature_out); - *signature = (uint8_t *)malloc(*signature_size); - - memcpy(*signature, CFDataGetBytePtr(signature_out), *signature_size); - - err = MZ_OK; - } - } - - if (signature_out) - CFRelease(signature_out); - if (items) - CFRelease(items); - if (pkcs12_data) - CFRelease(pkcs12_data); - if (options_dict) - CFRelease(options_dict); - if (password_ref) - CFRelease(password_ref); - - return err; -} - -int32_t mz_crypt_sign_verify(uint8_t *message, int32_t message_size, uint8_t *signature, int32_t signature_size) { - CMSDecoderRef decoder = NULL; - CMSSignerStatus signer_status = 0; - CFDataRef message_out = NULL; - SecPolicyRef trust_policy = NULL; - OSStatus status = noErr; - OSStatus verify_status = noErr; - size_t signer_count = 0; - size_t i = 0; - int32_t err = MZ_SIGN_ERROR; - - if (!message || !signature) - return MZ_PARAM_ERROR; - - status = CMSDecoderCreate(&decoder); - if (status == errSecSuccess) - status = CMSDecoderUpdateMessage(decoder, signature, signature_size); - if (status == errSecSuccess) - status = CMSDecoderFinalizeMessage(decoder); - if (status == errSecSuccess) - trust_policy = SecPolicyCreateBasicX509(); - - if (status == errSecSuccess && trust_policy) { - CMSDecoderGetNumSigners(decoder, &signer_count); - if (signer_count > 0) - err = MZ_OK; - for (i = 0; i < signer_count; i += 1) { - status = CMSDecoderCopySignerStatus(decoder, i, trust_policy, TRUE, &signer_status, NULL, &verify_status); - if (status != errSecSuccess || verify_status != 0 || signer_status != kCMSSignerValid) { - err = MZ_SIGN_ERROR; - break; - } - } - } - - if (err == MZ_OK) { - status = CMSDecoderCopyContent(decoder, &message_out); - if ((status != errSecSuccess) || - (CFDataGetLength(message_out) != message_size) || - (memcmp(message, CFDataGetBytePtr(message_out), message_size) != 0)) - err = MZ_SIGN_ERROR; - } - - if (trust_policy) - CFRelease(trust_policy); - if (decoder) - CFRelease(decoder); - - return err; -} - -#endif diff --git a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_os.c b/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_os.c deleted file mode 100644 index afbbdb4..0000000 --- a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_os.c +++ /dev/null @@ -1,348 +0,0 @@ -/* mz_os.c -- System functions - part of the minizip-ng project - - Copyright (C) Nathan Moinvaziri - https://github.com/zlib-ng/minizip-ng - Copyright (C) 1998-2010 Gilles Vollant - https://www.winimage.com/zLibDll/minizip.html - - This program is distributed under the terms of the same license as zlib. - See the accompanying LICENSE file for the full text of the license. -*/ - -#include "mz.h" -#include "mz_crypt.h" -#include "mz_os.h" -#include "mz_strm.h" -#include "mz_strm_os.h" - -#include /* tolower */ - -/***************************************************************************/ - -int32_t mz_path_combine(char *path, const char *join, int32_t max_path) { - int32_t path_len = 0; - - if (!path || !join || !max_path) - return MZ_PARAM_ERROR; - - path_len = (int32_t)strlen(path); - - if (path_len == 0) { - strncpy(path, join, max_path - 1); - path[max_path - 1] = 0; - } else { - mz_path_append_slash(path, max_path, MZ_PATH_SLASH_PLATFORM); - path_len = (int32_t)strlen(path); - if (max_path > path_len) - strncat(path, join, max_path - path_len - 1); - } - - return MZ_OK; -} - -int32_t mz_path_append_slash(char *path, int32_t max_path, char slash) { - int32_t path_len = (int32_t)strlen(path); - if ((path_len + 2) >= max_path) - return MZ_BUF_ERROR; - if (path[path_len - 1] != '\\' && path[path_len - 1] != '/') { - path[path_len] = slash; - path[path_len + 1] = 0; - } - return MZ_OK; -} - -int32_t mz_path_remove_slash(char *path) { - int32_t path_len = (int32_t)strlen(path); - while (path_len > 0) { - if (path[path_len - 1] == '\\' || path[path_len - 1] == '/') - path[path_len - 1] = 0; - else - break; - - path_len -= 1; - } - return MZ_OK; -} - -int32_t mz_path_has_slash(const char *path) { - int32_t path_len = (int32_t)strlen(path); - if (path[path_len - 1] != '\\' && path[path_len - 1] != '/') - return MZ_EXIST_ERROR; - return MZ_OK; -} - -int32_t mz_path_convert_slashes(char *path, char slash) { - int32_t i = 0; - - for (i = 0; i < (int32_t)strlen(path); i += 1) { - if (path[i] == '\\' || path[i] == '/') - path[i] = slash; - } - return MZ_OK; -} - -int32_t mz_path_compare_wc(const char *path, const char *wildcard, uint8_t ignore_case) { - while (*path != 0) { - switch (*wildcard) { - case '*': - - if (*(wildcard + 1) == 0) - return MZ_OK; - - while (*path != 0) { - if (mz_path_compare_wc(path, (wildcard + 1), ignore_case) == MZ_OK) - return MZ_OK; - - path += 1; - } - - return MZ_EXIST_ERROR; - - default: - /* Ignore differences in path slashes on platforms */ - if ((*path == '\\' && *wildcard == '/') || (*path == '/' && *wildcard == '\\')) - break; - - if (ignore_case) { - if (tolower(*path) != tolower(*wildcard)) - return MZ_EXIST_ERROR; - } else { - if (*path != *wildcard) - return MZ_EXIST_ERROR; - } - - break; - } - - path += 1; - wildcard += 1; - } - - if ((*wildcard != 0) && (*wildcard != '*')) - return MZ_EXIST_ERROR; - - return MZ_OK; -} - -int32_t mz_path_resolve(const char *path, char *output, int32_t max_output) { - const char *source = path; - const char *check = output; - char *target = output; - - if (max_output <= 0) - return MZ_PARAM_ERROR; - - while (*source != 0 && max_output > 1) { - check = source; - if ((*check == '\\') || (*check == '/')) - check += 1; - - if ((source == path) || (target == output) || (check != source)) { - /* Skip double paths */ - if ((*check == '\\') || (*check == '/')) { - source += 1; - continue; - } - if (*check == '.') { - check += 1; - - /* Remove . if at end of string and not at the beginning */ - if ((*check == 0) && (source != path && target != output)) { - /* Copy last slash */ - *target = *source; - target += 1; - max_output -= 1; - source += (check - source); - continue; - } - /* Remove . if not at end of string */ - else if ((*check == '\\') || (*check == '/')) { - source += (check - source); - /* Skip slash if at beginning of string */ - if (target == output && *source != 0) - source += 1; - continue; - } - /* Go to parent directory .. */ - else if (*check == '.') { - check += 1; - if ((*check == 0) || (*check == '\\' || *check == '/')) { - source += (check - source); - - /* Search backwards for previous slash */ - if (target != output) { - target -= 1; - do { - if ((*target == '\\') || (*target == '/')) - break; - - target -= 1; - max_output += 1; - } while (target > output); - } - - if ((target == output) && (*source != 0)) - source += 1; - if ((*target == '\\' || *target == '/') && (*source == 0)) - target += 1; - - *target = 0; - continue; - } - } - } - } - - *target = *source; - - source += 1; - target += 1; - max_output -= 1; - } - - *target = 0; - - if (*path == 0) - return MZ_INTERNAL_ERROR; - - return MZ_OK; -} - -int32_t mz_path_remove_filename(char *path) { - char *path_ptr = NULL; - - if (!path) - return MZ_PARAM_ERROR; - - path_ptr = path + strlen(path) - 1; - - while (path_ptr > path) { - if ((*path_ptr == '/') || (*path_ptr == '\\')) { - *path_ptr = 0; - break; - } - - path_ptr -= 1; - } - - if (path_ptr == path) - *path_ptr = 0; - - return MZ_OK; -} - -int32_t mz_path_remove_extension(char *path) { - char *path_ptr = NULL; - - if (!path) - return MZ_PARAM_ERROR; - - path_ptr = path + strlen(path) - 1; - - while (path_ptr > path) { - if ((*path_ptr == '/') || (*path_ptr == '\\')) - break; - if (*path_ptr == '.') { - *path_ptr = 0; - break; - } - - path_ptr -= 1; - } - - if (path_ptr == path) - *path_ptr = 0; - - return MZ_OK; -} - -int32_t mz_path_get_filename(const char *path, const char **filename) { - const char *match = NULL; - - if (!path || !filename) - return MZ_PARAM_ERROR; - - *filename = NULL; - - for (match = path; *match != 0; match += 1) { - if ((*match == '\\') || (*match == '/')) - *filename = match + 1; - } - - if (!*filename) - return MZ_EXIST_ERROR; - - return MZ_OK; -} - -int32_t mz_dir_make(const char *path) { - int32_t err = MZ_OK; - char *current_dir = NULL; - char *match = NULL; - char hold = 0; - - current_dir = strdup(path); - if (!current_dir) - return MZ_MEM_ERROR; - - mz_path_remove_slash(current_dir); - - err = mz_os_make_dir(current_dir); - if (err != MZ_OK) { - match = current_dir + 1; - while (1) { - while (*match != 0 && *match != '\\' && *match != '/') - match += 1; - hold = *match; - *match = 0; - - err = mz_os_make_dir(current_dir); - if (err != MZ_OK) - break; - if (hold == 0) - break; - - *match = hold; - match += 1; - } - } - - free(current_dir); - return err; -} - -int32_t mz_file_get_crc(const char *path, uint32_t *result_crc) { - void *stream = NULL; - uint32_t crc32 = 0; - int32_t read = 0; - int32_t err = MZ_OK; - uint8_t buf[16384]; - - mz_stream_os_create(&stream); - - err = mz_stream_os_open(stream, path, MZ_OPEN_MODE_READ); - - if (err == MZ_OK) { - do { - read = mz_stream_os_read(stream, buf, sizeof(buf)); - - if (read < 0) { - err = read; - break; - } - - crc32 = mz_crypt_crc32_update(crc32, buf, read); - } while ((err == MZ_OK) && (read > 0)); - - mz_stream_os_close(stream); - } - - *result_crc = crc32; - - mz_stream_os_delete(&stream); - - return err; -} - -/***************************************************************************/ diff --git a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_os.h b/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_os.h deleted file mode 100644 index 4505bc3..0000000 --- a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_os.h +++ /dev/null @@ -1,176 +0,0 @@ -/* mz_os.h -- System functions - part of the minizip-ng project - - Copyright (C) Nathan Moinvaziri - https://github.com/zlib-ng/minizip-ng - - This program is distributed under the terms of the same license as zlib. - See the accompanying LICENSE file for the full text of the license. -*/ - -#ifndef MZ_OS_H -#define MZ_OS_H - -#ifdef __cplusplus -extern "C" { -#endif - -/***************************************************************************/ - -#if defined(__APPLE__) -# define MZ_VERSION_MADEBY_HOST_SYSTEM (MZ_HOST_SYSTEM_OSX_DARWIN) -#elif defined(__riscos__) -# define MZ_VERSION_MADEBY_HOST_SYSTEM (MZ_HOST_SYSTEM_RISCOS) -#elif defined(_WIN32) -# define MZ_VERSION_MADEBY_HOST_SYSTEM (MZ_HOST_SYSTEM_WINDOWS_NTFS) -#else -# define MZ_VERSION_MADEBY_HOST_SYSTEM (MZ_HOST_SYSTEM_UNIX) -#endif - -#if defined(HAVE_LZMA) || defined(HAVE_LIBCOMP) -# define MZ_VERSION_MADEBY_ZIP_VERSION (63) -#elif defined(HAVE_WZAES) -# define MZ_VERSION_MADEBY_ZIP_VERSION (51) -#elif defined(HAVE_BZIP2) -# define MZ_VERSION_MADEBY_ZIP_VERSION (46) -#else -# define MZ_VERSION_MADEBY_ZIP_VERSION (45) -#endif - -#define MZ_VERSION_MADEBY ((MZ_VERSION_MADEBY_HOST_SYSTEM << 8) | \ - (MZ_VERSION_MADEBY_ZIP_VERSION)) - -#define MZ_PATH_SLASH_UNIX ('/') -#define MZ_PATH_SLASH_WINDOWS ('\\') -#if defined(_WIN32) -# define MZ_PATH_SLASH_PLATFORM (MZ_PATH_SLASH_WINDOWS) -#else -# define MZ_PATH_SLASH_PLATFORM (MZ_PATH_SLASH_UNIX) -#endif - -/***************************************************************************/ - -#if defined(_WIN32) -struct dirent { - char d_name[256]; -}; -typedef void* DIR; -#else -#include -#endif - -/***************************************************************************/ -/* Shared functions */ - -int32_t mz_path_combine(char *path, const char *join, int32_t max_path); -/* Combines two paths */ - -int32_t mz_path_append_slash(char *path, int32_t max_path, char slash); -/* Appends a path slash on to the end of the path */ - -int32_t mz_path_remove_slash(char *path); -/* Removes a path slash from the end of the path */ - -int32_t mz_path_has_slash(const char *path); -/* Returns whether or not the path ends with slash */ - -int32_t mz_path_convert_slashes(char *path, char slash); -/* Converts the slashes in a path */ - -int32_t mz_path_compare_wc(const char *path, const char *wildcard, uint8_t ignore_case); -/* Compare two paths with wildcard */ - -int32_t mz_path_resolve(const char *path, char *target, int32_t max_target); -/* Resolves path */ - -int32_t mz_path_remove_filename(char *path); -/* Remove the filename from a path */ - -int32_t mz_path_remove_extension(char *path); -/* Remove the extension from a path */ - -int32_t mz_path_get_filename(const char *path, const char **filename); -/* Get the filename from a path */ - -int32_t mz_dir_make(const char *path); -/* Creates a directory recursively */ - -int32_t mz_file_get_crc(const char *path, uint32_t *result_crc); -/* Gets the crc32 hash of a file */ - -/***************************************************************************/ -/* Platform specific functions */ - -wchar_t *mz_os_unicode_string_create(const char *string, int32_t encoding); -/* Create unicode string from a utf8 string */ - -void mz_os_unicode_string_delete(wchar_t **string); -/* Delete a unicode string that was created */ - -uint8_t *mz_os_utf8_string_create(const char *string, int32_t encoding); -/* Create a utf8 string from a string with another encoding */ - -void mz_os_utf8_string_delete(uint8_t **string); -/* Delete a utf8 string that was created */ - -int32_t mz_os_rand(uint8_t *buf, int32_t size); -/* Random number generator (not cryptographically secure) */ - -int32_t mz_os_rename(const char *source_path, const char *target_path); -/* Rename a file */ - -int32_t mz_os_unlink(const char *path); -/* Delete an existing file */ - -int32_t mz_os_file_exists(const char *path); -/* Check to see if a file exists */ - -int64_t mz_os_get_file_size(const char *path); -/* Gets the length of a file */ - -int32_t mz_os_get_file_date(const char *path, time_t *modified_date, time_t *accessed_date, time_t *creation_date); -/* Gets a file's modified, access, and creation dates if supported */ - -int32_t mz_os_set_file_date(const char *path, time_t modified_date, time_t accessed_date, time_t creation_date); -/* Sets a file's modified, access, and creation dates if supported */ - -int32_t mz_os_get_file_attribs(const char *path, uint32_t *attributes); -/* Gets a file's attributes */ - -int32_t mz_os_set_file_attribs(const char *path, uint32_t attributes); -/* Sets a file's attributes */ - -int32_t mz_os_make_dir(const char *path); -/* Recursively creates a directory */ - -DIR* mz_os_open_dir(const char *path); -/* Opens a directory for listing */ -struct -dirent* mz_os_read_dir(DIR *dir); -/* Reads a directory listing entry */ - -int32_t mz_os_close_dir(DIR *dir); -/* Closes a directory that has been opened for listing */ - -int32_t mz_os_is_dir(const char *path); -/* Checks to see if path is a directory */ - -int32_t mz_os_is_symlink(const char *path); -/* Checks to see if path is a symbolic link */ - -int32_t mz_os_make_symlink(const char *path, const char *target_path); -/* Creates a symbolic link pointing to a target */ - -int32_t mz_os_read_symlink(const char *path, char *target_path, int32_t max_target_path); -/* Gets the target path for a symbolic link */ - -uint64_t mz_os_ms_time(void); -/* Gets the time in milliseconds */ - -/***************************************************************************/ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_os_posix.c b/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_os_posix.c deleted file mode 100644 index 980ffbf..0000000 --- a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_os_posix.c +++ /dev/null @@ -1,350 +0,0 @@ -/* mz_os_posix.c -- System functions for posix - part of the minizip-ng project - - Copyright (C) Nathan Moinvaziri - https://github.com/zlib-ng/minizip-ng - - This program is distributed under the terms of the same license as zlib. - See the accompanying LICENSE file for the full text of the license. -*/ - -#include "mz.h" -#include "mz_strm.h" -#include "mz_os.h" - -#include /* rename */ -#include -#if defined(HAVE_ICONV) -#include -#endif - -#include -#include - -#ifndef _WIN32 -# include -# include -#endif -#if defined(__APPLE__) -# include -# include -#endif - -#if defined(HAVE_GETRANDOM) -# include -#endif -#if defined(HAVE_LIBBSD) -# include /* arc4random_buf */ -#endif - -/***************************************************************************/ - -#if defined(HAVE_ICONV) -uint8_t *mz_os_utf8_string_create(const char *string, int32_t encoding) { - iconv_t cd; - const char *from_encoding = NULL; - size_t result = 0; - size_t string_length = 0; - size_t string_utf8_size = 0; - uint8_t *string_utf8 = NULL; - uint8_t *string_utf8_ptr = NULL; - - if (!string) - return NULL; - - if (encoding == MZ_ENCODING_CODEPAGE_437) - from_encoding = "CP437"; - else if (encoding == MZ_ENCODING_CODEPAGE_932) - from_encoding = "CP932"; - else if (encoding == MZ_ENCODING_CODEPAGE_936) - from_encoding = "CP936"; - else if (encoding == MZ_ENCODING_CODEPAGE_950) - from_encoding = "CP950"; - else if (encoding == MZ_ENCODING_UTF8) - from_encoding = "UTF-8"; - else - return NULL; - - cd = iconv_open("UTF-8", from_encoding); - if (cd == (iconv_t)-1) - return NULL; - - string_length = strlen(string); - string_utf8_size = string_length * 2; - string_utf8 = (uint8_t *)calloc((int32_t)(string_utf8_size + 1), sizeof(char)); - string_utf8_ptr = string_utf8; - - if (string_utf8) { - result = iconv(cd, (char **)&string, &string_length, - (char **)&string_utf8_ptr, &string_utf8_size); - } - - iconv_close(cd); - - if (result == (size_t)-1) { - free(string_utf8); - string_utf8 = NULL; - } - - return string_utf8; -} -#else -uint8_t *mz_os_utf8_string_create(const char *string, int32_t encoding) { - return (uint8_t *)strdup(string); -} -#endif - -void mz_os_utf8_string_delete(uint8_t **string) { - if (string) { - free(*string); - *string = NULL; - } -} - -/***************************************************************************/ - -#if defined(HAVE_GETRANDOM) -int32_t mz_os_rand(uint8_t *buf, int32_t size) { - int32_t left = size; - int32_t written = 0; - - while (left > 0) { - written = getrandom(buf, left, 0); - if (written < 0) - return MZ_INTERNAL_ERROR; - - buf += written; - left -= written; - } - return size - left; -} -#elif defined(HAVE_ARC4RANDOM_BUF) -int32_t mz_os_rand(uint8_t *buf, int32_t size) { - if (size < 0) - return 0; - arc4random_buf(buf, (uint32_t)size); - return size; -} -#elif defined(HAVE_ARC4RANDOM) -int32_t mz_os_rand(uint8_t *buf, int32_t size) { - int32_t left = size; - for (; left > 2; left -= 3, buf += 3) { - uint32_t val = arc4random(); - - buf[0] = (val) & 0xFF; - buf[1] = (val >> 8) & 0xFF; - buf[2] = (val >> 16) & 0xFF; - } - for (; left > 0; left--, buf++) { - *buf = arc4random() & 0xFF; - } - return size - left; -} -#else -int32_t mz_os_rand(uint8_t *buf, int32_t size) { - static unsigned calls = 0; - int32_t i = 0; - - /* Ensure different random header each time */ - if (++calls == 1) { - #define PI_SEED 3141592654UL - srand((unsigned)(time(NULL) ^ PI_SEED)); - } - - while (i < size) - buf[i++] = (rand() >> 7) & 0xff; - - return size; -} -#endif - -int32_t mz_os_rename(const char *source_path, const char *target_path) { - if (rename(source_path, target_path) == -1) - return MZ_EXIST_ERROR; - - return MZ_OK; -} - -int32_t mz_os_unlink(const char *path) { - if (unlink(path) == -1) - return MZ_EXIST_ERROR; - - return MZ_OK; -} - -int32_t mz_os_file_exists(const char *path) { - struct stat path_stat; - - memset(&path_stat, 0, sizeof(path_stat)); - if (stat(path, &path_stat) == 0) - return MZ_OK; - return MZ_EXIST_ERROR; -} - -int64_t mz_os_get_file_size(const char *path) { - struct stat path_stat; - - memset(&path_stat, 0, sizeof(path_stat)); - if (stat(path, &path_stat) == 0) { - /* Stat returns size taken up by directory entry, so return 0 */ - if (S_ISDIR(path_stat.st_mode)) - return 0; - - return path_stat.st_size; - } - - return 0; -} - -int32_t mz_os_get_file_date(const char *path, time_t *modified_date, time_t *accessed_date, time_t *creation_date) { - struct stat path_stat; - char *name = NULL; - int32_t err = MZ_INTERNAL_ERROR; - - memset(&path_stat, 0, sizeof(path_stat)); - - if (strcmp(path, "-") != 0) { - /* Not all systems allow stat'ing a file with / appended */ - name = strdup(path); - mz_path_remove_slash(name); - - if (stat(name, &path_stat) == 0) { - if (modified_date) - *modified_date = path_stat.st_mtime; - if (accessed_date) - *accessed_date = path_stat.st_atime; - /* Creation date not supported */ - if (creation_date) - *creation_date = 0; - - err = MZ_OK; - } - - free(name); - } - - return err; -} - -int32_t mz_os_set_file_date(const char *path, time_t modified_date, time_t accessed_date, time_t creation_date) { - struct utimbuf ut; - - ut.actime = accessed_date; - ut.modtime = modified_date; - - /* Creation date not supported */ - MZ_UNUSED(creation_date); - - if (utime(path, &ut) != 0) - return MZ_INTERNAL_ERROR; - - return MZ_OK; -} - -int32_t mz_os_get_file_attribs(const char *path, uint32_t *attributes) { - struct stat path_stat; - int32_t err = MZ_OK; - - memset(&path_stat, 0, sizeof(path_stat)); - if (lstat(path, &path_stat) == -1) - err = MZ_INTERNAL_ERROR; - *attributes = path_stat.st_mode; - return err; -} - -int32_t mz_os_set_file_attribs(const char *path, uint32_t attributes) { - int32_t err = MZ_OK; - - if (chmod(path, (mode_t)attributes) == -1) - err = MZ_INTERNAL_ERROR; - - return err; -} - -int32_t mz_os_make_dir(const char *path) { - int32_t err = 0; - - err = mkdir(path, 0755); - - if (err != 0 && errno != EEXIST) - return MZ_INTERNAL_ERROR; - - return MZ_OK; -} - -DIR* mz_os_open_dir(const char *path) { - return opendir(path); -} - -struct dirent* mz_os_read_dir(DIR *dir) { - if (!dir) - return NULL; - return readdir(dir); -} - -int32_t mz_os_close_dir(DIR *dir) { - if (!dir) - return MZ_PARAM_ERROR; - if (closedir(dir) == -1) - return MZ_INTERNAL_ERROR; - return MZ_OK; -} - -int32_t mz_os_is_dir(const char *path) { - struct stat path_stat; - - memset(&path_stat, 0, sizeof(path_stat)); - stat(path, &path_stat); - if (S_ISDIR(path_stat.st_mode)) - return MZ_OK; - - return MZ_EXIST_ERROR; -} - -int32_t mz_os_is_symlink(const char *path) { - struct stat path_stat; - - memset(&path_stat, 0, sizeof(path_stat)); - lstat(path, &path_stat); - if (S_ISLNK(path_stat.st_mode)) - return MZ_OK; - - return MZ_EXIST_ERROR; -} - -int32_t mz_os_make_symlink(const char *path, const char *target_path) { - if (symlink(target_path, path) != 0) - return MZ_INTERNAL_ERROR; - return MZ_OK; -} - -int32_t mz_os_read_symlink(const char *path, char *target_path, int32_t max_target_path) { - size_t length = 0; - - length = (size_t)readlink(path, target_path, max_target_path - 1); - if (length == (size_t)-1) - return MZ_EXIST_ERROR; - - target_path[length] = 0; - return MZ_OK; -} - -uint64_t mz_os_ms_time(void) { - struct timespec ts; - -#if defined(__APPLE__) - clock_serv_t cclock; - mach_timespec_t mts; - - host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &cclock); - clock_get_time(cclock, &mts); - mach_port_deallocate(mach_task_self(), cclock); - - ts.tv_sec = mts.tv_sec; - ts.tv_nsec = mts.tv_nsec; -#else - clock_gettime(CLOCK_MONOTONIC, &ts); -#endif - - return ((uint64_t)ts.tv_sec * 1000) + ((uint64_t)ts.tv_nsec / 1000000); -} diff --git a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm.c b/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm.c deleted file mode 100644 index 35d4c62..0000000 --- a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm.c +++ /dev/null @@ -1,556 +0,0 @@ -/* mz_strm.c -- Stream interface - part of the minizip-ng project - - Copyright (C) Nathan Moinvaziri - https://github.com/zlib-ng/minizip-ng - - This program is distributed under the terms of the same license as zlib. - See the accompanying LICENSE file for the full text of the license. -*/ - -#include "mz.h" -#include "mz_strm.h" - -/***************************************************************************/ - -#define MZ_STREAM_FIND_SIZE (1024) - -/***************************************************************************/ - -int32_t mz_stream_open(void *stream, const char *path, int32_t mode) { - mz_stream *strm = (mz_stream *)stream; - if (!strm || !strm->vtbl || !strm->vtbl->open) - return MZ_STREAM_ERROR; - return strm->vtbl->open(strm, path, mode); -} - -int32_t mz_stream_is_open(void *stream) { - mz_stream *strm = (mz_stream *)stream; - if (!strm || !strm->vtbl || !strm->vtbl->is_open) - return MZ_STREAM_ERROR; - return strm->vtbl->is_open(strm); -} - -int32_t mz_stream_read(void *stream, void *buf, int32_t size) { - mz_stream *strm = (mz_stream *)stream; - if (!strm || !strm->vtbl || !strm->vtbl->read) - return MZ_PARAM_ERROR; - if (mz_stream_is_open(stream) != MZ_OK) - return MZ_STREAM_ERROR; - return strm->vtbl->read(strm, buf, size); -} - -static int32_t mz_stream_read_value(void *stream, uint64_t *value, int32_t len) { - uint8_t buf[8]; - int32_t n = 0; - int32_t i = 0; - - *value = 0; - if (mz_stream_read(stream, buf, len) == len) { - for (n = 0; n < len; n += 1, i += 8) - *value += ((uint64_t)buf[n]) << i; - } else if (mz_stream_error(stream)) - return MZ_STREAM_ERROR; - else - return MZ_END_OF_STREAM; - - return MZ_OK; -} - -int32_t mz_stream_read_uint8(void *stream, uint8_t *value) { - int32_t err = MZ_OK; - uint64_t value64 = 0; - - *value = 0; - err = mz_stream_read_value(stream, &value64, sizeof(uint8_t)); - if (err == MZ_OK) - *value = (uint8_t)value64; - return err; -} - -int32_t mz_stream_read_uint16(void *stream, uint16_t *value) { - int32_t err = MZ_OK; - uint64_t value64 = 0; - - *value = 0; - err = mz_stream_read_value(stream, &value64, sizeof(uint16_t)); - if (err == MZ_OK) - *value = (uint16_t)value64; - return err; -} - -int32_t mz_stream_read_uint32(void *stream, uint32_t *value) { - int32_t err = MZ_OK; - uint64_t value64 = 0; - - *value = 0; - err = mz_stream_read_value(stream, &value64, sizeof(uint32_t)); - if (err == MZ_OK) - *value = (uint32_t)value64; - return err; -} - -int32_t mz_stream_read_int64(void *stream, int64_t *value) { - return mz_stream_read_value(stream, (uint64_t *)value, sizeof(uint64_t)); -} - -int32_t mz_stream_read_uint64(void *stream, uint64_t *value) { - return mz_stream_read_value(stream, value, sizeof(uint64_t)); -} - -int32_t mz_stream_write(void *stream, const void *buf, int32_t size) { - mz_stream *strm = (mz_stream *)stream; - if (size == 0) - return size; - if (!strm || !strm->vtbl || !strm->vtbl->write) - return MZ_PARAM_ERROR; - if (mz_stream_is_open(stream) != MZ_OK) - return MZ_STREAM_ERROR; - return strm->vtbl->write(strm, buf, size); -} - -static int32_t mz_stream_write_value(void *stream, uint64_t value, int32_t len) { - uint8_t buf[8]; - int32_t n = 0; - - for (n = 0; n < len; n += 1) { - buf[n] = (uint8_t)(value & 0xff); - value >>= 8; - } - - if (value != 0) { - /* Data overflow - hack for ZIP64 (X Roche) */ - for (n = 0; n < len; n += 1) - buf[n] = 0xff; - } - - if (mz_stream_write(stream, buf, len) != len) - return MZ_STREAM_ERROR; - - return MZ_OK; -} - -int32_t mz_stream_write_uint8(void *stream, uint8_t value) { - return mz_stream_write_value(stream, value, sizeof(uint8_t)); -} - -int32_t mz_stream_write_uint16(void *stream, uint16_t value) { - return mz_stream_write_value(stream, value, sizeof(uint16_t)); -} - -int32_t mz_stream_write_uint32(void *stream, uint32_t value) { - return mz_stream_write_value(stream, value, sizeof(uint32_t)); -} - -int32_t mz_stream_write_int64(void *stream, int64_t value) { - return mz_stream_write_value(stream, (uint64_t)value, sizeof(uint64_t)); -} - -int32_t mz_stream_write_uint64(void *stream, uint64_t value) { - return mz_stream_write_value(stream, value, sizeof(uint64_t)); -} - -int32_t mz_stream_copy(void *target, void *source, int32_t len) { - return mz_stream_copy_stream(target, NULL, source, NULL, len); -} - -int32_t mz_stream_copy_to_end(void *target, void *source) { - return mz_stream_copy_stream_to_end(target, NULL, source, NULL); -} - -int32_t mz_stream_copy_stream(void *target, mz_stream_write_cb write_cb, void *source, - mz_stream_read_cb read_cb, int32_t len) { - uint8_t buf[16384]; - int32_t bytes_to_copy = 0; - int32_t read = 0; - int32_t written = 0; - - if (!write_cb) - write_cb = mz_stream_write; - if (!read_cb) - read_cb = mz_stream_read; - - while (len > 0) { - bytes_to_copy = len; - if (bytes_to_copy > (int32_t)sizeof(buf)) - bytes_to_copy = sizeof(buf); - read = read_cb(source, buf, bytes_to_copy); - if (read <= 0) - return MZ_STREAM_ERROR; - written = write_cb(target, buf, read); - if (written != read) - return MZ_STREAM_ERROR; - len -= read; - } - - return MZ_OK; -} - -int32_t mz_stream_copy_stream_to_end(void *target, mz_stream_write_cb write_cb, void *source, - mz_stream_read_cb read_cb) { - uint8_t buf[16384]; - int32_t read = 0; - int32_t written = 0; - - if (!write_cb) - write_cb = mz_stream_write; - if (!read_cb) - read_cb = mz_stream_read; - - read = read_cb(source, buf, sizeof(buf)); - while (read > 0) { - written = write_cb(target, buf, read); - if (written != read) - return MZ_STREAM_ERROR; - read = read_cb(source, buf, sizeof(buf)); - } - - if (read < 0) - return MZ_STREAM_ERROR; - - return MZ_OK; -} - -int64_t mz_stream_tell(void *stream) { - mz_stream *strm = (mz_stream *)stream; - if (!strm || !strm->vtbl || !strm->vtbl->tell) - return MZ_PARAM_ERROR; - if (mz_stream_is_open(stream) != MZ_OK) - return MZ_STREAM_ERROR; - return strm->vtbl->tell(strm); -} - -int32_t mz_stream_seek(void *stream, int64_t offset, int32_t origin) { - mz_stream *strm = (mz_stream *)stream; - if (!strm || !strm->vtbl || !strm->vtbl->seek) - return MZ_PARAM_ERROR; - if (mz_stream_is_open(stream) != MZ_OK) - return MZ_STREAM_ERROR; - if (origin == MZ_SEEK_SET && offset < 0) - return MZ_SEEK_ERROR; - return strm->vtbl->seek(strm, offset, origin); -} - -int32_t mz_stream_find(void *stream, const void *find, int32_t find_size, int64_t max_seek, int64_t *position) { - uint8_t buf[MZ_STREAM_FIND_SIZE]; - int32_t buf_pos = 0; - int32_t read_size = sizeof(buf); - int32_t read = 0; - int64_t read_pos = 0; - int64_t start_pos = 0; - int64_t disk_pos = 0; - int32_t i = 0; - uint8_t first = 1; - int32_t err = MZ_OK; - - if (!stream || !find || !position) - return MZ_PARAM_ERROR; - if (find_size < 0 || find_size >= (int32_t)sizeof(buf)) - return MZ_PARAM_ERROR; - - *position = -1; - - start_pos = mz_stream_tell(stream); - - while (read_pos < max_seek) { - if (read_size > (int32_t)(max_seek - read_pos - buf_pos) && (max_seek - read_pos - buf_pos) < (int64_t)sizeof(buf)) - read_size = (int32_t)(max_seek - read_pos - buf_pos); - - read = mz_stream_read(stream, buf + buf_pos, read_size); - if ((read <= 0) || (read + buf_pos < find_size)) - break; - - for (i = 0; i <= read + buf_pos - find_size; i += 1) { - if (memcmp(&buf[i], find, find_size) != 0) - continue; - - disk_pos = mz_stream_tell(stream); - - /* Seek to position on disk where the data was found */ - err = mz_stream_seek(stream, disk_pos - ((int64_t)read + buf_pos - i), MZ_SEEK_SET); - if (err != MZ_OK) - return MZ_EXIST_ERROR; - - *position = start_pos + read_pos + i; - return MZ_OK; - } - - if (first) { - read -= find_size; - read_size -= find_size; - buf_pos = find_size; - first = 0; - } - - memmove(buf, buf + read, find_size); - read_pos += read; - } - - return MZ_EXIST_ERROR; -} - -int32_t mz_stream_find_reverse(void *stream, const void *find, int32_t find_size, int64_t max_seek, int64_t *position) { - uint8_t buf[MZ_STREAM_FIND_SIZE]; - int32_t buf_pos = 0; - int32_t read_size = MZ_STREAM_FIND_SIZE; - int64_t read_pos = 0; - int32_t read = 0; - int64_t start_pos = 0; - int64_t disk_pos = 0; - uint8_t first = 1; - int32_t i = 0; - int32_t err = MZ_OK; - - if (!stream || !find || !position) - return MZ_PARAM_ERROR; - if (find_size < 0 || find_size >= (int32_t)sizeof(buf)) - return MZ_PARAM_ERROR; - - *position = -1; - - start_pos = mz_stream_tell(stream); - - while (read_pos < max_seek) { - if (read_size > (int32_t)(max_seek - read_pos) && (max_seek - read_pos) < (int64_t)sizeof(buf)) - read_size = (int32_t)(max_seek - read_pos); - - if (mz_stream_seek(stream, start_pos - (read_pos + read_size), MZ_SEEK_SET) != MZ_OK) - break; - read = mz_stream_read(stream, buf, read_size); - if ((read <= 0) || (read + buf_pos < find_size)) - break; - if (read + buf_pos < MZ_STREAM_FIND_SIZE) - memmove(buf + MZ_STREAM_FIND_SIZE - (read + buf_pos), buf, read); - - for (i = find_size; i <= (read + buf_pos); i += 1) { - if (memcmp(&buf[MZ_STREAM_FIND_SIZE - i], find, find_size) != 0) - continue; - - disk_pos = mz_stream_tell(stream); - - /* Seek to position on disk where the data was found */ - err = mz_stream_seek(stream, disk_pos + buf_pos - i, MZ_SEEK_SET); - if (err != MZ_OK) - return MZ_EXIST_ERROR; - - *position = start_pos - (read_pos - buf_pos + i); - return MZ_OK; - } - - if (first) { - read -= find_size; - read_size -= find_size; - buf_pos = find_size; - first = 0; - } - - if (read == 0) - break; - - memmove(buf + read_size, buf, find_size); - read_pos += read; - } - - return MZ_EXIST_ERROR; -} - -int32_t mz_stream_close(void *stream) { - mz_stream *strm = (mz_stream *)stream; - if (!strm || !strm->vtbl || !strm->vtbl->close) - return MZ_PARAM_ERROR; - if (mz_stream_is_open(stream) != MZ_OK) - return MZ_STREAM_ERROR; - return strm->vtbl->close(strm); -} - -int32_t mz_stream_error(void *stream) { - mz_stream *strm = (mz_stream *)stream; - if (!strm || !strm->vtbl || !strm->vtbl->error) - return MZ_PARAM_ERROR; - return strm->vtbl->error(strm); -} - -int32_t mz_stream_set_base(void *stream, void *base) { - mz_stream *strm = (mz_stream *)stream; - strm->base = (mz_stream *)base; - return MZ_OK; -} - -void* mz_stream_get_interface(void *stream) { - mz_stream *strm = (mz_stream *)stream; - if (!strm || !strm->vtbl) - return NULL; - return (void *)strm->vtbl; -} - -int32_t mz_stream_get_prop_int64(void *stream, int32_t prop, int64_t *value) { - mz_stream *strm = (mz_stream *)stream; - if (!strm || !strm->vtbl || !strm->vtbl->get_prop_int64) - return MZ_PARAM_ERROR; - return strm->vtbl->get_prop_int64(stream, prop, value); -} - -int32_t mz_stream_set_prop_int64(void *stream, int32_t prop, int64_t value) { - mz_stream *strm = (mz_stream *)stream; - if (!strm || !strm->vtbl || !strm->vtbl->set_prop_int64) - return MZ_PARAM_ERROR; - return strm->vtbl->set_prop_int64(stream, prop, value); -} - -void *mz_stream_create(void **stream, mz_stream_vtbl *vtbl) { - if (!stream || !vtbl || !vtbl->create) - return NULL; - return vtbl->create(stream); -} - -void mz_stream_delete(void **stream) { - mz_stream *strm = NULL; - if (!stream) - return; - strm = (mz_stream *)*stream; - if (strm && strm->vtbl && strm->vtbl->destroy) - strm->vtbl->destroy(stream); - *stream = NULL; -} - -/***************************************************************************/ - -typedef struct mz_stream_raw_s { - mz_stream stream; - int64_t total_in; - int64_t total_out; - int64_t max_total_in; -} mz_stream_raw; - -/***************************************************************************/ - -int32_t mz_stream_raw_open(void *stream, const char *path, int32_t mode) { - MZ_UNUSED(stream); - MZ_UNUSED(path); - MZ_UNUSED(mode); - - return MZ_OK; -} - -int32_t mz_stream_raw_is_open(void *stream) { - mz_stream_raw *raw = (mz_stream_raw *)stream; - return mz_stream_is_open(raw->stream.base); -} - -int32_t mz_stream_raw_read(void *stream, void *buf, int32_t size) { - mz_stream_raw *raw = (mz_stream_raw *)stream; - int32_t bytes_to_read = size; - int32_t read = 0; - - if (raw->max_total_in > 0) { - if ((int64_t)bytes_to_read > (raw->max_total_in - raw->total_in)) - bytes_to_read = (int32_t)(raw->max_total_in - raw->total_in); - } - - read = mz_stream_read(raw->stream.base, buf, bytes_to_read); - - if (read > 0) { - raw->total_in += read; - raw->total_out += read; - } - - return read; -} - -int32_t mz_stream_raw_write(void *stream, const void *buf, int32_t size) { - mz_stream_raw *raw = (mz_stream_raw *)stream; - int32_t written = 0; - - written = mz_stream_write(raw->stream.base, buf, size); - - if (written > 0) { - raw->total_out += written; - raw->total_in += written; - } - - return written; -} - -int64_t mz_stream_raw_tell(void *stream) { - mz_stream_raw *raw = (mz_stream_raw *)stream; - return mz_stream_tell(raw->stream.base); -} - -int32_t mz_stream_raw_seek(void *stream, int64_t offset, int32_t origin) { - mz_stream_raw *raw = (mz_stream_raw *)stream; - return mz_stream_seek(raw->stream.base, offset, origin); -} - -int32_t mz_stream_raw_close(void *stream) { - MZ_UNUSED(stream); - return MZ_OK; -} - -int32_t mz_stream_raw_error(void *stream) { - mz_stream_raw *raw = (mz_stream_raw *)stream; - return mz_stream_error(raw->stream.base); -} - -int32_t mz_stream_raw_get_prop_int64(void *stream, int32_t prop, int64_t *value) { - mz_stream_raw *raw = (mz_stream_raw *)stream; - switch (prop) { - case MZ_STREAM_PROP_TOTAL_IN: - *value = raw->total_in; - return MZ_OK; - case MZ_STREAM_PROP_TOTAL_OUT: - *value = raw->total_out; - return MZ_OK; - } - return MZ_EXIST_ERROR; -} - -int32_t mz_stream_raw_set_prop_int64(void *stream, int32_t prop, int64_t value) { - mz_stream_raw *raw = (mz_stream_raw *)stream; - switch (prop) { - case MZ_STREAM_PROP_TOTAL_IN_MAX: - raw->max_total_in = value; - return MZ_OK; - } - return MZ_EXIST_ERROR; -} - -/***************************************************************************/ - -static mz_stream_vtbl mz_stream_raw_vtbl = { - mz_stream_raw_open, - mz_stream_raw_is_open, - mz_stream_raw_read, - mz_stream_raw_write, - mz_stream_raw_tell, - mz_stream_raw_seek, - mz_stream_raw_close, - mz_stream_raw_error, - mz_stream_raw_create, - mz_stream_raw_delete, - mz_stream_raw_get_prop_int64, - mz_stream_raw_set_prop_int64 -}; - -/***************************************************************************/ - -void *mz_stream_raw_create(void **stream) { - mz_stream_raw *raw = NULL; - - raw = (mz_stream_raw *)calloc(1, sizeof(mz_stream_raw)); - if (raw) - raw->stream.vtbl = &mz_stream_raw_vtbl; - if (stream) - *stream = raw; - - return raw; -} - -void mz_stream_raw_delete(void **stream) { - mz_stream_raw *raw = NULL; - if (!stream) - return; - raw = (mz_stream_raw *)*stream; - if (raw) - free(raw); - *stream = NULL; -} diff --git a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm.h b/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm.h deleted file mode 100644 index 5f88015..0000000 --- a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm.h +++ /dev/null @@ -1,132 +0,0 @@ -/* mz_strm.h -- Stream interface - part of the minizip-ng project - - Copyright (C) Nathan Moinvaziri - https://github.com/zlib-ng/minizip-ng - - This program is distributed under the terms of the same license as zlib. - See the accompanying LICENSE file for the full text of the license. -*/ - -#ifndef MZ_STREAM_H -#define MZ_STREAM_H - -#ifdef __cplusplus -extern "C" { -#endif - -/***************************************************************************/ - -#define MZ_STREAM_PROP_TOTAL_IN (1) -#define MZ_STREAM_PROP_TOTAL_IN_MAX (2) -#define MZ_STREAM_PROP_TOTAL_OUT (3) -#define MZ_STREAM_PROP_TOTAL_OUT_MAX (4) -#define MZ_STREAM_PROP_HEADER_SIZE (5) -#define MZ_STREAM_PROP_FOOTER_SIZE (6) -#define MZ_STREAM_PROP_DISK_SIZE (7) -#define MZ_STREAM_PROP_DISK_NUMBER (8) -#define MZ_STREAM_PROP_COMPRESS_LEVEL (9) -#define MZ_STREAM_PROP_COMPRESS_METHOD (10) -#define MZ_STREAM_PROP_COMPRESS_WINDOW (11) - -/***************************************************************************/ - -typedef int32_t (*mz_stream_open_cb) (void *stream, const char *path, int32_t mode); -typedef int32_t (*mz_stream_is_open_cb) (void *stream); -typedef int32_t (*mz_stream_read_cb) (void *stream, void *buf, int32_t size); -typedef int32_t (*mz_stream_write_cb) (void *stream, const void *buf, int32_t size); -typedef int64_t (*mz_stream_tell_cb) (void *stream); -typedef int32_t (*mz_stream_seek_cb) (void *stream, int64_t offset, int32_t origin); -typedef int32_t (*mz_stream_close_cb) (void *stream); -typedef int32_t (*mz_stream_error_cb) (void *stream); -typedef void* (*mz_stream_create_cb) (void **stream); -typedef void (*mz_stream_destroy_cb) (void **stream); - -typedef int32_t (*mz_stream_get_prop_int64_cb) (void *stream, int32_t prop, int64_t *value); -typedef int32_t (*mz_stream_set_prop_int64_cb) (void *stream, int32_t prop, int64_t value); - -typedef int32_t (*mz_stream_find_cb) (void *stream, const void *find, int32_t find_size, - int64_t max_seek, int64_t *position); - -/***************************************************************************/ - -typedef struct mz_stream_vtbl_s { - mz_stream_open_cb open; - mz_stream_is_open_cb is_open; - mz_stream_read_cb read; - mz_stream_write_cb write; - mz_stream_tell_cb tell; - mz_stream_seek_cb seek; - mz_stream_close_cb close; - mz_stream_error_cb error; - mz_stream_create_cb create; - mz_stream_destroy_cb destroy; - - mz_stream_get_prop_int64_cb get_prop_int64; - mz_stream_set_prop_int64_cb set_prop_int64; -} mz_stream_vtbl; - -typedef struct mz_stream_s { - mz_stream_vtbl *vtbl; - struct mz_stream_s *base; -} mz_stream; - -/***************************************************************************/ - -int32_t mz_stream_open(void *stream, const char *path, int32_t mode); -int32_t mz_stream_is_open(void *stream); -int32_t mz_stream_read(void *stream, void *buf, int32_t size); -int32_t mz_stream_read_uint8(void *stream, uint8_t *value); -int32_t mz_stream_read_uint16(void *stream, uint16_t *value); -int32_t mz_stream_read_uint32(void *stream, uint32_t *value); -int32_t mz_stream_read_int64(void *stream, int64_t *value); -int32_t mz_stream_read_uint64(void *stream, uint64_t *value); -int32_t mz_stream_write(void *stream, const void *buf, int32_t size); -int32_t mz_stream_write_uint8(void *stream, uint8_t value); -int32_t mz_stream_write_uint16(void *stream, uint16_t value); -int32_t mz_stream_write_uint32(void *stream, uint32_t value); -int32_t mz_stream_write_int64(void *stream, int64_t value); -int32_t mz_stream_write_uint64(void *stream, uint64_t value); -int32_t mz_stream_copy(void *target, void *source, int32_t len); -int32_t mz_stream_copy_to_end(void *target, void *source); -int32_t mz_stream_copy_stream(void *target, mz_stream_write_cb write_cb, void *source, mz_stream_read_cb read_cb, int32_t len); -int32_t mz_stream_copy_stream_to_end(void *target, mz_stream_write_cb write_cb, void *source, mz_stream_read_cb read_cb); -int64_t mz_stream_tell(void *stream); -int32_t mz_stream_seek(void *stream, int64_t offset, int32_t origin); -int32_t mz_stream_find(void *stream, const void *find, int32_t find_size, int64_t max_seek, int64_t *position); -int32_t mz_stream_find_reverse(void *stream, const void *find, int32_t find_size, int64_t max_seek, int64_t *position); -int32_t mz_stream_close(void *stream); -int32_t mz_stream_error(void *stream); - -int32_t mz_stream_set_base(void *stream, void *base); -void* mz_stream_get_interface(void *stream); -int32_t mz_stream_get_prop_int64(void *stream, int32_t prop, int64_t *value); -int32_t mz_stream_set_prop_int64(void *stream, int32_t prop, int64_t value); - -void* mz_stream_create(void **stream, mz_stream_vtbl *vtbl); -void mz_stream_delete(void **stream); - -/***************************************************************************/ - -int32_t mz_stream_raw_open(void *stream, const char *filename, int32_t mode); -int32_t mz_stream_raw_is_open(void *stream); -int32_t mz_stream_raw_read(void *stream, void *buf, int32_t size); -int32_t mz_stream_raw_write(void *stream, const void *buf, int32_t size); -int64_t mz_stream_raw_tell(void *stream); -int32_t mz_stream_raw_seek(void *stream, int64_t offset, int32_t origin); -int32_t mz_stream_raw_close(void *stream); -int32_t mz_stream_raw_error(void *stream); - -int32_t mz_stream_raw_get_prop_int64(void *stream, int32_t prop, int64_t *value); -int32_t mz_stream_raw_set_prop_int64(void *stream, int32_t prop, int64_t value); - -void* mz_stream_raw_create(void **stream); -void mz_stream_raw_delete(void **stream); - -/***************************************************************************/ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm_buf.c b/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm_buf.c deleted file mode 100644 index 3081d53..0000000 --- a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm_buf.c +++ /dev/null @@ -1,383 +0,0 @@ -/* mz_strm_buf.c -- Stream for buffering reads/writes - part of the minizip-ng project - - This version of ioapi is designed to buffer IO. - - Copyright (C) Nathan Moinvaziri - https://github.com/zlib-ng/minizip-ng - - This program is distributed under the terms of the same license as zlib. - See the accompanying LICENSE file for the full text of the license. -*/ - -#include "mz.h" -#include "mz_strm.h" -#include "mz_strm_buf.h" - -/***************************************************************************/ - -static mz_stream_vtbl mz_stream_buffered_vtbl = { - mz_stream_buffered_open, - mz_stream_buffered_is_open, - mz_stream_buffered_read, - mz_stream_buffered_write, - mz_stream_buffered_tell, - mz_stream_buffered_seek, - mz_stream_buffered_close, - mz_stream_buffered_error, - mz_stream_buffered_create, - mz_stream_buffered_delete, - NULL, - NULL -}; - -/***************************************************************************/ - -typedef struct mz_stream_buffered_s { - mz_stream stream; - int32_t error; - char readbuf[INT16_MAX]; - int32_t readbuf_len; - int32_t readbuf_pos; - int32_t readbuf_hits; - int32_t readbuf_misses; - char writebuf[INT16_MAX]; - int32_t writebuf_len; - int32_t writebuf_pos; - int32_t writebuf_hits; - int32_t writebuf_misses; - int64_t position; -} mz_stream_buffered; - -/***************************************************************************/ - -#if 0 -# define mz_stream_buffered_print printf -#else -# define mz_stream_buffered_print(fmt,...) -#endif - -/***************************************************************************/ - -static int32_t mz_stream_buffered_reset(void *stream) { - mz_stream_buffered *buffered = (mz_stream_buffered *)stream; - - buffered->readbuf_len = 0; - buffered->readbuf_pos = 0; - buffered->writebuf_len = 0; - buffered->writebuf_pos = 0; - buffered->position = 0; - - return MZ_OK; -} - -int32_t mz_stream_buffered_open(void *stream, const char *path, int32_t mode) { - mz_stream_buffered *buffered = (mz_stream_buffered *)stream; - mz_stream_buffered_print("Buffered - Open (mode %" PRId32 ")\n", mode); - mz_stream_buffered_reset(buffered); - return mz_stream_open(buffered->stream.base, path, mode); -} - -int32_t mz_stream_buffered_is_open(void *stream) { - mz_stream_buffered *buffered = (mz_stream_buffered *)stream; - return mz_stream_is_open(buffered->stream.base); -} - -static int32_t mz_stream_buffered_flush(void *stream, int32_t *written) { - mz_stream_buffered *buffered = (mz_stream_buffered *)stream; - int32_t total_bytes_written = 0; - int32_t bytes_to_write = buffered->writebuf_len; - int32_t bytes_left_to_write = buffered->writebuf_len; - int32_t bytes_written = 0; - - *written = 0; - - while (bytes_left_to_write > 0) { - bytes_written = mz_stream_write(buffered->stream.base, - buffered->writebuf + (bytes_to_write - bytes_left_to_write), bytes_left_to_write); - - if (bytes_written != bytes_left_to_write) - return MZ_WRITE_ERROR; - - buffered->writebuf_misses += 1; - - mz_stream_buffered_print("Buffered - Write flush (%" PRId32 ":%" PRId32 " len %" PRId32 ")\n", - bytes_to_write, bytes_left_to_write, buffered->writebuf_len); - - total_bytes_written += bytes_written; - bytes_left_to_write -= bytes_written; - buffered->position += bytes_written; - } - - buffered->writebuf_len = 0; - buffered->writebuf_pos = 0; - - *written = total_bytes_written; - return MZ_OK; -} - -int32_t mz_stream_buffered_read(void *stream, void *buf, int32_t size) { - mz_stream_buffered *buffered = (mz_stream_buffered *)stream; - int32_t buf_len = 0; - int32_t bytes_to_read = 0; - int32_t bytes_to_copy = 0; - int32_t bytes_left_to_read = size; - int32_t bytes_read = 0; - int32_t bytes_flushed = 0; - - mz_stream_buffered_print("Buffered - Read (size %" PRId32 " pos %" PRId64 ")\n", size, buffered->position); - - if (buffered->writebuf_len > 0) { - int64_t position = buffered->position + buffered->writebuf_pos - - mz_stream_buffered_print("Buffered - Switch from write to read, flushing (pos %" PRId64 ")\n", position); - - mz_stream_buffered_flush(stream, &bytes_flushed); - mz_stream_buffered_seek(stream, position, MZ_SEEK_SET); - } - - while (bytes_left_to_read > 0) { - if ((buffered->readbuf_len == 0) || (buffered->readbuf_pos == buffered->readbuf_len)) { - if (buffered->readbuf_len == sizeof(buffered->readbuf)) { - buffered->readbuf_pos = 0; - buffered->readbuf_len = 0; - } - - bytes_to_read = (int32_t)sizeof(buffered->readbuf) - (buffered->readbuf_len - buffered->readbuf_pos); - bytes_read = mz_stream_read(buffered->stream.base, buffered->readbuf + buffered->readbuf_pos, bytes_to_read); - if (bytes_read < 0) - return bytes_read; - - buffered->readbuf_misses += 1; - buffered->readbuf_len += bytes_read; - buffered->position += bytes_read; - - mz_stream_buffered_print("Buffered - Filled (read %" PRId32 "/%" PRId32 " buf %" PRId32 ":%" PRId32 " pos %" PRId64 ")\n", - bytes_read, bytes_to_read, buffered->readbuf_pos, buffered->readbuf_len, buffered->position); - - if (bytes_read == 0) - break; - } - - if ((buffered->readbuf_len - buffered->readbuf_pos) > 0) { - bytes_to_copy = buffered->readbuf_len - buffered->readbuf_pos; - if (bytes_to_copy > bytes_left_to_read) - bytes_to_copy = bytes_left_to_read; - - memcpy((char *)buf + buf_len, buffered->readbuf + buffered->readbuf_pos, bytes_to_copy); - - buf_len += bytes_to_copy; - bytes_left_to_read -= bytes_to_copy; - - buffered->readbuf_hits += 1; - buffered->readbuf_pos += bytes_to_copy; - - mz_stream_buffered_print("Buffered - Emptied (copied %" PRId32 " remaining %" PRId32 " buf %" PRId32 ":%" PRId32 " pos %" PRId64 ")\n", - bytes_to_copy, bytes_left_to_read, buffered->readbuf_pos, buffered->readbuf_len, buffered->position); - } - } - - return size - bytes_left_to_read; -} - -int32_t mz_stream_buffered_write(void *stream, const void *buf, int32_t size) { - mz_stream_buffered *buffered = (mz_stream_buffered *)stream; - int32_t bytes_to_write = size; - int32_t bytes_left_to_write = size; - int32_t bytes_to_copy = 0; - int32_t bytes_used = 0; - int32_t bytes_flushed = 0; - int32_t err = MZ_OK; - - - mz_stream_buffered_print("Buffered - Write (size %" PRId32 " len %" PRId32 " pos %" PRId64 ")\n", - size, buffered->writebuf_len, buffered->position); - - if (buffered->readbuf_len > 0) { - buffered->position -= buffered->readbuf_len; - buffered->position += buffered->readbuf_pos; - - buffered->readbuf_len = 0; - buffered->readbuf_pos = 0; - - mz_stream_buffered_print("Buffered - Switch from read to write (pos %" PRId64 ")\n", buffered->position); - - err = mz_stream_seek(buffered->stream.base, buffered->position, MZ_SEEK_SET); - if (err != MZ_OK) - return err; - } - - while (bytes_left_to_write > 0) { - bytes_used = buffered->writebuf_len; - if (bytes_used > buffered->writebuf_pos) - bytes_used = buffered->writebuf_pos; - bytes_to_copy = (int32_t)sizeof(buffered->writebuf) - bytes_used; - if (bytes_to_copy > bytes_left_to_write) - bytes_to_copy = bytes_left_to_write; - - if (bytes_to_copy == 0) { - err = mz_stream_buffered_flush(stream, &bytes_flushed); - if (err != MZ_OK) - return err; - if (bytes_flushed == 0) - return 0; - - continue; - } - - memcpy(buffered->writebuf + buffered->writebuf_pos, - (const char *)buf + (bytes_to_write - bytes_left_to_write), bytes_to_copy); - - mz_stream_buffered_print("Buffered - Write copy (remaining %" PRId32 " write %" PRId32 ":%" PRId32 " len %" PRId32 ")\n", - bytes_to_copy, bytes_to_write, bytes_left_to_write, buffered->writebuf_len); - - bytes_left_to_write -= bytes_to_copy; - - buffered->writebuf_pos += bytes_to_copy; - buffered->writebuf_hits += 1; - if (buffered->writebuf_pos > buffered->writebuf_len) - buffered->writebuf_len += buffered->writebuf_pos - buffered->writebuf_len; - } - - return size - bytes_left_to_write; -} - -int64_t mz_stream_buffered_tell(void *stream) { - mz_stream_buffered *buffered = (mz_stream_buffered *)stream; - int64_t position = mz_stream_tell(buffered->stream.base); - - buffered->position = position; - - mz_stream_buffered_print("Buffered - Tell (pos %" PRId64 " readpos %" PRId32 " writepos %" PRId32 ")\n", - buffered->position, buffered->readbuf_pos, buffered->writebuf_pos); - - if (buffered->readbuf_len > 0) - position -= ((int64_t)buffered->readbuf_len - buffered->readbuf_pos); - if (buffered->writebuf_len > 0) - position += buffered->writebuf_pos; - return position; -} - -int32_t mz_stream_buffered_seek(void *stream, int64_t offset, int32_t origin) { - mz_stream_buffered *buffered = (mz_stream_buffered *)stream; - int32_t bytes_flushed = 0; - int32_t err = MZ_OK; - - mz_stream_buffered_print("Buffered - Seek (origin %" PRId32 " offset %" PRId64 " pos %" PRId64 ")\n", - origin, offset, buffered->position); - - switch (origin) { - case MZ_SEEK_SET: - - if ((buffered->readbuf_len > 0) && (offset < buffered->position) && - (offset >= buffered->position - buffered->readbuf_len)) { - buffered->readbuf_pos = (int32_t)(offset - (buffered->position - buffered->readbuf_len)); - return MZ_OK; - } - if (buffered->writebuf_len > 0) { - if ((offset >= buffered->position) && (offset <= buffered->position + buffered->writebuf_len)) { - buffered->writebuf_pos = (int32_t)(offset - buffered->position); - return MZ_OK; - } - } - - err = mz_stream_buffered_flush(stream, &bytes_flushed); - if (err != MZ_OK) - return err; - - buffered->position = offset; - break; - - case MZ_SEEK_CUR: - - if (buffered->readbuf_len > 0) { - if (offset <= ((int64_t)buffered->readbuf_len - buffered->readbuf_pos)) { - buffered->readbuf_pos += (uint32_t)offset; - return MZ_OK; - } - offset -= ((int64_t)buffered->readbuf_len - buffered->readbuf_pos); - buffered->position += offset; - } - if (buffered->writebuf_len > 0) { - if (offset <= ((int64_t)buffered->writebuf_len - buffered->writebuf_pos)) { - buffered->writebuf_pos += (uint32_t)offset; - return MZ_OK; - } - /* offset -= (buffered->writebuf_len - buffered->writebuf_pos); */ - } - - err = mz_stream_buffered_flush(stream, &bytes_flushed); - if (err != MZ_OK) - return err; - - break; - - case MZ_SEEK_END: - - if (buffered->writebuf_len > 0) { - buffered->writebuf_pos = buffered->writebuf_len; - return MZ_OK; - } - break; - } - - buffered->readbuf_len = 0; - buffered->readbuf_pos = 0; - buffered->writebuf_len = 0; - buffered->writebuf_pos = 0; - - return mz_stream_seek(buffered->stream.base, offset, origin); -} - -int32_t mz_stream_buffered_close(void *stream) { - mz_stream_buffered *buffered = (mz_stream_buffered *)stream; - int32_t bytes_flushed = 0; - - mz_stream_buffered_flush(stream, &bytes_flushed); - mz_stream_buffered_print("Buffered - Close (flushed %" PRId32 ")\n", bytes_flushed); - - if (buffered->readbuf_hits + buffered->readbuf_misses > 0) { - mz_stream_buffered_print("Buffered - Read efficiency %.02f%%\n", - (buffered->readbuf_hits / ((float)buffered->readbuf_hits + buffered->readbuf_misses)) * 100); - } - - if (buffered->writebuf_hits + buffered->writebuf_misses > 0) { - mz_stream_buffered_print("Buffered - Write efficiency %.02f%%\n", - (buffered->writebuf_hits / ((float)buffered->writebuf_hits + buffered->writebuf_misses)) * 100); - } - - mz_stream_buffered_reset(buffered); - - return mz_stream_close(buffered->stream.base); -} - -int32_t mz_stream_buffered_error(void *stream) { - mz_stream_buffered *buffered = (mz_stream_buffered *)stream; - return mz_stream_error(buffered->stream.base); -} - -void *mz_stream_buffered_create(void **stream) { - mz_stream_buffered *buffered = NULL; - - buffered = (mz_stream_buffered *)calloc(1, sizeof(mz_stream_buffered)); - if (buffered) - buffered->stream.vtbl = &mz_stream_buffered_vtbl; - if (stream) - *stream = buffered; - - return buffered; -} - -void mz_stream_buffered_delete(void **stream) { - mz_stream_buffered *buffered = NULL; - if (!stream) - return; - buffered = (mz_stream_buffered *)*stream; - if (buffered) - free(buffered); - *stream = NULL; -} - -void *mz_stream_buffered_get_interface(void) { - return (void *)&mz_stream_buffered_vtbl; -} diff --git a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm_buf.h b/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm_buf.h deleted file mode 100644 index 93eea26..0000000 --- a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm_buf.h +++ /dev/null @@ -1,42 +0,0 @@ -/* mz_strm_buf.h -- Stream for buffering reads/writes - part of the minizip-ng project - - This version of ioapi is designed to buffer IO. - - Copyright (C) Nathan Moinvaziri - https://github.com/zlib-ng/minizip-ng - - This program is distributed under the terms of the same license as zlib. - See the accompanying LICENSE file for the full text of the license. -*/ - -#ifndef MZ_STREAM_BUFFERED_H -#define MZ_STREAM_BUFFERED_H - -#ifdef __cplusplus -extern "C" { -#endif - -/***************************************************************************/ - -int32_t mz_stream_buffered_open(void *stream, const char *path, int32_t mode); -int32_t mz_stream_buffered_is_open(void *stream); -int32_t mz_stream_buffered_read(void *stream, void *buf, int32_t size); -int32_t mz_stream_buffered_write(void *stream, const void *buf, int32_t size); -int64_t mz_stream_buffered_tell(void *stream); -int32_t mz_stream_buffered_seek(void *stream, int64_t offset, int32_t origin); -int32_t mz_stream_buffered_close(void *stream); -int32_t mz_stream_buffered_error(void *stream); - -void* mz_stream_buffered_create(void **stream); -void mz_stream_buffered_delete(void **stream); - -void* mz_stream_buffered_get_interface(void); - -/***************************************************************************/ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm_mem.c b/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm_mem.c deleted file mode 100644 index 9a78dc1..0000000 --- a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm_mem.c +++ /dev/null @@ -1,269 +0,0 @@ -/* mz_strm_mem.c -- Stream for memory access - part of the minizip-ng project - - This interface is designed to access memory rather than files. - We do use a region of memory to put data in to and take it out of. - - Based on Unzip ioapi.c version 0.22, May 19th, 2003 - - Copyright (C) Nathan Moinvaziri - https://github.com/zlib-ng/minizip-ng - Copyright (C) 2003 Justin Fletcher - Copyright (C) 1998-2003 Gilles Vollant - https://www.winimage.com/zLibDll/minizip.html - - This program is distributed under the terms of the same license as zlib. - See the accompanying LICENSE file for the full text of the license. -*/ - -#include "mz.h" -#include "mz_strm.h" -#include "mz_strm_mem.h" - -/***************************************************************************/ - -static mz_stream_vtbl mz_stream_mem_vtbl = { - mz_stream_mem_open, - mz_stream_mem_is_open, - mz_stream_mem_read, - mz_stream_mem_write, - mz_stream_mem_tell, - mz_stream_mem_seek, - mz_stream_mem_close, - mz_stream_mem_error, - mz_stream_mem_create, - mz_stream_mem_delete, - NULL, - NULL -}; - -/***************************************************************************/ - -typedef struct mz_stream_mem_s { - mz_stream stream; - int32_t mode; - uint8_t *buffer; /* Memory buffer pointer */ - int32_t size; /* Size of the memory buffer */ - int32_t limit; /* Furthest we've written */ - int32_t position; /* Current position in the memory */ - int32_t grow_size; /* Size to grow when full */ -} mz_stream_mem; - -/***************************************************************************/ - -static int32_t mz_stream_mem_set_size(void *stream, int32_t size) { - mz_stream_mem *mem = (mz_stream_mem *)stream; - int32_t new_size = size; - uint8_t *new_buf = NULL; - - new_buf = (uint8_t *)malloc((uint32_t)new_size); - if (!new_buf) - return MZ_BUF_ERROR; - - if (mem->buffer) { - memcpy(new_buf, mem->buffer, mem->size); - free(mem->buffer); - } - - mem->buffer = new_buf; - mem->size = new_size; - return MZ_OK; -} - -int32_t mz_stream_mem_open(void *stream, const char *path, int32_t mode) { - mz_stream_mem *mem = (mz_stream_mem *)stream; - int32_t err = MZ_OK; - - MZ_UNUSED(path); - - mem->mode = mode; - mem->limit = 0; - mem->position = 0; - - if (mem->mode & MZ_OPEN_MODE_CREATE) - err = mz_stream_mem_set_size(stream, mem->grow_size); - else - mem->limit = mem->size; - - return err; -} - -int32_t mz_stream_mem_is_open(void *stream) { - mz_stream_mem *mem = (mz_stream_mem *)stream; - if (!mem->buffer) - return MZ_OPEN_ERROR; - return MZ_OK; -} - -int32_t mz_stream_mem_read(void *stream, void *buf, int32_t size) { - mz_stream_mem *mem = (mz_stream_mem *)stream; - - if (size > mem->size - mem->position) - size = mem->size - mem->position; - if (mem->position + size > mem->limit) - size = mem->limit - mem->position; - - if (size <= 0) - return 0; - - memcpy(buf, mem->buffer + mem->position, size); - mem->position += size; - - return size; -} - -int32_t mz_stream_mem_write(void *stream, const void *buf, int32_t size) { - mz_stream_mem *mem = (mz_stream_mem *)stream; - int32_t new_size = 0; - int32_t err = MZ_OK; - - if (!size) - return size; - - if (size > mem->size - mem->position) { - if (mem->mode & MZ_OPEN_MODE_CREATE) { - new_size = mem->size; - if (size < mem->grow_size) - new_size += mem->grow_size; - else - new_size += size; - - err = mz_stream_mem_set_size(stream, new_size); - if (err != MZ_OK) - return err; - } else { - size = mem->size - mem->position; - } - } - - memcpy(mem->buffer + mem->position, buf, size); - - mem->position += size; - if (mem->position > mem->limit) - mem->limit = mem->position; - - return size; -} - -int64_t mz_stream_mem_tell(void *stream) { - mz_stream_mem *mem = (mz_stream_mem *)stream; - return mem->position; -} - -int32_t mz_stream_mem_seek(void *stream, int64_t offset, int32_t origin) { - mz_stream_mem *mem = (mz_stream_mem *)stream; - int64_t new_pos = 0; - int32_t err = MZ_OK; - - switch (origin) { - case MZ_SEEK_CUR: - new_pos = mem->position + offset; - break; - case MZ_SEEK_END: - new_pos = mem->limit + offset; - break; - case MZ_SEEK_SET: - new_pos = offset; - break; - default: - return MZ_SEEK_ERROR; - } - - if (new_pos > mem->size) { - if ((mem->mode & MZ_OPEN_MODE_CREATE) == 0) - return MZ_SEEK_ERROR; - - err = mz_stream_mem_set_size(stream, (int32_t)new_pos); - if (err != MZ_OK) - return err; - } else if (new_pos < 0) { - return MZ_SEEK_ERROR; - } - - mem->position = (int32_t)new_pos; - return MZ_OK; -} - -int32_t mz_stream_mem_close(void *stream) { - MZ_UNUSED(stream); - - /* We never return errors */ - return MZ_OK; -} - -int32_t mz_stream_mem_error(void *stream) { - MZ_UNUSED(stream); - - /* We never return errors */ - return MZ_OK; -} - -void mz_stream_mem_set_buffer(void *stream, void *buf, int32_t size) { - mz_stream_mem *mem = (mz_stream_mem *)stream; - mem->buffer = (uint8_t *)buf; - mem->size = size; - mem->limit = size; -} - -int32_t mz_stream_mem_get_buffer(void *stream, const void **buf) { - return mz_stream_mem_get_buffer_at(stream, 0, buf); -} - -int32_t mz_stream_mem_get_buffer_at(void *stream, int64_t position, const void **buf) { - mz_stream_mem *mem = (mz_stream_mem *)stream; - if (!buf || position < 0 || !mem->buffer|| mem->size < position) - return MZ_SEEK_ERROR; - *buf = mem->buffer + position; - return MZ_OK; -} - -int32_t mz_stream_mem_get_buffer_at_current(void *stream, const void **buf) { - mz_stream_mem *mem = (mz_stream_mem *)stream; - return mz_stream_mem_get_buffer_at(stream, mem->position, buf); -} - -void mz_stream_mem_get_buffer_length(void *stream, int32_t *length) { - mz_stream_mem *mem = (mz_stream_mem *)stream; - *length = mem->limit; -} - -void mz_stream_mem_set_buffer_limit(void *stream, int32_t limit) { - mz_stream_mem *mem = (mz_stream_mem *)stream; - mem->limit = limit; -} - -void mz_stream_mem_set_grow_size(void *stream, int32_t grow_size) { - mz_stream_mem *mem = (mz_stream_mem *)stream; - mem->grow_size = grow_size; -} - -void *mz_stream_mem_create(void **stream) { - mz_stream_mem *mem = NULL; - - mem = (mz_stream_mem *)calloc(1, sizeof(mz_stream_mem)); - if (mem) { - mem->stream.vtbl = &mz_stream_mem_vtbl; - mem->grow_size = 4096; - } - if (stream) - *stream = mem; - - return mem; -} - -void mz_stream_mem_delete(void **stream) { - mz_stream_mem *mem = NULL; - if (!stream) - return; - mem = (mz_stream_mem *)*stream; - if (mem) { - if ((mem->mode & MZ_OPEN_MODE_CREATE) && (mem->buffer)) - free(mem->buffer); - free(mem); - } - *stream = NULL; -} - -void *mz_stream_mem_get_interface(void) { - return (void *)&mz_stream_mem_vtbl; -} diff --git a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm_mem.h b/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm_mem.h deleted file mode 100644 index 22a12de..0000000 --- a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm_mem.h +++ /dev/null @@ -1,48 +0,0 @@ -/* mz_strm_mem.h -- Stream for memory access - part of the minizip-ng project - - Copyright (C) Nathan Moinvaziri - https://github.com/zlib-ng/minizip-ng - - This program is distributed under the terms of the same license as zlib. - See the accompanying LICENSE file for the full text of the license. -*/ - -#ifndef MZ_STREAM_MEM_H -#define MZ_STREAM_MEM_H - -#ifdef __cplusplus -extern "C" { -#endif - -/***************************************************************************/ - -int32_t mz_stream_mem_open(void *stream, const char *filename, int32_t mode); -int32_t mz_stream_mem_is_open(void *stream); -int32_t mz_stream_mem_read(void *stream, void *buf, int32_t size); -int32_t mz_stream_mem_write(void *stream, const void *buf, int32_t size); -int64_t mz_stream_mem_tell(void *stream); -int32_t mz_stream_mem_seek(void *stream, int64_t offset, int32_t origin); -int32_t mz_stream_mem_close(void *stream); -int32_t mz_stream_mem_error(void *stream); - -void mz_stream_mem_set_buffer(void *stream, void *buf, int32_t size); -int32_t mz_stream_mem_get_buffer(void *stream, const void **buf); -int32_t mz_stream_mem_get_buffer_at(void *stream, int64_t position, const void **buf); -int32_t mz_stream_mem_get_buffer_at_current(void *stream, const void **buf); -void mz_stream_mem_get_buffer_length(void *stream, int32_t *length); -void mz_stream_mem_set_buffer_limit(void *stream, int32_t limit); -void mz_stream_mem_set_grow_size(void *stream, int32_t grow_size); - -void* mz_stream_mem_create(void **stream); -void mz_stream_mem_delete(void **stream); - -void* mz_stream_mem_get_interface(void); - -/***************************************************************************/ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm_os.h b/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm_os.h deleted file mode 100644 index 83d292b..0000000 --- a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm_os.h +++ /dev/null @@ -1,40 +0,0 @@ -/* mz_sstrm_os.h -- Stream for filesystem access - part of the minizip-ng project - - Copyright (C) Nathan Moinvaziri - https://github.com/zlib-ng/minizip-ng - - This program is distributed under the terms of the same license as zlib. - See the accompanying LICENSE file for the full text of the license. -*/ - -#ifndef MZ_STREAM_OS_H -#define MZ_STREAM_OS_H - -#ifdef __cplusplus -extern "C" { -#endif - -/***************************************************************************/ - -int32_t mz_stream_os_open(void *stream, const char *path, int32_t mode); -int32_t mz_stream_os_is_open(void *stream); -int32_t mz_stream_os_read(void *stream, void *buf, int32_t size); -int32_t mz_stream_os_write(void *stream, const void *buf, int32_t size); -int64_t mz_stream_os_tell(void *stream); -int32_t mz_stream_os_seek(void *stream, int64_t offset, int32_t origin); -int32_t mz_stream_os_close(void *stream); -int32_t mz_stream_os_error(void *stream); - -void* mz_stream_os_create(void **stream); -void mz_stream_os_delete(void **stream); - -void* mz_stream_os_get_interface(void); - -/***************************************************************************/ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm_os_posix.c b/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm_os_posix.c deleted file mode 100644 index 60ff502..0000000 --- a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm_os_posix.c +++ /dev/null @@ -1,203 +0,0 @@ -/* mz_strm_posix.c -- Stream for filesystem access for posix/linux - part of the minizip-ng project - - Copyright (C) Nathan Moinvaziri - https://github.com/zlib-ng/minizip-ng - Modifications for Zip64 support - Copyright (C) 2009-2010 Mathias Svensson - http://result42.com - Copyright (C) 1998-2010 Gilles Vollant - https://www.winimage.com/zLibDll/minizip.html - - This program is distributed under the terms of the same license as zlib. - See the accompanying LICENSE file for the full text of the license. -*/ - -#include "mz.h" -#include "mz_strm.h" -#include "mz_strm_os.h" - -#include /* fopen, fread.. */ -#include - -/***************************************************************************/ - -#define fopen64 fopen -#ifndef MZ_FILE32_API -# ifndef NO_FSEEKO -# define ftello64 ftello -# define fseeko64 fseeko -# elif defined(_MSC_VER) && (_MSC_VER >= 1400) -# define ftello64 _ftelli64 -# define fseeko64 _fseeki64 -# endif -#endif -#ifndef ftello64 -# define ftello64 ftell -#endif -#ifndef fseeko64 -# define fseeko64 fseek -#endif - -/***************************************************************************/ - -static mz_stream_vtbl mz_stream_os_vtbl = { - mz_stream_os_open, - mz_stream_os_is_open, - mz_stream_os_read, - mz_stream_os_write, - mz_stream_os_tell, - mz_stream_os_seek, - mz_stream_os_close, - mz_stream_os_error, - mz_stream_os_create, - mz_stream_os_delete, - NULL, - NULL -}; - -/***************************************************************************/ - -typedef struct mz_stream_posix_s { - mz_stream stream; - int32_t error; - FILE *handle; -} mz_stream_posix; - -/***************************************************************************/ - -int32_t mz_stream_os_open(void *stream, const char *path, int32_t mode) { - mz_stream_posix *posix = (mz_stream_posix *)stream; - const char *mode_fopen = NULL; - - if (!path) - return MZ_PARAM_ERROR; - - if ((mode & MZ_OPEN_MODE_READWRITE) == MZ_OPEN_MODE_READ) - mode_fopen = "rb"; - else if (mode & MZ_OPEN_MODE_APPEND) - mode_fopen = "r+b"; - else if (mode & MZ_OPEN_MODE_CREATE) - mode_fopen = "wb"; - else - return MZ_OPEN_ERROR; - - posix->handle = fopen64(path, mode_fopen); - if (!posix->handle) { - posix->error = errno; - return MZ_OPEN_ERROR; - } - - if (mode & MZ_OPEN_MODE_APPEND) - return mz_stream_os_seek(stream, 0, MZ_SEEK_END); - - return MZ_OK; -} - -int32_t mz_stream_os_is_open(void *stream) { - mz_stream_posix *posix = (mz_stream_posix *)stream; - if (!posix->handle) - return MZ_OPEN_ERROR; - return MZ_OK; -} - -int32_t mz_stream_os_read(void *stream, void *buf, int32_t size) { - mz_stream_posix *posix = (mz_stream_posix *)stream; - int32_t read = (int32_t)fread(buf, 1, (size_t)size, posix->handle); - if (read < size && ferror(posix->handle)) { - posix->error = errno; - return MZ_READ_ERROR; - } - return read; -} - -int32_t mz_stream_os_write(void *stream, const void *buf, int32_t size) { - mz_stream_posix *posix = (mz_stream_posix *)stream; - int32_t written = (int32_t)fwrite(buf, 1, (size_t)size, posix->handle); - if (written < size && ferror(posix->handle)) { - posix->error = errno; - return MZ_WRITE_ERROR; - } - return written; -} - -int64_t mz_stream_os_tell(void *stream) { - mz_stream_posix *posix = (mz_stream_posix *)stream; - int64_t position = ftello64(posix->handle); - if (position == -1) { - posix->error = errno; - return MZ_TELL_ERROR; - } - return position; -} - -int32_t mz_stream_os_seek(void *stream, int64_t offset, int32_t origin) { - mz_stream_posix *posix = (mz_stream_posix *)stream; - int32_t fseek_origin = 0; - - switch (origin) { - case MZ_SEEK_CUR: - fseek_origin = SEEK_CUR; - break; - case MZ_SEEK_END: - fseek_origin = SEEK_END; - break; - case MZ_SEEK_SET: - fseek_origin = SEEK_SET; - break; - default: - return MZ_SEEK_ERROR; - } - - if (fseeko64(posix->handle, offset, fseek_origin) != 0) { - posix->error = errno; - return MZ_SEEK_ERROR; - } - - return MZ_OK; -} - -int32_t mz_stream_os_close(void *stream) { - mz_stream_posix *posix = (mz_stream_posix *)stream; - int32_t closed = 0; - if (posix->handle) { - closed = fclose(posix->handle); - posix->handle = NULL; - } - if (closed != 0) { - posix->error = errno; - return MZ_CLOSE_ERROR; - } - return MZ_OK; -} - -int32_t mz_stream_os_error(void *stream) { - mz_stream_posix *posix = (mz_stream_posix *)stream; - return posix->error; -} - -void *mz_stream_os_create(void **stream) { - mz_stream_posix *posix = NULL; - - posix = (mz_stream_posix *)calloc(1, sizeof(mz_stream_posix)); - if (posix) - posix->stream.vtbl = &mz_stream_os_vtbl; - if (stream) - *stream = posix; - - return posix; -} - -void mz_stream_os_delete(void **stream) { - mz_stream_posix *posix = NULL; - if (!stream) - return; - posix = (mz_stream_posix *)*stream; - if (posix) - free(posix); - *stream = NULL; -} - -void *mz_stream_os_get_interface(void) { - return (void *)&mz_stream_os_vtbl; -} diff --git a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm_pkcrypt.c b/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm_pkcrypt.c deleted file mode 100644 index 1791b15..0000000 --- a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm_pkcrypt.c +++ /dev/null @@ -1,334 +0,0 @@ -/* mz_strm_pkcrypt.c -- Code for traditional PKWARE encryption - part of the minizip-ng project - - Copyright (C) Nathan Moinvaziri - https://github.com/zlib-ng/minizip-ng - Copyright (C) 1998-2005 Gilles Vollant - Modifications for Info-ZIP crypting - https://www.winimage.com/zLibDll/minizip.html - Copyright (C) 2003 Terry Thorsen - - This code is a modified version of crypting code in Info-ZIP distribution - - Copyright (C) 1990-2000 Info-ZIP. All rights reserved. - - This program is distributed under the terms of the same license as zlib. - See the accompanying LICENSE file for the full text of the license. - - This encryption code is a direct transcription of the algorithm from - Roger Schlafly, described by Phil Katz in the file appnote.txt. This - file (appnote.txt) is distributed with the PKZIP program (even in the - version without encryption capabilities). -*/ - -#include "mz.h" -#include "mz_crypt.h" -#include "mz_strm.h" -#include "mz_strm_pkcrypt.h" - -/***************************************************************************/ - -static mz_stream_vtbl mz_stream_pkcrypt_vtbl = { - mz_stream_pkcrypt_open, - mz_stream_pkcrypt_is_open, - mz_stream_pkcrypt_read, - mz_stream_pkcrypt_write, - mz_stream_pkcrypt_tell, - mz_stream_pkcrypt_seek, - mz_stream_pkcrypt_close, - mz_stream_pkcrypt_error, - mz_stream_pkcrypt_create, - mz_stream_pkcrypt_delete, - mz_stream_pkcrypt_get_prop_int64, - mz_stream_pkcrypt_set_prop_int64 -}; - -/***************************************************************************/ - -typedef struct mz_stream_pkcrypt_s { - mz_stream stream; - int32_t error; - int16_t initialized; - uint8_t buffer[UINT16_MAX]; - int64_t total_in; - int64_t max_total_in; - int64_t total_out; - uint32_t keys[3]; /* keys defining the pseudo-random sequence */ - uint8_t verify1; - uint8_t verify2; - const char *password; -} mz_stream_pkcrypt; - -/***************************************************************************/ - -#define mz_stream_pkcrypt_decode(strm, c) \ - (mz_stream_pkcrypt_update_keys(strm, \ - c ^= mz_stream_pkcrypt_decrypt_byte(strm))) - -#define mz_stream_pkcrypt_encode(strm, c, t) \ - (t = mz_stream_pkcrypt_decrypt_byte(strm), \ - mz_stream_pkcrypt_update_keys(strm, (uint8_t)c), (uint8_t)(t^(c))) - -/***************************************************************************/ - -static uint8_t mz_stream_pkcrypt_decrypt_byte(void *stream) { - mz_stream_pkcrypt *pkcrypt = (mz_stream_pkcrypt *)stream; - - unsigned temp; /* POTENTIAL BUG: temp*(temp^1) may overflow in an */ - /* unpredictable manner on 16-bit systems; not a problem */ - /* with any known compiler so far, though. */ - - temp = pkcrypt->keys[2] | 2; - return (uint8_t)(((temp * (temp ^ 1)) >> 8) & 0xff); -} - -static uint8_t mz_stream_pkcrypt_update_keys(void *stream, uint8_t c) { - mz_stream_pkcrypt *pkcrypt = (mz_stream_pkcrypt *)stream; - uint8_t buf = c; - - pkcrypt->keys[0] = (uint32_t)~mz_crypt_crc32_update(~pkcrypt->keys[0], &buf, 1); - - pkcrypt->keys[1] += pkcrypt->keys[0] & 0xff; - pkcrypt->keys[1] *= 134775813L; - pkcrypt->keys[1] += 1; - - buf = (uint8_t)(pkcrypt->keys[1] >> 24); - pkcrypt->keys[2] = (uint32_t)~mz_crypt_crc32_update(~pkcrypt->keys[2], &buf, 1); - - return (uint8_t)c; -} - -static void mz_stream_pkcrypt_init_keys(void *stream, const char *password) { - mz_stream_pkcrypt *pkcrypt = (mz_stream_pkcrypt *)stream; - - pkcrypt->keys[0] = 305419896L; - pkcrypt->keys[1] = 591751049L; - pkcrypt->keys[2] = 878082192L; - - while (*password != 0) { - mz_stream_pkcrypt_update_keys(stream, (uint8_t)*password); - password += 1; - } -} - -/***************************************************************************/ - -int32_t mz_stream_pkcrypt_open(void *stream, const char *path, int32_t mode) { - mz_stream_pkcrypt *pkcrypt = (mz_stream_pkcrypt *)stream; - uint16_t t = 0; - int16_t i = 0; - uint8_t verify1 = 0; - uint8_t verify2 = 0; - uint8_t header[MZ_PKCRYPT_HEADER_SIZE]; - const char *password = path; - - pkcrypt->total_in = 0; - pkcrypt->total_out = 0; - pkcrypt->initialized = 0; - - if (mz_stream_is_open(pkcrypt->stream.base) != MZ_OK) - return MZ_OPEN_ERROR; - - if (!password) - password = pkcrypt->password; - if (!password) - return MZ_PARAM_ERROR; - - mz_stream_pkcrypt_init_keys(stream, password); - - if (mode & MZ_OPEN_MODE_WRITE) { - /* First generate RAND_HEAD_LEN - 2 random bytes. */ - mz_crypt_rand(header, MZ_PKCRYPT_HEADER_SIZE - 2); - - /* Encrypt random header (last two bytes is high word of crc) */ - for (i = 0; i < MZ_PKCRYPT_HEADER_SIZE - 2; i++) - header[i] = mz_stream_pkcrypt_encode(stream, header[i], t); - - header[i++] = mz_stream_pkcrypt_encode(stream, pkcrypt->verify1, t); - header[i++] = mz_stream_pkcrypt_encode(stream, pkcrypt->verify2, t); - - if (mz_stream_write(pkcrypt->stream.base, header, sizeof(header)) != sizeof(header)) - return MZ_WRITE_ERROR; - - pkcrypt->total_out += MZ_PKCRYPT_HEADER_SIZE; - } else if (mode & MZ_OPEN_MODE_READ) { - if (mz_stream_read(pkcrypt->stream.base, header, sizeof(header)) != sizeof(header)) - return MZ_READ_ERROR; - - for (i = 0; i < MZ_PKCRYPT_HEADER_SIZE - 2; i++) - header[i] = mz_stream_pkcrypt_decode(stream, header[i]); - - verify1 = mz_stream_pkcrypt_decode(stream, header[i++]); - verify2 = mz_stream_pkcrypt_decode(stream, header[i++]); - - /* Older versions used 2 byte check, newer versions use 1 byte check. */ - MZ_UNUSED(verify1); - if ((verify2 != 0) && (verify2 != pkcrypt->verify2)) - return MZ_PASSWORD_ERROR; - - pkcrypt->total_in += MZ_PKCRYPT_HEADER_SIZE; - } - - pkcrypt->initialized = 1; - return MZ_OK; -} - -int32_t mz_stream_pkcrypt_is_open(void *stream) { - mz_stream_pkcrypt *pkcrypt = (mz_stream_pkcrypt *)stream; - if (!pkcrypt->initialized) - return MZ_OPEN_ERROR; - return MZ_OK; -} - -int32_t mz_stream_pkcrypt_read(void *stream, void *buf, int32_t size) { - mz_stream_pkcrypt *pkcrypt = (mz_stream_pkcrypt *)stream; - uint8_t *buf_ptr = (uint8_t *)buf; - int32_t bytes_to_read = size; - int32_t read = 0; - int32_t i = 0; - - if ((int64_t)bytes_to_read > (pkcrypt->max_total_in - pkcrypt->total_in)) - bytes_to_read = (int32_t)(pkcrypt->max_total_in - pkcrypt->total_in); - - read = mz_stream_read(pkcrypt->stream.base, buf, bytes_to_read); - - for (i = 0; i < read; i++) - buf_ptr[i] = mz_stream_pkcrypt_decode(stream, buf_ptr[i]); - - if (read > 0) - pkcrypt->total_in += read; - - return read; -} - -int32_t mz_stream_pkcrypt_write(void *stream, const void *buf, int32_t size) { - mz_stream_pkcrypt *pkcrypt = (mz_stream_pkcrypt *)stream; - const uint8_t *buf_ptr = (const uint8_t *)buf; - int32_t bytes_to_write = sizeof(pkcrypt->buffer); - int32_t total_written = 0; - int32_t written = 0; - int32_t i = 0; - uint16_t t = 0; - - if (size < 0) - return MZ_PARAM_ERROR; - - do { - if (bytes_to_write > (size - total_written)) - bytes_to_write = (size - total_written); - - for (i = 0; i < bytes_to_write; i += 1) { - pkcrypt->buffer[i] = mz_stream_pkcrypt_encode(stream, *buf_ptr, t); - buf_ptr += 1; - } - - written = mz_stream_write(pkcrypt->stream.base, pkcrypt->buffer, bytes_to_write); - if (written < 0) - return written; - - total_written += written; - } while (total_written < size && written > 0); - - pkcrypt->total_out += total_written; - return total_written; -} - -int64_t mz_stream_pkcrypt_tell(void *stream) { - mz_stream_pkcrypt *pkcrypt = (mz_stream_pkcrypt *)stream; - return mz_stream_tell(pkcrypt->stream.base); -} - -int32_t mz_stream_pkcrypt_seek(void *stream, int64_t offset, int32_t origin) { - mz_stream_pkcrypt *pkcrypt = (mz_stream_pkcrypt *)stream; - return mz_stream_seek(pkcrypt->stream.base, offset, origin); -} - -int32_t mz_stream_pkcrypt_close(void *stream) { - mz_stream_pkcrypt *pkcrypt = (mz_stream_pkcrypt *)stream; - pkcrypt->initialized = 0; - return MZ_OK; -} - -int32_t mz_stream_pkcrypt_error(void *stream) { - mz_stream_pkcrypt *pkcrypt = (mz_stream_pkcrypt *)stream; - return pkcrypt->error; -} - -void mz_stream_pkcrypt_set_password(void *stream, const char *password) { - mz_stream_pkcrypt *pkcrypt = (mz_stream_pkcrypt *)stream; - pkcrypt->password = password; -} - -void mz_stream_pkcrypt_set_verify(void *stream, uint8_t verify1, uint8_t verify2) { - mz_stream_pkcrypt *pkcrypt = (mz_stream_pkcrypt *)stream; - pkcrypt->verify1 = verify1; - pkcrypt->verify2 = verify2; -} - -void mz_stream_pkcrypt_get_verify(void *stream, uint8_t *verify1, uint8_t *verify2) { - mz_stream_pkcrypt *pkcrypt = (mz_stream_pkcrypt *)stream; - *verify1 = pkcrypt->verify1; - *verify2 = pkcrypt->verify2; -} - -int32_t mz_stream_pkcrypt_get_prop_int64(void *stream, int32_t prop, int64_t *value) { - mz_stream_pkcrypt *pkcrypt = (mz_stream_pkcrypt *)stream; - switch (prop) { - case MZ_STREAM_PROP_TOTAL_IN: - *value = pkcrypt->total_in; - break; - case MZ_STREAM_PROP_TOTAL_OUT: - *value = pkcrypt->total_out; - break; - case MZ_STREAM_PROP_TOTAL_IN_MAX: - *value = pkcrypt->max_total_in; - break; - case MZ_STREAM_PROP_HEADER_SIZE: - *value = MZ_PKCRYPT_HEADER_SIZE; - break; - case MZ_STREAM_PROP_FOOTER_SIZE: - *value = 0; - break; - default: - return MZ_EXIST_ERROR; - } - return MZ_OK; -} - -int32_t mz_stream_pkcrypt_set_prop_int64(void *stream, int32_t prop, int64_t value) { - mz_stream_pkcrypt *pkcrypt = (mz_stream_pkcrypt *)stream; - switch (prop) { - case MZ_STREAM_PROP_TOTAL_IN_MAX: - pkcrypt->max_total_in = value; - break; - default: - return MZ_EXIST_ERROR; - } - return MZ_OK; -} - -void *mz_stream_pkcrypt_create(void **stream) { - mz_stream_pkcrypt *pkcrypt = NULL; - - pkcrypt = (mz_stream_pkcrypt *)calloc(1, sizeof(mz_stream_pkcrypt)); - if (pkcrypt) - pkcrypt->stream.vtbl = &mz_stream_pkcrypt_vtbl; - if (stream) - *stream = pkcrypt; - - return pkcrypt; -} - -void mz_stream_pkcrypt_delete(void **stream) { - mz_stream_pkcrypt *pkcrypt = NULL; - if (!stream) - return; - pkcrypt = (mz_stream_pkcrypt *)*stream; - if (pkcrypt) - free(pkcrypt); - *stream = NULL; -} - -void *mz_stream_pkcrypt_get_interface(void) { - return (void *)&mz_stream_pkcrypt_vtbl; -} diff --git a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm_pkcrypt.h b/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm_pkcrypt.h deleted file mode 100644 index 1d6fb46..0000000 --- a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm_pkcrypt.h +++ /dev/null @@ -1,46 +0,0 @@ -/* mz_strm_pkcrypt.h -- Code for traditional PKWARE encryption - part of the minizip-ng project - - Copyright (C) Nathan Moinvaziri - https://github.com/zlib-ng/minizip-ng - - This program is distributed under the terms of the same license as zlib. - See the accompanying LICENSE file for the full text of the license. -*/ - -#ifndef MZ_STREAM_PKCRYPT_H -#define MZ_STREAM_PKCRYPT_H - -#ifdef __cplusplus -extern "C" { -#endif - -/***************************************************************************/ - -int32_t mz_stream_pkcrypt_open(void *stream, const char *filename, int32_t mode); -int32_t mz_stream_pkcrypt_is_open(void *stream); -int32_t mz_stream_pkcrypt_read(void *stream, void *buf, int32_t size); -int32_t mz_stream_pkcrypt_write(void *stream, const void *buf, int32_t size); -int64_t mz_stream_pkcrypt_tell(void *stream); -int32_t mz_stream_pkcrypt_seek(void *stream, int64_t offset, int32_t origin); -int32_t mz_stream_pkcrypt_close(void *stream); -int32_t mz_stream_pkcrypt_error(void *stream); - -void mz_stream_pkcrypt_set_password(void *stream, const char *password); -void mz_stream_pkcrypt_set_verify(void *stream, uint8_t verify1, uint8_t verify2); -void mz_stream_pkcrypt_get_verify(void *stream, uint8_t *verify1, uint8_t *verify2); -int32_t mz_stream_pkcrypt_get_prop_int64(void *stream, int32_t prop, int64_t *value); -int32_t mz_stream_pkcrypt_set_prop_int64(void *stream, int32_t prop, int64_t value); - -void* mz_stream_pkcrypt_create(void **stream); -void mz_stream_pkcrypt_delete(void **stream); - -void* mz_stream_pkcrypt_get_interface(void); - -/***************************************************************************/ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm_split.c b/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm_split.c deleted file mode 100644 index faf833f..0000000 --- a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm_split.c +++ /dev/null @@ -1,429 +0,0 @@ -/* mz_strm_split.c -- Stream for split files - part of the minizip-ng project - - Copyright (C) Nathan Moinvaziri - https://github.com/zlib-ng/minizip-ng - - This program is distributed under the terms of the same license as zlib. - See the accompanying LICENSE file for the full text of the license. -*/ - -#include "mz.h" -#include "mz_os.h" -#include "mz_strm.h" -#include "mz_strm_split.h" - -#include /* snprintf */ - -#if defined(_MSC_VER) && (_MSC_VER < 1900) -# define snprintf _snprintf -#endif - -/***************************************************************************/ - -#define MZ_ZIP_MAGIC_DISKHEADER (0x08074b50) - -/***************************************************************************/ - -static mz_stream_vtbl mz_stream_split_vtbl = { - mz_stream_split_open, - mz_stream_split_is_open, - mz_stream_split_read, - mz_stream_split_write, - mz_stream_split_tell, - mz_stream_split_seek, - mz_stream_split_close, - mz_stream_split_error, - mz_stream_split_create, - mz_stream_split_delete, - mz_stream_split_get_prop_int64, - mz_stream_split_set_prop_int64 -}; - -/***************************************************************************/ - -typedef struct mz_stream_split_s { - mz_stream stream; - int32_t is_open; - int64_t disk_size; - int64_t total_in; - int64_t total_in_disk; - int64_t total_out; - int64_t total_out_disk; - int32_t mode; - char *path_cd; - char *path_disk; - uint32_t path_disk_size; - int32_t number_disk; - int32_t current_disk; - int64_t current_disk_size; - int32_t reached_end; -} mz_stream_split; - -/***************************************************************************/ - -#if 0 -# define mz_stream_split_print printf -#else -# define mz_stream_split_print(fmt, ...) -#endif - -/***************************************************************************/ - -static int32_t mz_stream_split_open_disk(void *stream, int32_t number_disk) { - mz_stream_split *split = (mz_stream_split *)stream; - uint32_t magic = 0; - int64_t position = 0; - int32_t i = 0; - int32_t err = MZ_OK; - int16_t disk_part = 0; - - /* Check if we are reading or writing a disk part or the cd disk */ - if (number_disk >= 0) { - if ((split->mode & MZ_OPEN_MODE_WRITE) == 0) - disk_part = MZ_OPEN_MODE_READ; - else if (split->disk_size > 0) - disk_part = MZ_OPEN_MODE_WRITE; - } - - /* Construct disk path */ - if (disk_part > 0) { - for (i = (int32_t)strlen(split->path_disk) - 1; i >= 0; i -= 1) { - if (split->path_disk[i] != '.') - continue; - snprintf(&split->path_disk[i], split->path_disk_size - (uint32_t)i, - ".z%02" PRId32, number_disk + 1); - break; - } - } else { - strncpy(split->path_disk, split->path_cd, split->path_disk_size - 1); - split->path_disk[split->path_disk_size - 1] = 0; - } - - mz_stream_split_print("Split - Goto disk - %s (disk %" PRId32 ")\n", split->path_disk, number_disk); - - /* If disk part doesn't exist during reading then return MZ_EXIST_ERROR */ - if (disk_part == MZ_OPEN_MODE_READ) - err = mz_os_file_exists(split->path_disk); - - if (err == MZ_OK) - err = mz_stream_open(split->stream.base, split->path_disk, split->mode); - - if (err == MZ_OK) { - split->total_in_disk = 0; - split->total_out_disk = 0; - split->current_disk = number_disk; - - if (split->mode & MZ_OPEN_MODE_WRITE) { - if ((split->current_disk == 0) && (split->disk_size > 0)) { - err = mz_stream_write_uint32(split->stream.base, MZ_ZIP_MAGIC_DISKHEADER); - - split->total_out_disk += 4; - split->total_out += split->total_out_disk; - } - } else if (split->mode & MZ_OPEN_MODE_READ) { - if (split->current_disk == 0) { - err = mz_stream_read_uint32(split->stream.base, &magic); - if (magic != MZ_ZIP_MAGIC_DISKHEADER) - err = MZ_FORMAT_ERROR; - } - } - } - - if (err == MZ_OK) { - /* Get the size of the current disk we are on */ - position = mz_stream_tell(split->stream.base); - mz_stream_seek(split->stream.base, 0, MZ_SEEK_END); - split->current_disk_size = mz_stream_tell(split->stream.base); - mz_stream_seek(split->stream.base, position, MZ_SEEK_SET); - - split->is_open = 1; - } - - return err; -} - -static int32_t mz_stream_split_close_disk(void *stream) { - mz_stream_split *split = (mz_stream_split *)stream; - - if (mz_stream_is_open(split->stream.base) != MZ_OK) - return MZ_OK; - - mz_stream_split_print("Split - Close disk\n"); - return mz_stream_close(split->stream.base); -} - -static int32_t mz_stream_split_goto_disk(void *stream, int32_t number_disk) { - mz_stream_split *split = (mz_stream_split *)stream; - int32_t err = MZ_OK; - int32_t err_is_open = MZ_OK; - - err_is_open = mz_stream_is_open(split->stream.base); - - if ((split->disk_size == 0) && (split->mode & MZ_OPEN_MODE_WRITE)) { - if (err_is_open != MZ_OK) - err = mz_stream_split_open_disk(stream, number_disk); - } else if ((number_disk != split->current_disk) || (err_is_open != MZ_OK)) { - err = mz_stream_split_close_disk(stream); - if (err == MZ_OK) { - err = mz_stream_split_open_disk(stream, number_disk); - if (err == MZ_OK) - split->number_disk = number_disk; - } - } - - return err; -} - -int32_t mz_stream_split_open(void *stream, const char *path, int32_t mode) { - mz_stream_split *split = (mz_stream_split *)stream; - int32_t number_disk = 0; - - split->mode = mode; - split->path_cd = strdup(path); - - if (!split->path_cd) - return MZ_MEM_ERROR; - - mz_stream_split_print("Split - Open - %s (disk %" PRId32 ")\n", split->path_cd, number_disk); - - split->path_disk_size = (uint32_t)strlen(path) + 10; - split->path_disk = (char *)malloc(split->path_disk_size); - - if (!split->path_disk) { - free(split->path_cd); - return MZ_MEM_ERROR; - } - - strncpy(split->path_disk, path, split->path_disk_size - 1); - split->path_disk[split->path_disk_size - 1] = 0; - - if ((mode & MZ_OPEN_MODE_WRITE) && ((mode & MZ_OPEN_MODE_APPEND) == 0)) { - number_disk = 0; - split->current_disk = -1; - } else { - number_disk = -1; - split->current_disk = 0; - } - - return mz_stream_split_goto_disk(stream, number_disk); -} - -int32_t mz_stream_split_is_open(void *stream) { - mz_stream_split *split = (mz_stream_split *)stream; - if (split->is_open != 1) - return MZ_OPEN_ERROR; - return MZ_OK; -} - -int32_t mz_stream_split_read(void *stream, void *buf, int32_t size) { - mz_stream_split *split = (mz_stream_split *)stream; - int32_t bytes_left = size; - int32_t read = 0; - int32_t err = MZ_OK; - uint8_t *buf_ptr = (uint8_t *)buf; - - err = mz_stream_split_goto_disk(stream, split->number_disk); - if (err != MZ_OK) - return err; - - while (bytes_left > 0) { - read = mz_stream_read(split->stream.base, buf_ptr, bytes_left); - - mz_stream_split_print("Split - Read disk - %" PRId32 "\n", read); - - if (read < 0) - return read; - if (read == 0) { - if (split->current_disk < 0) /* No more disks to goto */ - break; - err = mz_stream_split_goto_disk(stream, split->current_disk + 1); - if (err == MZ_EXIST_ERROR) { - split->current_disk = -1; - break; - } - if (err != MZ_OK) - return err; - } - - bytes_left -= read; - buf_ptr += read; - split->total_in += read; - split->total_in_disk += read; - } - return size - bytes_left; -} - -int32_t mz_stream_split_write(void *stream, const void *buf, int32_t size) { - mz_stream_split *split = (mz_stream_split *)stream; - int64_t position = 0; - int32_t written = 0; - int32_t bytes_left = size; - int32_t bytes_to_write = 0; - int32_t bytes_avail = 0; - int32_t number_disk = -1; - int32_t err = MZ_OK; - const uint8_t *buf_ptr = (const uint8_t *)buf; - - position = mz_stream_tell(split->stream.base); - - while (bytes_left > 0) { - bytes_to_write = bytes_left; - - if (split->disk_size > 0) { - if ((split->total_out_disk == split->disk_size && split->total_out > 0) || - (split->number_disk == -1 && split->number_disk != split->current_disk)) { - if (split->number_disk != -1) - number_disk = split->current_disk + 1; - - err = mz_stream_split_goto_disk(stream, number_disk); - if (err != MZ_OK) - return err; - - position = 0; - } - - if (split->number_disk != -1) { - bytes_avail = (int32_t)(split->disk_size - split->total_out_disk); - if (bytes_to_write > bytes_avail) - bytes_to_write = bytes_avail; - } - } - - written = mz_stream_write(split->stream.base, buf_ptr, bytes_to_write); - if (written != bytes_to_write) - return MZ_WRITE_ERROR; - - mz_stream_split_print("Split - Write disk - %" PRId32 "\n", written); - - bytes_left -= written; - buf_ptr += written; - - split->total_out += written; - split->total_out_disk += written; - - position += written; - if (position > split->current_disk_size) - split->current_disk_size = position; - } - - return size - bytes_left; -} - -int64_t mz_stream_split_tell(void *stream) { - mz_stream_split *split = (mz_stream_split *)stream; - int32_t err = MZ_OK; - err = mz_stream_split_goto_disk(stream, split->number_disk); - if (err != MZ_OK) - return err; - return mz_stream_tell(split->stream.base); -} - -int32_t mz_stream_split_seek(void *stream, int64_t offset, int32_t origin) { - mz_stream_split *split = (mz_stream_split *)stream; - int64_t disk_left = 0; - int64_t position = 0; - int32_t err = MZ_OK; - - err = mz_stream_split_goto_disk(stream, split->number_disk); - - if (err != MZ_OK) - return err; - - mz_stream_split_print("Split - Seek disk - %" PRId64 " (origin %" PRId32 ")\n", offset, origin); - - if ((origin == MZ_SEEK_CUR) && (split->number_disk != -1)) { - position = mz_stream_tell(split->stream.base); - disk_left = split->current_disk_size - position; - - while (offset > disk_left) { - err = mz_stream_split_goto_disk(stream, split->current_disk + 1); - if (err != MZ_OK) - return err; - - offset -= disk_left; - disk_left = split->current_disk_size; - } - } - - return mz_stream_seek(split->stream.base, offset, origin); -} - -int32_t mz_stream_split_close(void *stream) { - mz_stream_split *split = (mz_stream_split *)stream; - int32_t err = MZ_OK; - - err = mz_stream_split_close_disk(stream); - split->is_open = 0; - return err; -} - -int32_t mz_stream_split_error(void *stream) { - mz_stream_split *split = (mz_stream_split *)stream; - return mz_stream_error(split->stream.base); -} - -int32_t mz_stream_split_get_prop_int64(void *stream, int32_t prop, int64_t *value) { - mz_stream_split *split = (mz_stream_split *)stream; - switch (prop) { - case MZ_STREAM_PROP_TOTAL_OUT: - *value = split->total_out; - break; - case MZ_STREAM_PROP_DISK_NUMBER: - *value = split->number_disk; - break; - case MZ_STREAM_PROP_DISK_SIZE: - *value = split->disk_size; - break; - default: - return MZ_EXIST_ERROR; - } - return MZ_OK; -} - -int32_t mz_stream_split_set_prop_int64(void *stream, int32_t prop, int64_t value) { - mz_stream_split *split = (mz_stream_split *)stream; - switch (prop) { - case MZ_STREAM_PROP_DISK_NUMBER: - split->number_disk = (int32_t)value; - break; - case MZ_STREAM_PROP_DISK_SIZE: - split->disk_size = value; - break; - default: - return MZ_EXIST_ERROR; - } - return MZ_OK; -} - -void *mz_stream_split_create(void **stream) { - mz_stream_split *split = NULL; - - split = (mz_stream_split *)calloc(1, sizeof(mz_stream_split)); - if (split) - split->stream.vtbl = &mz_stream_split_vtbl; - if (stream) - *stream = split; - - return split; -} - -void mz_stream_split_delete(void **stream) { - mz_stream_split *split = NULL; - if (!stream) - return; - split = (mz_stream_split *)*stream; - if (split) { - if (split->path_cd) - free(split->path_cd); - if (split->path_disk) - free(split->path_disk); - - free(split); - } - *stream = NULL; -} - -void *mz_stream_split_get_interface(void) { - return (void *)&mz_stream_split_vtbl; -} diff --git a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm_split.h b/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm_split.h deleted file mode 100644 index d03054b..0000000 --- a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm_split.h +++ /dev/null @@ -1,43 +0,0 @@ -/* mz_strm_split.h -- Stream for split files - part of the minizip-ng project - - Copyright (C) Nathan Moinvaziri - https://github.com/zlib-ng/minizip-ng - - This program is distributed under the terms of the same license as zlib. - See the accompanying LICENSE file for the full text of the license. -*/ - -#ifndef MZ_STREAM_SPLIT_H -#define MZ_STREAM_SPLIT_H - -#ifdef __cplusplus -extern "C" { -#endif - -/***************************************************************************/ - -int32_t mz_stream_split_open(void *stream, const char *filename, int32_t mode); -int32_t mz_stream_split_is_open(void *stream); -int32_t mz_stream_split_read(void *stream, void *buf, int32_t size); -int32_t mz_stream_split_write(void *stream, const void *buf, int32_t size); -int64_t mz_stream_split_tell(void *stream); -int32_t mz_stream_split_seek(void *stream, int64_t offset, int32_t origin); -int32_t mz_stream_split_close(void *stream); -int32_t mz_stream_split_error(void *stream); - -int32_t mz_stream_split_get_prop_int64(void *stream, int32_t prop, int64_t *value); -int32_t mz_stream_split_set_prop_int64(void *stream, int32_t prop, int64_t value); - -void* mz_stream_split_create(void **stream); -void mz_stream_split_delete(void **stream); - -void* mz_stream_split_get_interface(void); - -/***************************************************************************/ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm_wzaes.c b/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm_wzaes.c deleted file mode 100644 index bf2deb7..0000000 --- a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm_wzaes.c +++ /dev/null @@ -1,360 +0,0 @@ -/* mz_strm_wzaes.c -- Stream for WinZip AES encryption - part of the minizip-ng project - - Copyright (C) Nathan Moinvaziri - https://github.com/zlib-ng/minizip-ng - Copyright (C) 1998-2010 Brian Gladman, Worcester, UK - - This program is distributed under the terms of the same license as zlib. - See the accompanying LICENSE file for the full text of the license. -*/ - -#include "mz.h" -#include "mz_crypt.h" -#include "mz_strm.h" -#include "mz_strm_wzaes.h" - -/***************************************************************************/ - -#define MZ_AES_KEYING_ITERATIONS (1000) -#define MZ_AES_SALT_LENGTH(MODE) (4 * (MODE & 3) + 4) -#define MZ_AES_SALT_LENGTH_MAX (16) -#define MZ_AES_PW_LENGTH_MAX (128) -#define MZ_AES_PW_VERIFY_SIZE (2) -#define MZ_AES_AUTHCODE_SIZE (10) - -/***************************************************************************/ - -static mz_stream_vtbl mz_stream_wzaes_vtbl = { - mz_stream_wzaes_open, - mz_stream_wzaes_is_open, - mz_stream_wzaes_read, - mz_stream_wzaes_write, - mz_stream_wzaes_tell, - mz_stream_wzaes_seek, - mz_stream_wzaes_close, - mz_stream_wzaes_error, - mz_stream_wzaes_create, - mz_stream_wzaes_delete, - mz_stream_wzaes_get_prop_int64, - mz_stream_wzaes_set_prop_int64 -}; - -/***************************************************************************/ - -typedef struct mz_stream_wzaes_s { - mz_stream stream; - int32_t mode; - int32_t error; - int16_t initialized; - uint8_t buffer[UINT16_MAX]; - int64_t total_in; - int64_t max_total_in; - int64_t total_out; - int16_t encryption_mode; - const char *password; - void *aes; - uint32_t crypt_pos; - uint8_t crypt_block[MZ_AES_BLOCK_SIZE]; - void *hmac; - uint8_t nonce[MZ_AES_BLOCK_SIZE]; -} mz_stream_wzaes; - -/***************************************************************************/ - -int32_t mz_stream_wzaes_open(void *stream, const char *path, int32_t mode) { - mz_stream_wzaes *wzaes = (mz_stream_wzaes *)stream; - uint16_t salt_length = 0; - uint16_t password_length = 0; - uint16_t key_length = 0; - uint8_t kbuf[2 * MZ_AES_KEY_LENGTH_MAX + MZ_AES_PW_VERIFY_SIZE]; - uint8_t verify[MZ_AES_PW_VERIFY_SIZE]; - uint8_t verify_expected[MZ_AES_PW_VERIFY_SIZE]; - uint8_t salt_value[MZ_AES_SALT_LENGTH_MAX]; - const char *password = path; - - wzaes->total_in = 0; - wzaes->total_out = 0; - wzaes->initialized = 0; - - if (mz_stream_is_open(wzaes->stream.base) != MZ_OK) - return MZ_OPEN_ERROR; - - if (!password) - password = wzaes->password; - if (!password) - return MZ_PARAM_ERROR; - password_length = (uint16_t)strlen(password); - if (password_length > MZ_AES_PW_LENGTH_MAX) - return MZ_PARAM_ERROR; - - if (wzaes->encryption_mode < 1 || wzaes->encryption_mode > 3) - return MZ_PARAM_ERROR; - - salt_length = MZ_AES_SALT_LENGTH(wzaes->encryption_mode); - - if (mode & MZ_OPEN_MODE_WRITE) { - mz_crypt_rand(salt_value, salt_length); - } else if (mode & MZ_OPEN_MODE_READ) { - if (mz_stream_read(wzaes->stream.base, salt_value, salt_length) != salt_length) - return MZ_READ_ERROR; - } - - key_length = MZ_AES_KEY_LENGTH(wzaes->encryption_mode); - - /* Derive the encryption and authentication keys and the password verifier */ - mz_crypt_pbkdf2((uint8_t *)password, password_length, salt_value, salt_length, - MZ_AES_KEYING_ITERATIONS, kbuf, 2 * key_length + MZ_AES_PW_VERIFY_SIZE); - - /* Initialize the encryption nonce and buffer pos */ - wzaes->crypt_pos = MZ_AES_BLOCK_SIZE; - memset(wzaes->nonce, 0, sizeof(wzaes->nonce)); - - /* Initialize for encryption using key 1 */ - mz_crypt_aes_reset(wzaes->aes); - mz_crypt_aes_set_mode(wzaes->aes, wzaes->encryption_mode); - mz_crypt_aes_set_encrypt_key(wzaes->aes, kbuf, key_length); - - /* Initialize for authentication using key 2 */ - mz_crypt_hmac_reset(wzaes->hmac); - mz_crypt_hmac_set_algorithm(wzaes->hmac, MZ_HASH_SHA1); - mz_crypt_hmac_init(wzaes->hmac, kbuf + key_length, key_length); - - memcpy(verify, kbuf + (2 * key_length), MZ_AES_PW_VERIFY_SIZE); - - if (mode & MZ_OPEN_MODE_WRITE) { - if (mz_stream_write(wzaes->stream.base, salt_value, salt_length) != salt_length) - return MZ_WRITE_ERROR; - - wzaes->total_out += salt_length; - - if (mz_stream_write(wzaes->stream.base, verify, MZ_AES_PW_VERIFY_SIZE) != MZ_AES_PW_VERIFY_SIZE) - return MZ_WRITE_ERROR; - - wzaes->total_out += MZ_AES_PW_VERIFY_SIZE; - } else if (mode & MZ_OPEN_MODE_READ) { - wzaes->total_in += salt_length; - - if (mz_stream_read(wzaes->stream.base, verify_expected, MZ_AES_PW_VERIFY_SIZE) != MZ_AES_PW_VERIFY_SIZE) - return MZ_READ_ERROR; - - wzaes->total_in += MZ_AES_PW_VERIFY_SIZE; - - if (memcmp(verify_expected, verify, MZ_AES_PW_VERIFY_SIZE) != 0) - return MZ_PASSWORD_ERROR; - } - - wzaes->mode = mode; - wzaes->initialized = 1; - - return MZ_OK; -} - -int32_t mz_stream_wzaes_is_open(void *stream) { - mz_stream_wzaes *wzaes = (mz_stream_wzaes *)stream; - if (!wzaes->initialized) - return MZ_OPEN_ERROR; - return MZ_OK; -} - -static int32_t mz_stream_wzaes_ctr_encrypt(void *stream, uint8_t *buf, int32_t size) { - mz_stream_wzaes *wzaes = (mz_stream_wzaes *)stream; - uint32_t pos = wzaes->crypt_pos; - uint32_t i = 0; - int32_t err = MZ_OK; - - while (i < (uint32_t)size) { - if (pos == MZ_AES_BLOCK_SIZE) { - uint32_t j = 0; - - /* Increment encryption nonce */ - while (j < 8 && !++wzaes->nonce[j]) - j += 1; - - /* Encrypt the nonce to form next xor buffer */ - memcpy(wzaes->crypt_block, wzaes->nonce, MZ_AES_BLOCK_SIZE); - mz_crypt_aes_encrypt(wzaes->aes, wzaes->crypt_block, sizeof(wzaes->crypt_block)); - pos = 0; - } - - buf[i++] ^= wzaes->crypt_block[pos++]; - } - - wzaes->crypt_pos = pos; - return err; -} - -int32_t mz_stream_wzaes_read(void *stream, void *buf, int32_t size) { - mz_stream_wzaes *wzaes = (mz_stream_wzaes *)stream; - int64_t max_total_in = 0; - int32_t bytes_to_read = size; - int32_t read = 0; - - max_total_in = wzaes->max_total_in - MZ_AES_FOOTER_SIZE; - if ((int64_t)bytes_to_read > (max_total_in - wzaes->total_in)) - bytes_to_read = (int32_t)(max_total_in - wzaes->total_in); - - read = mz_stream_read(wzaes->stream.base, buf, bytes_to_read); - - if (read > 0) { - mz_crypt_hmac_update(wzaes->hmac, (uint8_t *)buf, read); - mz_stream_wzaes_ctr_encrypt(stream, (uint8_t *)buf, read); - - wzaes->total_in += read; - } - - return read; -} - -int32_t mz_stream_wzaes_write(void *stream, const void *buf, int32_t size) { - mz_stream_wzaes *wzaes = (mz_stream_wzaes *)stream; - const uint8_t *buf_ptr = (const uint8_t *)buf; - int32_t bytes_to_write = sizeof(wzaes->buffer); - int32_t total_written = 0; - int32_t written = 0; - - if (size < 0) - return MZ_PARAM_ERROR; - - do { - if (bytes_to_write > (size - total_written)) - bytes_to_write = (size - total_written); - - memcpy(wzaes->buffer, buf_ptr, bytes_to_write); - buf_ptr += bytes_to_write; - - mz_stream_wzaes_ctr_encrypt(stream, (uint8_t *)wzaes->buffer, bytes_to_write); - mz_crypt_hmac_update(wzaes->hmac, wzaes->buffer, bytes_to_write); - - written = mz_stream_write(wzaes->stream.base, wzaes->buffer, bytes_to_write); - if (written < 0) - return written; - - total_written += written; - } while (total_written < size && written > 0); - - wzaes->total_out += total_written; - return total_written; -} - -int64_t mz_stream_wzaes_tell(void *stream) { - mz_stream_wzaes *wzaes = (mz_stream_wzaes *)stream; - return mz_stream_tell(wzaes->stream.base); -} - -int32_t mz_stream_wzaes_seek(void *stream, int64_t offset, int32_t origin) { - mz_stream_wzaes *wzaes = (mz_stream_wzaes *)stream; - return mz_stream_seek(wzaes->stream.base, offset, origin); -} - -int32_t mz_stream_wzaes_close(void *stream) { - mz_stream_wzaes *wzaes = (mz_stream_wzaes *)stream; - uint8_t expected_hash[MZ_AES_AUTHCODE_SIZE]; - uint8_t computed_hash[MZ_HASH_SHA1_SIZE]; - - mz_crypt_hmac_end(wzaes->hmac, computed_hash, sizeof(computed_hash)); - - if (wzaes->mode & MZ_OPEN_MODE_WRITE) { - if (mz_stream_write(wzaes->stream.base, computed_hash, MZ_AES_AUTHCODE_SIZE) != MZ_AES_AUTHCODE_SIZE) - return MZ_WRITE_ERROR; - - wzaes->total_out += MZ_AES_AUTHCODE_SIZE; - } else if (wzaes->mode & MZ_OPEN_MODE_READ) { - if (mz_stream_read(wzaes->stream.base, expected_hash, MZ_AES_AUTHCODE_SIZE) != MZ_AES_AUTHCODE_SIZE) - return MZ_READ_ERROR; - - wzaes->total_in += MZ_AES_AUTHCODE_SIZE; - - /* If entire entry was not read this will fail */ - if (memcmp(computed_hash, expected_hash, MZ_AES_AUTHCODE_SIZE) != 0) - return MZ_CRC_ERROR; - } - - wzaes->initialized = 0; - return MZ_OK; -} - -int32_t mz_stream_wzaes_error(void *stream) { - mz_stream_wzaes *wzaes = (mz_stream_wzaes *)stream; - return wzaes->error; -} - -void mz_stream_wzaes_set_password(void *stream, const char *password) { - mz_stream_wzaes *wzaes = (mz_stream_wzaes *)stream; - wzaes->password = password; -} - -void mz_stream_wzaes_set_encryption_mode(void *stream, int16_t encryption_mode) { - mz_stream_wzaes *wzaes = (mz_stream_wzaes *)stream; - wzaes->encryption_mode = encryption_mode; -} - -int32_t mz_stream_wzaes_get_prop_int64(void *stream, int32_t prop, int64_t *value) { - mz_stream_wzaes *wzaes = (mz_stream_wzaes *)stream; - switch (prop) { - case MZ_STREAM_PROP_TOTAL_IN: - *value = wzaes->total_in; - break; - case MZ_STREAM_PROP_TOTAL_OUT: - *value = wzaes->total_out; - break; - case MZ_STREAM_PROP_TOTAL_IN_MAX: - *value = wzaes->max_total_in; - break; - case MZ_STREAM_PROP_HEADER_SIZE: - *value = MZ_AES_SALT_LENGTH((int64_t)wzaes->encryption_mode) + MZ_AES_PW_VERIFY_SIZE; - break; - case MZ_STREAM_PROP_FOOTER_SIZE: - *value = MZ_AES_AUTHCODE_SIZE; - break; - default: - return MZ_EXIST_ERROR; - } - return MZ_OK; -} - -int32_t mz_stream_wzaes_set_prop_int64(void *stream, int32_t prop, int64_t value) { - mz_stream_wzaes *wzaes = (mz_stream_wzaes *)stream; - switch (prop) { - case MZ_STREAM_PROP_TOTAL_IN_MAX: - wzaes->max_total_in = value; - break; - default: - return MZ_EXIST_ERROR; - } - return MZ_OK; -} - -void *mz_stream_wzaes_create(void **stream) { - mz_stream_wzaes *wzaes = NULL; - - wzaes = (mz_stream_wzaes *)calloc(1, sizeof(mz_stream_wzaes)); - if (wzaes) { - wzaes->stream.vtbl = &mz_stream_wzaes_vtbl; - wzaes->encryption_mode = MZ_AES_ENCRYPTION_MODE_256; - - mz_crypt_hmac_create(&wzaes->hmac); - mz_crypt_aes_create(&wzaes->aes); - } - if (stream) - *stream = wzaes; - - return wzaes; -} - -void mz_stream_wzaes_delete(void **stream) { - mz_stream_wzaes *wzaes = NULL; - if (!stream) - return; - wzaes = (mz_stream_wzaes *)*stream; - if (wzaes) { - mz_crypt_aes_delete(&wzaes->aes); - mz_crypt_hmac_delete(&wzaes->hmac); - free(wzaes); - } - *stream = NULL; -} - -void *mz_stream_wzaes_get_interface(void) { - return (void *)&mz_stream_wzaes_vtbl; -} diff --git a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm_wzaes.h b/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm_wzaes.h deleted file mode 100644 index 5163c80..0000000 --- a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm_wzaes.h +++ /dev/null @@ -1,46 +0,0 @@ -/* mz_strm_wzaes.h -- Stream for WinZIP AES encryption - part of the minizip-ng project - - Copyright (C) Nathan Moinvaziri - https://github.com/zlib-ng/minizip-ng - - This program is distributed under the terms of the same license as zlib. - See the accompanying LICENSE file for the full text of the license. -*/ - -#ifndef MZ_STREAM_WZAES_SHA1_H -#define MZ_STREAM_WZAES_SHA1_H - -#ifdef __cplusplus -extern "C" { -#endif - -/***************************************************************************/ - -int32_t mz_stream_wzaes_open(void *stream, const char *filename, int32_t mode); -int32_t mz_stream_wzaes_is_open(void *stream); -int32_t mz_stream_wzaes_read(void *stream, void *buf, int32_t size); -int32_t mz_stream_wzaes_write(void *stream, const void *buf, int32_t size); -int64_t mz_stream_wzaes_tell(void *stream); -int32_t mz_stream_wzaes_seek(void *stream, int64_t offset, int32_t origin); -int32_t mz_stream_wzaes_close(void *stream); -int32_t mz_stream_wzaes_error(void *stream); - -void mz_stream_wzaes_set_password(void *stream, const char *password); -void mz_stream_wzaes_set_encryption_mode(void *stream, int16_t encryption_mode); - -int32_t mz_stream_wzaes_get_prop_int64(void *stream, int32_t prop, int64_t *value); -int32_t mz_stream_wzaes_set_prop_int64(void *stream, int32_t prop, int64_t value); - -void* mz_stream_wzaes_create(void **stream); -void mz_stream_wzaes_delete(void **stream); - -void* mz_stream_wzaes_get_interface(void); - -/***************************************************************************/ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm_zlib.c b/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm_zlib.c deleted file mode 100644 index b7ac4d1..0000000 --- a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm_zlib.c +++ /dev/null @@ -1,389 +0,0 @@ -/* mz_strm_zlib.c -- Stream for zlib inflate/deflate - part of the minizip-ng project - - Copyright (C) Nathan Moinvaziri - https://github.com/zlib-ng/minizip-ng - - This program is distributed under the terms of the same license as zlib. - See the accompanying LICENSE file for the full text of the license. -*/ - -#include "mz.h" -#include "mz_strm.h" -#include "mz_strm_zlib.h" - -#if !defined(ZLIB_COMPAT) -# include "zlib-ng.h" -#else -# include "zlib.h" -#endif - -/***************************************************************************/ - -#if !defined(ZLIB_COMPAT) -# define ZLIB_PREFIX(x) zng_ ## x - typedef zng_stream zlib_stream; -#else -# define ZLIB_PREFIX(x) x - typedef z_stream zlib_stream; -#endif - -#if !defined(DEF_MEM_LEVEL) -# if MAX_MEM_LEVEL >= 8 -# define DEF_MEM_LEVEL 8 -# else -# define DEF_MEM_LEVEL MAX_MEM_LEVEL -# endif -#endif - -/***************************************************************************/ - -static mz_stream_vtbl mz_stream_zlib_vtbl = { - mz_stream_zlib_open, - mz_stream_zlib_is_open, - mz_stream_zlib_read, - mz_stream_zlib_write, - mz_stream_zlib_tell, - mz_stream_zlib_seek, - mz_stream_zlib_close, - mz_stream_zlib_error, - mz_stream_zlib_create, - mz_stream_zlib_delete, - mz_stream_zlib_get_prop_int64, - mz_stream_zlib_set_prop_int64 -}; - -/***************************************************************************/ - -typedef struct mz_stream_zlib_s { - mz_stream stream; - zlib_stream zstream; - uint8_t buffer[INT16_MAX]; - int32_t buffer_len; - int64_t total_in; - int64_t total_out; - int64_t max_total_in; - int8_t initialized; - int16_t level; - int32_t window_bits; - int32_t mode; - int32_t error; -} mz_stream_zlib; - -/***************************************************************************/ - -int32_t mz_stream_zlib_open(void *stream, const char *path, int32_t mode) { - mz_stream_zlib *zlib = (mz_stream_zlib *)stream; - - MZ_UNUSED(path); - - zlib->zstream.data_type = Z_BINARY; - zlib->zstream.zalloc = Z_NULL; - zlib->zstream.zfree = Z_NULL; - zlib->zstream.opaque = Z_NULL; - zlib->zstream.total_in = 0; - zlib->zstream.total_out = 0; - - zlib->total_in = 0; - zlib->total_out = 0; - - if (mode & MZ_OPEN_MODE_WRITE) { -#ifdef MZ_ZIP_NO_COMPRESSION - return MZ_SUPPORT_ERROR; -#else - zlib->zstream.next_out = zlib->buffer; - zlib->zstream.avail_out = sizeof(zlib->buffer); - - zlib->error = ZLIB_PREFIX(deflateInit2)(&zlib->zstream, (int8_t)zlib->level, Z_DEFLATED, - zlib->window_bits, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY); -#endif - } else if (mode & MZ_OPEN_MODE_READ) { -#ifdef MZ_ZIP_NO_DECOMPRESSION - return MZ_SUPPORT_ERROR; -#else - zlib->zstream.next_in = zlib->buffer; - zlib->zstream.avail_in = 0; - - zlib->error = ZLIB_PREFIX(inflateInit2)(&zlib->zstream, zlib->window_bits); -#endif - } - - if (zlib->error != Z_OK) - return MZ_OPEN_ERROR; - - zlib->initialized = 1; - zlib->mode = mode; - return MZ_OK; -} - -int32_t mz_stream_zlib_is_open(void *stream) { - mz_stream_zlib *zlib = (mz_stream_zlib *)stream; - if (zlib->initialized != 1) - return MZ_OPEN_ERROR; - return MZ_OK; -} - -int32_t mz_stream_zlib_read(void *stream, void *buf, int32_t size) { -#ifdef MZ_ZIP_NO_DECOMPRESSION - MZ_UNUSED(stream); - MZ_UNUSED(buf); - MZ_UNUSED(size); - return MZ_SUPPORT_ERROR; -#else - mz_stream_zlib *zlib = (mz_stream_zlib *)stream; - uint64_t total_in_before = 0; - uint64_t total_in_after = 0; - uint64_t total_out_before = 0; - uint64_t total_out_after = 0; - uint32_t total_in = 0; - uint32_t total_out = 0; - uint32_t in_bytes = 0; - uint32_t out_bytes = 0; - int32_t bytes_to_read = sizeof(zlib->buffer); - int32_t read = 0; - int32_t err = Z_OK; - - zlib->zstream.next_out = (Bytef *)buf; - zlib->zstream.avail_out = (uInt)size; - - do { - if (zlib->zstream.avail_in == 0) { - if (zlib->max_total_in > 0) { - if ((int64_t)bytes_to_read > (zlib->max_total_in - zlib->total_in)) - bytes_to_read = (int32_t)(zlib->max_total_in - zlib->total_in); - } - - read = mz_stream_read(zlib->stream.base, zlib->buffer, bytes_to_read); - - if (read < 0) - return read; - - zlib->zstream.next_in = zlib->buffer; - zlib->zstream.avail_in = read; - } - - total_in_before = zlib->zstream.avail_in; - total_out_before = zlib->zstream.total_out; - - err = ZLIB_PREFIX(inflate)(&zlib->zstream, Z_SYNC_FLUSH); - if ((err >= Z_OK) && (zlib->zstream.msg)) { - zlib->error = Z_DATA_ERROR; - break; - } - - total_in_after = zlib->zstream.avail_in; - total_out_after = zlib->zstream.total_out; - - in_bytes = (uint32_t)(total_in_before - total_in_after); - out_bytes = (uint32_t)(total_out_after - total_out_before); - - total_in += in_bytes; - total_out += out_bytes; - - zlib->total_in += in_bytes; - zlib->total_out += out_bytes; - - if (err == Z_STREAM_END) - break; - if (err != Z_OK) { - zlib->error = err; - break; - } - } while (zlib->zstream.avail_out > 0); - - if (zlib->error != 0) { - /* Zlib errors are compatible with MZ */ - return zlib->error; - } - - return total_out; -#endif -} - -#ifndef MZ_ZIP_NO_COMPRESSION -static int32_t mz_stream_zlib_flush(void *stream) { - mz_stream_zlib *zlib = (mz_stream_zlib *)stream; - if (mz_stream_write(zlib->stream.base, zlib->buffer, zlib->buffer_len) != zlib->buffer_len) - return MZ_WRITE_ERROR; - return MZ_OK; -} - -static int32_t mz_stream_zlib_deflate(void *stream, int flush) { - mz_stream_zlib *zlib = (mz_stream_zlib *)stream; - uint64_t total_out_before = 0; - uint64_t total_out_after = 0; - int32_t out_bytes = 0; - int32_t err = Z_OK; - - do { - if (zlib->zstream.avail_out == 0) { - err = mz_stream_zlib_flush(zlib); - if (err != MZ_OK) - return err; - - zlib->zstream.avail_out = sizeof(zlib->buffer); - zlib->zstream.next_out = zlib->buffer; - - zlib->buffer_len = 0; - } - - total_out_before = zlib->zstream.total_out; - err = ZLIB_PREFIX(deflate)(&zlib->zstream, flush); - total_out_after = zlib->zstream.total_out; - - out_bytes = (uint32_t)(total_out_after - total_out_before); - - zlib->buffer_len += out_bytes; - zlib->total_out += out_bytes; - - if (err == Z_STREAM_END) - break; - if (err != Z_OK) { - zlib->error = err; - return MZ_DATA_ERROR; - } - } while ((zlib->zstream.avail_in > 0) || (flush == Z_FINISH && err == Z_OK)); - - return MZ_OK; -} -#endif - -int32_t mz_stream_zlib_write(void *stream, const void *buf, int32_t size) { -#ifdef MZ_ZIP_NO_COMPRESSION - MZ_UNUSED(stream); - MZ_UNUSED(buf); - MZ_UNUSED(size); - return MZ_SUPPORT_ERROR; -#else - mz_stream_zlib *zlib = (mz_stream_zlib *)stream; - int32_t err = MZ_OK; - - zlib->zstream.next_in = (Bytef *)(intptr_t)buf; - zlib->zstream.avail_in = (uInt)size; - - err = mz_stream_zlib_deflate(stream, Z_NO_FLUSH); - if (err != MZ_OK) { - return err; - } - - zlib->total_in += size; - return size; -#endif -} - -int64_t mz_stream_zlib_tell(void *stream) { - MZ_UNUSED(stream); - - return MZ_TELL_ERROR; -} - -int32_t mz_stream_zlib_seek(void *stream, int64_t offset, int32_t origin) { - MZ_UNUSED(stream); - MZ_UNUSED(offset); - MZ_UNUSED(origin); - - return MZ_SEEK_ERROR; -} - -int32_t mz_stream_zlib_close(void *stream) { - mz_stream_zlib *zlib = (mz_stream_zlib *)stream; - - if (zlib->mode & MZ_OPEN_MODE_WRITE) { -#ifdef MZ_ZIP_NO_COMPRESSION - return MZ_SUPPORT_ERROR; -#else - mz_stream_zlib_deflate(stream, Z_FINISH); - mz_stream_zlib_flush(stream); - - ZLIB_PREFIX(deflateEnd)(&zlib->zstream); -#endif - } else if (zlib->mode & MZ_OPEN_MODE_READ) { -#ifdef MZ_ZIP_NO_DECOMPRESSION - return MZ_SUPPORT_ERROR; -#else - ZLIB_PREFIX(inflateEnd)(&zlib->zstream); -#endif - } - - zlib->initialized = 0; - - if (zlib->error != Z_OK) - return MZ_CLOSE_ERROR; - return MZ_OK; -} - -int32_t mz_stream_zlib_error(void *stream) { - mz_stream_zlib *zlib = (mz_stream_zlib *)stream; - return zlib->error; -} - -int32_t mz_stream_zlib_get_prop_int64(void *stream, int32_t prop, int64_t *value) { - mz_stream_zlib *zlib = (mz_stream_zlib *)stream; - switch (prop) { - case MZ_STREAM_PROP_TOTAL_IN: - *value = zlib->total_in; - break; - case MZ_STREAM_PROP_TOTAL_IN_MAX: - *value = zlib->max_total_in; - break; - case MZ_STREAM_PROP_TOTAL_OUT: - *value = zlib->total_out; - break; - case MZ_STREAM_PROP_HEADER_SIZE: - *value = 0; - break; - case MZ_STREAM_PROP_COMPRESS_WINDOW: - *value = zlib->window_bits; - break; - default: - return MZ_EXIST_ERROR; - } - return MZ_OK; -} - -int32_t mz_stream_zlib_set_prop_int64(void *stream, int32_t prop, int64_t value) { - mz_stream_zlib *zlib = (mz_stream_zlib *)stream; - switch (prop) { - case MZ_STREAM_PROP_COMPRESS_LEVEL: - zlib->level = (int16_t)value; - break; - case MZ_STREAM_PROP_TOTAL_IN_MAX: - zlib->max_total_in = value; - break; - case MZ_STREAM_PROP_COMPRESS_WINDOW: - zlib->window_bits = (int32_t)value; - break; - default: - return MZ_EXIST_ERROR; - } - return MZ_OK; -} - -void *mz_stream_zlib_create(void **stream) { - mz_stream_zlib *zlib = NULL; - - zlib = (mz_stream_zlib *)calloc(1, sizeof(mz_stream_zlib)); - if (zlib) { - zlib->stream.vtbl = &mz_stream_zlib_vtbl; - zlib->level = Z_DEFAULT_COMPRESSION; - zlib->window_bits = -MAX_WBITS; - } - if (stream) - *stream = zlib; - - return zlib; -} - -void mz_stream_zlib_delete(void **stream) { - mz_stream_zlib *zlib = NULL; - if (!stream) - return; - zlib = (mz_stream_zlib *)*stream; - if (zlib) - free(zlib); - *stream = NULL; -} - -void *mz_stream_zlib_get_interface(void) { - return (void *)&mz_stream_zlib_vtbl; -} diff --git a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm_zlib.h b/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm_zlib.h deleted file mode 100644 index 4bdcdf8..0000000 --- a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_strm_zlib.h +++ /dev/null @@ -1,43 +0,0 @@ -/* mz_strm_zlib.h -- Stream for zlib inflate/deflate - part of the minizip-ng project - - Copyright (C) Nathan Moinvaziri - https://github.com/zlib-ng/minizip-ng - - This program is distributed under the terms of the same license as zlib. - See the accompanying LICENSE file for the full text of the license. -*/ - -#ifndef MZ_STREAM_ZLIB_H -#define MZ_STREAM_ZLIB_H - -#ifdef __cplusplus -extern "C" { -#endif - -/***************************************************************************/ - -int32_t mz_stream_zlib_open(void *stream, const char *filename, int32_t mode); -int32_t mz_stream_zlib_is_open(void *stream); -int32_t mz_stream_zlib_read(void *stream, void *buf, int32_t size); -int32_t mz_stream_zlib_write(void *stream, const void *buf, int32_t size); -int64_t mz_stream_zlib_tell(void *stream); -int32_t mz_stream_zlib_seek(void *stream, int64_t offset, int32_t origin); -int32_t mz_stream_zlib_close(void *stream); -int32_t mz_stream_zlib_error(void *stream); - -int32_t mz_stream_zlib_get_prop_int64(void *stream, int32_t prop, int64_t *value); -int32_t mz_stream_zlib_set_prop_int64(void *stream, int32_t prop, int64_t value); - -void* mz_stream_zlib_create(void **stream); -void mz_stream_zlib_delete(void **stream); - -void* mz_stream_zlib_get_interface(void); - -/***************************************************************************/ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_zip.c b/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_zip.c deleted file mode 100644 index e80550f..0000000 --- a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_zip.c +++ /dev/null @@ -1,2782 +0,0 @@ -/* zip.c -- Zip manipulation - part of the minizip-ng project - - Copyright (C) Nathan Moinvaziri - https://github.com/zlib-ng/minizip-ng - Copyright (C) 2009-2010 Mathias Svensson - Modifications for Zip64 support - http://result42.com - Copyright (C) 2007-2008 Even Rouault - Modifications of Unzip for Zip64 - Copyright (C) 1998-2010 Gilles Vollant - https://www.winimage.com/zLibDll/minizip.html - - This program is distributed under the terms of the same license as zlib. - See the accompanying LICENSE file for the full text of the license. -*/ - -#include "mz.h" -#include "mz_crypt.h" -#include "mz_strm.h" -#ifdef HAVE_BZIP2 -# include "mz_strm_bzip.h" -#endif -#ifdef HAVE_LIBCOMP -# include "mz_strm_libcomp.h" -#endif -#ifdef HAVE_LZMA -# include "mz_strm_lzma.h" -#endif -#include "mz_strm_mem.h" -#ifdef HAVE_PKCRYPT -# include "mz_strm_pkcrypt.h" -#endif -#ifdef HAVE_WZAES -# include "mz_strm_wzaes.h" -#endif -#ifdef HAVE_ZLIB -# include "mz_strm_zlib.h" -#endif -#ifdef HAVE_ZSTD -# include "mz_strm_zstd.h" -#endif - -#include "mz_zip.h" - -#include /* tolower */ -#include /* snprintf */ - -#if defined(_MSC_VER) || defined(__MINGW32__) -# define localtime_r(t1, t2) (localtime_s(t2, t1) == 0 ? t1 : NULL) -#endif -#if defined(_MSC_VER) && (_MSC_VER < 1900) -# define snprintf _snprintf -#endif - -/***************************************************************************/ - -#define MZ_ZIP_MAGIC_LOCALHEADER (0x04034b50) -#define MZ_ZIP_MAGIC_LOCALHEADERU8 { 0x50, 0x4b, 0x03, 0x04 } -#define MZ_ZIP_MAGIC_CENTRALHEADER (0x02014b50) -#define MZ_ZIP_MAGIC_CENTRALHEADERU8 { 0x50, 0x4b, 0x01, 0x02 } -#define MZ_ZIP_MAGIC_ENDHEADER (0x06054b50) -#define MZ_ZIP_MAGIC_ENDHEADERU8 { 0x50, 0x4b, 0x05, 0x06 } -#define MZ_ZIP_MAGIC_ENDHEADER64 (0x06064b50) -#define MZ_ZIP_MAGIC_ENDLOCHEADER64 (0x07064b50) -#define MZ_ZIP_MAGIC_DATADESCRIPTOR (0x08074b50) -#define MZ_ZIP_MAGIC_DATADESCRIPTORU8 { 0x50, 0x4b, 0x07, 0x08 } - -#define MZ_ZIP_SIZE_LD_ITEM (30) -#define MZ_ZIP_SIZE_CD_ITEM (46) -#define MZ_ZIP_SIZE_CD_LOCATOR64 (20) -#define MZ_ZIP_SIZE_MAX_DATA_DESCRIPTOR (24) - -#define MZ_ZIP_OFFSET_CRC_SIZES (14) -#define MZ_ZIP_UNCOMPR_SIZE64_CUSHION (2 * 1024 * 1024) - -#ifndef MZ_ZIP_EOCD_MAX_BACK -#define MZ_ZIP_EOCD_MAX_BACK (1 << 20) -#endif - -/***************************************************************************/ - -typedef struct mz_zip_s { - mz_zip_file file_info; - mz_zip_file local_file_info; - - void *stream; /* main stream */ - void *cd_stream; /* pointer to the stream with the cd */ - void *cd_mem_stream; /* memory stream for central directory */ - void *compress_stream; /* compression stream */ - void *crypt_stream; /* encryption stream */ - void *file_info_stream; /* memory stream for storing file info */ - void *local_file_info_stream; /* memory stream for storing local file info */ - - int32_t open_mode; - uint8_t recover; - uint8_t data_descriptor; - - uint32_t disk_number_with_cd; /* number of the disk with the central dir */ - int64_t disk_offset_shift; /* correction for zips that have wrong offset start of cd */ - - int64_t cd_start_pos; /* pos of the first file in the central dir stream */ - int64_t cd_current_pos; /* pos of the current file in the central dir */ - int64_t cd_offset; /* offset of start of central directory */ - int64_t cd_size; /* size of the central directory */ - uint32_t cd_signature; /* signature of central directory */ - - uint8_t entry_scanned; /* entry header information read ok */ - uint8_t entry_opened; /* entry is open for read/write */ - uint8_t entry_raw; /* entry opened with raw mode */ - uint32_t entry_crc32; /* entry crc32 */ - - uint64_t number_entry; - - uint16_t version_madeby; - char *comment; -} mz_zip; - -/***************************************************************************/ - -#if 0 -# define mz_zip_print printf -#else -# define mz_zip_print(fmt, ...) -#endif - -/***************************************************************************/ - -/* Locate the end of central directory */ -static int32_t mz_zip_search_eocd(void *stream, int64_t *central_pos) { - int64_t file_size = 0; - int64_t max_back = MZ_ZIP_EOCD_MAX_BACK; - uint8_t find[4] = MZ_ZIP_MAGIC_ENDHEADERU8; - int32_t err = MZ_OK; - - err = mz_stream_seek(stream, 0, MZ_SEEK_END); - if (err != MZ_OK) - return err; - - file_size = mz_stream_tell(stream); - - if (max_back <= 0 || max_back > file_size) - max_back = file_size; - - return mz_stream_find_reverse(stream, (const void *)find, sizeof(find), max_back, central_pos); -} - -/* Locate the end of central directory 64 of a zip file */ -static int32_t mz_zip_search_zip64_eocd(void *stream, const int64_t end_central_offset, int64_t *central_pos) { - int64_t offset = 0; - uint32_t value32 = 0; - int32_t err = MZ_OK; - - *central_pos = 0; - - /* Zip64 end of central directory locator */ - err = mz_stream_seek(stream, end_central_offset - MZ_ZIP_SIZE_CD_LOCATOR64, MZ_SEEK_SET); - /* Read locator signature */ - if (err == MZ_OK) { - err = mz_stream_read_uint32(stream, &value32); - if (value32 != MZ_ZIP_MAGIC_ENDLOCHEADER64) - err = MZ_FORMAT_ERROR; - } - /* Number of the disk with the start of the zip64 end of central directory */ - if (err == MZ_OK) - err = mz_stream_read_uint32(stream, &value32); - /* Relative offset of the zip64 end of central directory record8 */ - if (err == MZ_OK) - err = mz_stream_read_uint64(stream, (uint64_t *)&offset); - /* Total number of disks */ - if (err == MZ_OK) - err = mz_stream_read_uint32(stream, &value32); - /* Goto end of central directory record */ - if (err == MZ_OK) - err = mz_stream_seek(stream, (int64_t)offset, MZ_SEEK_SET); - /* The signature */ - if (err == MZ_OK) { - err = mz_stream_read_uint32(stream, &value32); - if (value32 != MZ_ZIP_MAGIC_ENDHEADER64) - err = MZ_FORMAT_ERROR; - } - - if (err == MZ_OK) - *central_pos = offset; - - return err; -} - -#ifdef HAVE_PKCRYPT -/* Get PKWARE traditional encryption verifier */ -static uint16_t mz_zip_get_pk_verify(uint32_t dos_date, uint64_t crc, uint16_t flag) -{ - /* Info-ZIP modification to ZipCrypto format: if bit 3 of the general - * purpose bit flag is set, it uses high byte of 16-bit File Time. */ - if (flag & MZ_ZIP_FLAG_DATA_DESCRIPTOR) - return ((dos_date >> 16) & 0xff) << 8 | ((dos_date >> 8) & 0xff); - return ((crc >> 16) & 0xff) << 8 | ((crc >> 24) & 0xff); -} -#endif - -/* Get info about the current file in the zip file */ -static int32_t mz_zip_entry_read_header(void *stream, uint8_t local, mz_zip_file *file_info, void *file_extra_stream) { - uint64_t ntfs_time = 0; - uint32_t reserved = 0; - uint32_t magic = 0; - uint32_t dos_date = 0; - uint32_t field_pos = 0; - uint16_t field_type = 0; - uint16_t field_length = 0; - uint32_t field_length_read = 0; - uint16_t ntfs_attrib_id = 0; - uint16_t ntfs_attrib_size = 0; - uint16_t linkname_size; - uint16_t value16 = 0; - uint32_t value32 = 0; - int64_t extrafield_pos = 0; - int64_t comment_pos = 0; - int64_t linkname_pos = 0; - int64_t saved_pos = 0; - int32_t err = MZ_OK; - char *linkname = NULL; - - memset(file_info, 0, sizeof(mz_zip_file)); - - /* Check the magic */ - err = mz_stream_read_uint32(stream, &magic); - if (err == MZ_END_OF_STREAM) - err = MZ_END_OF_LIST; - else if (magic == MZ_ZIP_MAGIC_ENDHEADER || magic == MZ_ZIP_MAGIC_ENDHEADER64) - err = MZ_END_OF_LIST; - else if ((local) && (magic != MZ_ZIP_MAGIC_LOCALHEADER)) - err = MZ_FORMAT_ERROR; - else if ((!local) && (magic != MZ_ZIP_MAGIC_CENTRALHEADER)) - err = MZ_FORMAT_ERROR; - - /* Read header fields */ - if (err == MZ_OK) { - if (!local) - err = mz_stream_read_uint16(stream, &file_info->version_madeby); - if (err == MZ_OK) - err = mz_stream_read_uint16(stream, &file_info->version_needed); - if (err == MZ_OK) - err = mz_stream_read_uint16(stream, &file_info->flag); - if (err == MZ_OK) - err = mz_stream_read_uint16(stream, &file_info->compression_method); - if (err == MZ_OK) { - err = mz_stream_read_uint32(stream, &dos_date); - file_info->modified_date = mz_zip_dosdate_to_time_t(dos_date); - } - if (err == MZ_OK) - err = mz_stream_read_uint32(stream, &file_info->crc); -#ifdef HAVE_PKCRYPT - if (err == MZ_OK && file_info->flag & MZ_ZIP_FLAG_ENCRYPTED) { - /* Use dos_date from header instead of derived from time in zip extensions */ - file_info->pk_verify = mz_zip_get_pk_verify(dos_date, file_info->crc, file_info->flag); - } -#endif - if (err == MZ_OK) { - err = mz_stream_read_uint32(stream, &value32); - file_info->compressed_size = value32; - } - if (err == MZ_OK) { - err = mz_stream_read_uint32(stream, &value32); - file_info->uncompressed_size = value32; - } - if (err == MZ_OK) - err = mz_stream_read_uint16(stream, &file_info->filename_size); - if (err == MZ_OK) - err = mz_stream_read_uint16(stream, &file_info->extrafield_size); - if (!local) { - if (err == MZ_OK) - err = mz_stream_read_uint16(stream, &file_info->comment_size); - if (err == MZ_OK) { - err = mz_stream_read_uint16(stream, &value16); - file_info->disk_number = value16; - } - if (err == MZ_OK) - err = mz_stream_read_uint16(stream, &file_info->internal_fa); - if (err == MZ_OK) - err = mz_stream_read_uint32(stream, &file_info->external_fa); - if (err == MZ_OK) { - err = mz_stream_read_uint32(stream, &value32); - file_info->disk_offset = value32; - } - } - } - - if (err == MZ_OK) - err = mz_stream_seek(file_extra_stream, 0, MZ_SEEK_SET); - - /* Copy variable length data to memory stream for later retrieval */ - if ((err == MZ_OK) && (file_info->filename_size > 0)) - err = mz_stream_copy(file_extra_stream, stream, file_info->filename_size); - mz_stream_write_uint8(file_extra_stream, 0); - extrafield_pos = mz_stream_tell(file_extra_stream); - - if ((err == MZ_OK) && (file_info->extrafield_size > 0)) - err = mz_stream_copy(file_extra_stream, stream, file_info->extrafield_size); - mz_stream_write_uint8(file_extra_stream, 0); - - comment_pos = mz_stream_tell(file_extra_stream); - if ((err == MZ_OK) && (file_info->comment_size > 0)) - err = mz_stream_copy(file_extra_stream, stream, file_info->comment_size); - mz_stream_write_uint8(file_extra_stream, 0); - - linkname_pos = mz_stream_tell(file_extra_stream); - /* Overwrite if we encounter UNIX1 extra block */ - mz_stream_write_uint8(file_extra_stream, 0); - - if ((err == MZ_OK) && (file_info->extrafield_size > 0)) { - /* Seek to and parse the extra field */ - err = mz_stream_seek(file_extra_stream, extrafield_pos, MZ_SEEK_SET); - - while ((err == MZ_OK) && (field_pos + 4 <= file_info->extrafield_size)) { - err = mz_zip_extrafield_read(file_extra_stream, &field_type, &field_length); - if (err != MZ_OK) - break; - field_pos += 4; - - /* Don't allow field length to exceed size of remaining extrafield */ - if (field_length > (file_info->extrafield_size - field_pos)) - field_length = (uint16_t)(file_info->extrafield_size - field_pos); - - /* Read ZIP64 extra field */ - if ((field_type == MZ_ZIP_EXTENSION_ZIP64) && (field_length >= 8)) { - if ((err == MZ_OK) && (file_info->uncompressed_size == UINT32_MAX)) { - err = mz_stream_read_int64(file_extra_stream, &file_info->uncompressed_size); - if (file_info->uncompressed_size < 0) - err = MZ_FORMAT_ERROR; - } - if ((err == MZ_OK) && (file_info->compressed_size == UINT32_MAX)) { - err = mz_stream_read_int64(file_extra_stream, &file_info->compressed_size); - if (file_info->compressed_size < 0) - err = MZ_FORMAT_ERROR; - } - if ((err == MZ_OK) && (file_info->disk_offset == UINT32_MAX)) { - err = mz_stream_read_int64(file_extra_stream, &file_info->disk_offset); - if (file_info->disk_offset < 0) - err = MZ_FORMAT_ERROR; - } - if ((err == MZ_OK) && (file_info->disk_number == UINT16_MAX)) - err = mz_stream_read_uint32(file_extra_stream, &file_info->disk_number); - } - /* Read NTFS extra field */ - else if ((field_type == MZ_ZIP_EXTENSION_NTFS) && (field_length > 4)) { - if (err == MZ_OK) - err = mz_stream_read_uint32(file_extra_stream, &reserved); - field_length_read = 4; - - while ((err == MZ_OK) && (field_length_read + 4 <= field_length)) { - err = mz_stream_read_uint16(file_extra_stream, &ntfs_attrib_id); - if (err == MZ_OK) - err = mz_stream_read_uint16(file_extra_stream, &ntfs_attrib_size); - field_length_read += 4; - - if ((err == MZ_OK) && (ntfs_attrib_id == 0x01) && (ntfs_attrib_size == 24)) { - err = mz_stream_read_uint64(file_extra_stream, &ntfs_time); - mz_zip_ntfs_to_unix_time(ntfs_time, &file_info->modified_date); - - if (err == MZ_OK) { - err = mz_stream_read_uint64(file_extra_stream, &ntfs_time); - mz_zip_ntfs_to_unix_time(ntfs_time, &file_info->accessed_date); - } - if (err == MZ_OK) { - err = mz_stream_read_uint64(file_extra_stream, &ntfs_time); - mz_zip_ntfs_to_unix_time(ntfs_time, &file_info->creation_date); - } - } else if ((err == MZ_OK) && (field_length_read + ntfs_attrib_size <= field_length)) { - err = mz_stream_seek(file_extra_stream, ntfs_attrib_size, MZ_SEEK_CUR); - } - - field_length_read += ntfs_attrib_size; - } - } - /* Read UNIX1 extra field */ - else if ((field_type == MZ_ZIP_EXTENSION_UNIX1) && (field_length >= 12)) { - if (err == MZ_OK) { - err = mz_stream_read_uint32(file_extra_stream, &value32); - if (err == MZ_OK && file_info->accessed_date == 0) - file_info->accessed_date = value32; - } - if (err == MZ_OK) { - err = mz_stream_read_uint32(file_extra_stream, &value32); - if (err == MZ_OK && file_info->modified_date == 0) - file_info->modified_date = value32; - } - if (err == MZ_OK) - err = mz_stream_read_uint16(file_extra_stream, &value16); /* User id */ - if (err == MZ_OK) - err = mz_stream_read_uint16(file_extra_stream, &value16); /* Group id */ - - /* Copy linkname to end of file extra stream so we can return null - terminated string */ - linkname_size = field_length - 12; - if ((err == MZ_OK) && (linkname_size > 0)) { - linkname = (char *)malloc(linkname_size); - if (linkname) { - if (mz_stream_read(file_extra_stream, linkname, linkname_size) != linkname_size) - err = MZ_READ_ERROR; - if (err == MZ_OK) { - saved_pos = mz_stream_tell(file_extra_stream); - - mz_stream_seek(file_extra_stream, linkname_pos, MZ_SEEK_SET); - mz_stream_write(file_extra_stream, linkname, linkname_size); - mz_stream_write_uint8(file_extra_stream, 0); - - mz_stream_seek(file_extra_stream, saved_pos, MZ_SEEK_SET); - } - free(linkname); - } - } - } -#ifdef HAVE_WZAES - /* Read AES extra field */ - else if ((field_type == MZ_ZIP_EXTENSION_AES) && (field_length == 7)) { - uint8_t value8 = 0; - /* Verify version info */ - err = mz_stream_read_uint16(file_extra_stream, &value16); - /* Support AE-1 and AE-2 */ - if (value16 != 1 && value16 != 2) - err = MZ_FORMAT_ERROR; - file_info->aes_version = value16; - if (err == MZ_OK) - err = mz_stream_read_uint8(file_extra_stream, &value8); - if ((char)value8 != 'A') - err = MZ_FORMAT_ERROR; - if (err == MZ_OK) - err = mz_stream_read_uint8(file_extra_stream, &value8); - if ((char)value8 != 'E') - err = MZ_FORMAT_ERROR; - /* Get AES encryption strength and actual compression method */ - if (err == MZ_OK) { - err = mz_stream_read_uint8(file_extra_stream, &value8); - file_info->aes_encryption_mode = value8; - } - if (err == MZ_OK) { - err = mz_stream_read_uint16(file_extra_stream, &value16); - file_info->compression_method = value16; - } - } -#endif - else if (field_length > 0) { - err = mz_stream_seek(file_extra_stream, field_length, MZ_SEEK_CUR); - } - - field_pos += field_length; - } - } - - /* Get pointers to variable length data */ - mz_stream_mem_get_buffer(file_extra_stream, (const void **)&file_info->filename); - mz_stream_mem_get_buffer_at(file_extra_stream, extrafield_pos, (const void **)&file_info->extrafield); - mz_stream_mem_get_buffer_at(file_extra_stream, comment_pos, (const void **)&file_info->comment); - mz_stream_mem_get_buffer_at(file_extra_stream, linkname_pos, (const void **)&file_info->linkname); - - /* Set to empty string just in-case */ - if (!file_info->filename) - file_info->filename = ""; - if (!file_info->extrafield) - file_info->extrafield_size = 0; - if (!file_info->comment) - file_info->comment = ""; - if (!file_info->linkname) - file_info->linkname = ""; - - if (err == MZ_OK) { - mz_zip_print("Zip - Entry - Read header - %s (local %" PRId8 ")\n", - file_info->filename, local); - mz_zip_print("Zip - Entry - Read header compress (ucs %" PRId64 " cs %" PRId64 " crc 0x%08" PRIx32 ")\n", - file_info->uncompressed_size, file_info->compressed_size, file_info->crc); - if (!local) { - mz_zip_print("Zip - Entry - Read header disk (disk %" PRIu32 " offset %" PRId64 ")\n", - file_info->disk_number, file_info->disk_offset); - } - mz_zip_print("Zip - Entry - Read header variable (fnl %" PRId32 " efs %" PRId32 " cms %" PRId32 ")\n", - file_info->filename_size, file_info->extrafield_size, file_info->comment_size); - } - - return err; -} - -static int32_t mz_zip_entry_read_descriptor(void *stream, uint8_t zip64, uint32_t *crc32, int64_t *compressed_size, int64_t *uncompressed_size) { - uint32_t value32 = 0; - int64_t value64 = 0; - int32_t err = MZ_OK; - - err = mz_stream_read_uint32(stream, &value32); - if (value32 != MZ_ZIP_MAGIC_DATADESCRIPTOR) - err = MZ_FORMAT_ERROR; - if (err == MZ_OK) - err = mz_stream_read_uint32(stream, &value32); - if (err == MZ_OK && crc32) - *crc32 = value32; - if (err == MZ_OK) { - /* If zip 64 extension is enabled then read as 8 byte */ - if (!zip64) { - err = mz_stream_read_uint32(stream, &value32); - value64 = value32; - } else { - err = mz_stream_read_int64(stream, &value64); - if (value64 < 0) - err = MZ_FORMAT_ERROR; - } - if (err == MZ_OK && compressed_size) - *compressed_size = value64; - } - if (err == MZ_OK) { - if (!zip64) { - err = mz_stream_read_uint32(stream, &value32); - value64 = value32; - } else { - err = mz_stream_read_int64(stream, &value64); - if (value64 < 0) - err = MZ_FORMAT_ERROR; - } - if (err == MZ_OK && uncompressed_size) - *uncompressed_size = value64; - } - - return err; -} - -static int32_t mz_zip_entry_write_crc_sizes(void *stream, uint8_t zip64, uint8_t mask, mz_zip_file *file_info) { - int32_t err = MZ_OK; - - if (mask) - err = mz_stream_write_uint32(stream, 0); - else - err = mz_stream_write_uint32(stream, file_info->crc); /* crc */ - - /* For backwards-compatibility with older zip applications we set all sizes to UINT32_MAX - * when zip64 is needed, instead of only setting sizes larger than UINT32_MAX. */ - - if (err == MZ_OK) { - if (zip64) /* compr size */ - err = mz_stream_write_uint32(stream, UINT32_MAX); - else - err = mz_stream_write_uint32(stream, (uint32_t)file_info->compressed_size); - } - if (err == MZ_OK) { - if (mask) /* uncompr size */ - err = mz_stream_write_uint32(stream, 0); - else if (zip64) - err = mz_stream_write_uint32(stream, UINT32_MAX); - else - err = mz_stream_write_uint32(stream, (uint32_t)file_info->uncompressed_size); - } - return err; -} - -static int32_t mz_zip_entry_needs_zip64(mz_zip_file *file_info, uint8_t local, uint8_t *zip64) { - uint32_t max_uncompressed_size = UINT32_MAX; - uint8_t needs_zip64 = 0; - - if (!zip64) - return MZ_PARAM_ERROR; - - *zip64 = 0; - - if (local) { - /* At local header we might not know yet whether compressed size will overflow unsigned - 32-bit integer which might happen for high entropy data so we give it some cushion */ - - max_uncompressed_size -= MZ_ZIP_UNCOMPR_SIZE64_CUSHION; - } - - needs_zip64 = (file_info->uncompressed_size >= max_uncompressed_size) || - (file_info->compressed_size >= UINT32_MAX); - - if (!local) { - /* Disk offset and number only used in central directory header */ - needs_zip64 |= (file_info->disk_offset >= UINT32_MAX) || - (file_info->disk_number >= UINT16_MAX); - } - - if (file_info->zip64 == MZ_ZIP64_AUTO) { - /* If uncompressed size is unknown, assume zip64 for 64-bit data descriptors */ - if (local && file_info->uncompressed_size == 0) { - /* Don't use zip64 for local header directory entries */ - if (mz_zip_attrib_is_dir(file_info->external_fa, file_info->version_madeby) != MZ_OK) { - *zip64 = 1; - } - } - *zip64 |= needs_zip64; - } else if (file_info->zip64 == MZ_ZIP64_FORCE) { - *zip64 = 1; - } else if (file_info->zip64 == MZ_ZIP64_DISABLE) { - /* Zip64 extension is required to zip file */ - if (needs_zip64) - return MZ_PARAM_ERROR; - } - - return MZ_OK; -} - -static int32_t mz_zip_entry_write_header(void *stream, uint8_t local, mz_zip_file *file_info) { - uint64_t ntfs_time = 0; - uint32_t reserved = 0; - uint32_t dos_date = 0; - uint16_t extrafield_size = 0; - uint16_t field_type = 0; - uint16_t field_length = 0; - uint16_t field_length_zip64 = 0; - uint16_t field_length_ntfs = 0; - uint16_t field_length_aes = 0; - uint16_t field_length_unix1 = 0; - uint16_t filename_size = 0; - uint16_t filename_length = 0; - uint16_t linkname_size = 0; - uint16_t version_needed = 0; - int32_t comment_size = 0; - int32_t err = MZ_OK; - int32_t err_mem = MZ_OK; - uint8_t zip64 = 0; - uint8_t skip_aes = 0; - uint8_t mask = 0; - uint8_t write_end_slash = 0; - const char *filename = NULL; - char masked_name[64]; - void *file_extra_stream = NULL; - - if (!file_info) - return MZ_PARAM_ERROR; - - if ((local) && (file_info->flag & MZ_ZIP_FLAG_MASK_LOCAL_INFO)) - mask = 1; - - /* Determine if zip64 extra field is necessary */ - err = mz_zip_entry_needs_zip64(file_info, local, &zip64); - if (err != MZ_OK) - return err; - - /* Start calculating extra field sizes */ - if (zip64) { - /* Both compressed and uncompressed sizes must be included (at least in local header) */ - field_length_zip64 = 8 + 8; - if ((!local) && (file_info->disk_offset >= UINT32_MAX)) - field_length_zip64 += 8; - - extrafield_size += 4; - extrafield_size += field_length_zip64; - } - - /* Calculate extra field size and check for duplicates */ - if (file_info->extrafield_size > 0) { - mz_stream_mem_create(&file_extra_stream); - mz_stream_mem_set_buffer(file_extra_stream, (void *)file_info->extrafield, - file_info->extrafield_size); - - do { - err_mem = mz_stream_read_uint16(file_extra_stream, &field_type); - if (err_mem == MZ_OK) - err_mem = mz_stream_read_uint16(file_extra_stream, &field_length); - if (err_mem != MZ_OK) - break; - - /* Prefer incoming aes extensions over ours */ - if (field_type == MZ_ZIP_EXTENSION_AES) - skip_aes = 1; - - /* Prefer our zip64, ntfs, unix1 extension over incoming */ - if (field_type != MZ_ZIP_EXTENSION_ZIP64 && field_type != MZ_ZIP_EXTENSION_NTFS && - field_type != MZ_ZIP_EXTENSION_UNIX1) - extrafield_size += 4 + field_length; - - if (err_mem == MZ_OK) - err_mem = mz_stream_seek(file_extra_stream, field_length, MZ_SEEK_CUR); - } while (err_mem == MZ_OK); - } - -#ifdef HAVE_WZAES - if (!skip_aes) { - if ((file_info->flag & MZ_ZIP_FLAG_ENCRYPTED) && (file_info->aes_version)) { - field_length_aes = 1 + 1 + 1 + 2 + 2; - extrafield_size += 4 + field_length_aes; - } - } -#else - MZ_UNUSED(field_length_aes); - MZ_UNUSED(skip_aes); -#endif - /* NTFS timestamps */ - if ((file_info->modified_date != 0) && - (file_info->accessed_date != 0) && - (file_info->creation_date != 0) && (!mask)) { - field_length_ntfs = 8 + 8 + 8 + 4 + 2 + 2; - extrafield_size += 4 + field_length_ntfs; - } - - /* Unix1 symbolic links */ - if (file_info->linkname && *file_info->linkname != 0) { - linkname_size = (uint16_t)strlen(file_info->linkname); - field_length_unix1 = 12 + linkname_size; - extrafield_size += 4 + field_length_unix1; - } - - if (local) - err = mz_stream_write_uint32(stream, MZ_ZIP_MAGIC_LOCALHEADER); - else { - err = mz_stream_write_uint32(stream, MZ_ZIP_MAGIC_CENTRALHEADER); - if (err == MZ_OK) - err = mz_stream_write_uint16(stream, file_info->version_madeby); - } - - /* Calculate version needed to extract */ - if (err == MZ_OK) { - version_needed = file_info->version_needed; - if (version_needed == 0) { - version_needed = 20; - if (zip64) - version_needed = 45; -#ifdef HAVE_WZAES - if ((file_info->flag & MZ_ZIP_FLAG_ENCRYPTED) && (file_info->aes_version)) - version_needed = 51; -#endif -#if defined(HAVE_LZMA) || defined(HAVE_LIBCOMP) - if ((file_info->compression_method == MZ_COMPRESS_METHOD_LZMA) || - (file_info->compression_method == MZ_COMPRESS_METHOD_XZ)) - version_needed = 63; -#endif - } - err = mz_stream_write_uint16(stream, version_needed); - } - if (err == MZ_OK) - err = mz_stream_write_uint16(stream, file_info->flag); - if (err == MZ_OK) { -#ifdef HAVE_WZAES - if ((file_info->flag & MZ_ZIP_FLAG_ENCRYPTED) && (file_info->aes_version)) - err = mz_stream_write_uint16(stream, MZ_COMPRESS_METHOD_AES); - else -#endif - err = mz_stream_write_uint16(stream, file_info->compression_method); - } - if (err == MZ_OK) { - if (file_info->modified_date != 0 && !mask) - dos_date = mz_zip_time_t_to_dos_date(file_info->modified_date); - err = mz_stream_write_uint32(stream, dos_date); - } - - if (err == MZ_OK) - err = mz_zip_entry_write_crc_sizes(stream, zip64, mask, file_info); - - if (mask) { - snprintf(masked_name, sizeof(masked_name), "%" PRIx32 "_%" PRIx64, - file_info->disk_number, file_info->disk_offset); - filename = masked_name; - } else { - filename = file_info->filename; - } - - filename_length = (uint16_t)strlen(filename); - filename_size += filename_length; - - if ((mz_zip_attrib_is_dir(file_info->external_fa, file_info->version_madeby) == MZ_OK) && - ((filename[filename_length - 1] != '/') && (filename[filename_length - 1] != '\\'))) { - filename_size += 1; - write_end_slash = 1; - } - - if (err == MZ_OK) - err = mz_stream_write_uint16(stream, filename_size); - if (err == MZ_OK) - err = mz_stream_write_uint16(stream, extrafield_size); - - if (!local) { - if (file_info->comment) { - comment_size = (int32_t)strlen(file_info->comment); - if (comment_size > UINT16_MAX) - comment_size = UINT16_MAX; - } - if (err == MZ_OK) - err = mz_stream_write_uint16(stream, (uint16_t)comment_size); - if (err == MZ_OK) - err = mz_stream_write_uint16(stream, (uint16_t)file_info->disk_number); - if (err == MZ_OK) - err = mz_stream_write_uint16(stream, file_info->internal_fa); - if (err == MZ_OK) - err = mz_stream_write_uint32(stream, file_info->external_fa); - if (err == MZ_OK) { - if (file_info->disk_offset >= UINT32_MAX) - err = mz_stream_write_uint32(stream, UINT32_MAX); - else - err = mz_stream_write_uint32(stream, (uint32_t)file_info->disk_offset); - } - } - - if (err == MZ_OK) { - const char *backslash = NULL; - const char *next = filename; - int32_t left = filename_length; - - /* Ensure all slashes are written as forward slashes according to 4.4.17.1 */ - while ((err == MZ_OK) && (backslash = strrchr(next, '\\'))) { - int32_t part_length = (int32_t)(backslash - next); - - if (mz_stream_write(stream, next, part_length) != part_length || - mz_stream_write(stream, "/", 1) != 1) - err = MZ_WRITE_ERROR; - - left -= part_length + 1; - next = backslash + 1; - } - - if (err == MZ_OK && left > 0) { - if (mz_stream_write(stream, next, left) != left) - err = MZ_WRITE_ERROR; - } - - /* Ensure that directories have a slash appended to them for compatibility */ - if (err == MZ_OK && write_end_slash) - err = mz_stream_write_uint8(stream, '/'); - } - - /* Write ZIP64 extra field first so we can update sizes later if data descriptor not used */ - if ((err == MZ_OK) && (zip64)) { - err = mz_zip_extrafield_write(stream, MZ_ZIP_EXTENSION_ZIP64, field_length_zip64); - if (err == MZ_OK) { - if (mask) - err = mz_stream_write_int64(stream, 0); - else - err = mz_stream_write_int64(stream, file_info->uncompressed_size); - } - if (err == MZ_OK) - err = mz_stream_write_int64(stream, file_info->compressed_size); - if ((err == MZ_OK) && (!local) && (file_info->disk_offset >= UINT32_MAX)) - err = mz_stream_write_int64(stream, file_info->disk_offset); - if ((err == MZ_OK) && (!local) && (file_info->disk_number >= UINT16_MAX)) - err = mz_stream_write_uint32(stream, file_info->disk_number); - } - /* Write NTFS extra field */ - if ((err == MZ_OK) && (field_length_ntfs > 0)) { - err = mz_zip_extrafield_write(stream, MZ_ZIP_EXTENSION_NTFS, field_length_ntfs); - if (err == MZ_OK) - err = mz_stream_write_uint32(stream, reserved); - if (err == MZ_OK) - err = mz_stream_write_uint16(stream, 0x01); - if (err == MZ_OK) - err = mz_stream_write_uint16(stream, field_length_ntfs - 8); - if (err == MZ_OK) { - mz_zip_unix_to_ntfs_time(file_info->modified_date, &ntfs_time); - err = mz_stream_write_uint64(stream, ntfs_time); - } - if (err == MZ_OK) { - mz_zip_unix_to_ntfs_time(file_info->accessed_date, &ntfs_time); - err = mz_stream_write_uint64(stream, ntfs_time); - } - if (err == MZ_OK) { - mz_zip_unix_to_ntfs_time(file_info->creation_date, &ntfs_time); - err = mz_stream_write_uint64(stream, ntfs_time); - } - } - /* Write UNIX extra block extra field */ - if ((err == MZ_OK) && (field_length_unix1 > 0)) { - err = mz_zip_extrafield_write(stream, MZ_ZIP_EXTENSION_UNIX1, field_length_unix1); - if (err == MZ_OK) - err = mz_stream_write_uint32(stream, (uint32_t)file_info->accessed_date); - if (err == MZ_OK) - err = mz_stream_write_uint32(stream, (uint32_t)file_info->modified_date); - if (err == MZ_OK) /* User id */ - err = mz_stream_write_uint16(stream, 0); - if (err == MZ_OK) /* Group id */ - err = mz_stream_write_uint16(stream, 0); - if (err == MZ_OK && linkname_size > 0) { - if (mz_stream_write(stream, file_info->linkname, linkname_size) != linkname_size) - err = MZ_WRITE_ERROR; - } - } -#ifdef HAVE_WZAES - /* Write AES extra field */ - if ((err == MZ_OK) && (!skip_aes) && (file_info->flag & MZ_ZIP_FLAG_ENCRYPTED) && (file_info->aes_version)) { - err = mz_zip_extrafield_write(stream, MZ_ZIP_EXTENSION_AES, field_length_aes); - if (err == MZ_OK) - err = mz_stream_write_uint16(stream, file_info->aes_version); - if (err == MZ_OK) - err = mz_stream_write_uint8(stream, 'A'); - if (err == MZ_OK) - err = mz_stream_write_uint8(stream, 'E'); - if (err == MZ_OK) - err = mz_stream_write_uint8(stream, file_info->aes_encryption_mode); - if (err == MZ_OK) - err = mz_stream_write_uint16(stream, file_info->compression_method); - } -#endif - - if (file_info->extrafield_size > 0) { - err_mem = mz_stream_mem_seek(file_extra_stream, 0, MZ_SEEK_SET); - while (err == MZ_OK && err_mem == MZ_OK) { - err_mem = mz_stream_read_uint16(file_extra_stream, &field_type); - if (err_mem == MZ_OK) - err_mem = mz_stream_read_uint16(file_extra_stream, &field_length); - if (err_mem != MZ_OK) - break; - - /* Prefer our zip 64, ntfs, unix1 extensions over incoming */ - if (field_type == MZ_ZIP_EXTENSION_ZIP64 || field_type == MZ_ZIP_EXTENSION_NTFS || - field_type == MZ_ZIP_EXTENSION_UNIX1) { - err_mem = mz_stream_seek(file_extra_stream, field_length, MZ_SEEK_CUR); - continue; - } - - err = mz_stream_write_uint16(stream, field_type); - if (err == MZ_OK) - err = mz_stream_write_uint16(stream, field_length); - if (err == MZ_OK) - err = mz_stream_copy(stream, file_extra_stream, field_length); - } - - mz_stream_mem_delete(&file_extra_stream); - } - - if (err == MZ_OK && !local && file_info->comment) { - if (mz_stream_write(stream, file_info->comment, file_info->comment_size) != file_info->comment_size) - err = MZ_WRITE_ERROR; - } - - return err; -} - -static int32_t mz_zip_entry_write_descriptor(void *stream, uint8_t zip64, uint32_t crc32, int64_t compressed_size, int64_t uncompressed_size) { - int32_t err = MZ_OK; - - err = mz_stream_write_uint32(stream, MZ_ZIP_MAGIC_DATADESCRIPTOR); - if (err == MZ_OK) - err = mz_stream_write_uint32(stream, crc32); - - /* Store data descriptor as 8 bytes if zip 64 extension enabled */ - if (err == MZ_OK) { - /* Zip 64 extension is enabled when uncompressed size is > UINT32_MAX */ - if (!zip64) - err = mz_stream_write_uint32(stream, (uint32_t)compressed_size); - else - err = mz_stream_write_int64(stream, compressed_size); - } - if (err == MZ_OK) { - if (!zip64) - err = mz_stream_write_uint32(stream, (uint32_t)uncompressed_size); - else - err = mz_stream_write_int64(stream, uncompressed_size); - } - - return err; -} - -static int32_t mz_zip_read_cd(void *handle) { - mz_zip *zip = (mz_zip *)handle; - uint64_t number_entry_cd64 = 0; - uint64_t number_entry_cd = 0; - int64_t eocd_pos = 0; - int64_t eocd_pos64 = 0; - int64_t value64i = 0; - uint16_t value16 = 0; - uint32_t value32 = 0; - uint64_t value64 = 0; - uint16_t comment_size = 0; - int32_t comment_read = 0; - int32_t err = MZ_OK; - - if (!zip) - return MZ_PARAM_ERROR; - - /* Read and cache central directory records */ - err = mz_zip_search_eocd(zip->stream, &eocd_pos); - if (err == MZ_OK) { - /* The signature, already checked */ - err = mz_stream_read_uint32(zip->stream, &value32); - /* Number of this disk */ - if (err == MZ_OK) - err = mz_stream_read_uint16(zip->stream, &value16); - /* Number of the disk with the start of the central directory */ - if (err == MZ_OK) - err = mz_stream_read_uint16(zip->stream, &value16); - zip->disk_number_with_cd = value16; - /* Total number of entries in the central dir on this disk */ - if (err == MZ_OK) - err = mz_stream_read_uint16(zip->stream, &value16); - zip->number_entry = value16; - /* Total number of entries in the central dir */ - if (err == MZ_OK) - err = mz_stream_read_uint16(zip->stream, &value16); - number_entry_cd = value16; - if (number_entry_cd != zip->number_entry) - err = MZ_FORMAT_ERROR; - /* Size of the central directory */ - if (err == MZ_OK) - err = mz_stream_read_uint32(zip->stream, &value32); - if (err == MZ_OK) - zip->cd_size = value32; - /* Offset of start of central directory with respect to the starting disk number */ - if (err == MZ_OK) - err = mz_stream_read_uint32(zip->stream, &value32); - if (err == MZ_OK) - zip->cd_offset = value32; - /* Zip file global comment length */ - if (err == MZ_OK) - err = mz_stream_read_uint16(zip->stream, &comment_size); - if ((err == MZ_OK) && (comment_size > 0)) { - zip->comment = (char *)malloc(comment_size + 1); - if (zip->comment) { - comment_read = mz_stream_read(zip->stream, zip->comment, comment_size); - /* Don't fail if incorrect comment length read, not critical */ - if (comment_read < 0) - comment_read = 0; - zip->comment[comment_read] = 0; - } - } - - if ((err == MZ_OK) && ((number_entry_cd == UINT16_MAX) || (zip->cd_offset == UINT32_MAX))) { - /* Format should be Zip64, as the central directory or file size is too large */ - if (mz_zip_search_zip64_eocd(zip->stream, eocd_pos, &eocd_pos64) == MZ_OK) { - eocd_pos = eocd_pos64; - - err = mz_stream_seek(zip->stream, eocd_pos, MZ_SEEK_SET); - /* The signature, already checked */ - if (err == MZ_OK) - err = mz_stream_read_uint32(zip->stream, &value32); - /* Size of zip64 end of central directory record */ - if (err == MZ_OK) - err = mz_stream_read_uint64(zip->stream, &value64); - /* Version made by */ - if (err == MZ_OK) - err = mz_stream_read_uint16(zip->stream, &zip->version_madeby); - /* Version needed to extract */ - if (err == MZ_OK) - err = mz_stream_read_uint16(zip->stream, &value16); - /* Number of this disk */ - if (err == MZ_OK) - err = mz_stream_read_uint32(zip->stream, &value32); - /* Number of the disk with the start of the central directory */ - if (err == MZ_OK) - err = mz_stream_read_uint32(zip->stream, &zip->disk_number_with_cd); - /* Total number of entries in the central directory on this disk */ - if (err == MZ_OK) - err = mz_stream_read_uint64(zip->stream, &zip->number_entry); - /* Total number of entries in the central directory */ - if (err == MZ_OK) - err = mz_stream_read_uint64(zip->stream, &number_entry_cd64); - if (zip->number_entry != number_entry_cd64) - err = MZ_FORMAT_ERROR; - /* Size of the central directory */ - if (err == MZ_OK) { - err = mz_stream_read_int64(zip->stream, &zip->cd_size); - if (zip->cd_size < 0) - err = MZ_FORMAT_ERROR; - } - /* Offset of start of central directory with respect to the starting disk number */ - if (err == MZ_OK) { - err = mz_stream_read_int64(zip->stream, &zip->cd_offset); - if (zip->cd_offset < 0) - err = MZ_FORMAT_ERROR; - } - } else if ((zip->number_entry == UINT16_MAX) || (number_entry_cd != zip->number_entry) || - (zip->cd_size == UINT16_MAX) || (zip->cd_offset == UINT32_MAX)) { - err = MZ_FORMAT_ERROR; - } - } - } - - if (err == MZ_OK) { - mz_zip_print("Zip - Read cd (disk %" PRId32 " entries %" PRId64 " offset %" PRId64 " size %" PRId64 ")\n", - zip->disk_number_with_cd, zip->number_entry, zip->cd_offset, zip->cd_size); - - /* Verify central directory signature exists at offset */ - err = mz_stream_seek(zip->stream, zip->cd_offset, MZ_SEEK_SET); - if (err == MZ_OK) - err = mz_stream_read_uint32(zip->stream, &zip->cd_signature); - if ((err == MZ_OK) && (zip->cd_signature != MZ_ZIP_MAGIC_CENTRALHEADER)) { - /* If cd exists in large file and no zip-64 support, error for recover */ - if (eocd_pos > UINT32_MAX && eocd_pos64 == 0) - err = MZ_FORMAT_ERROR; - /* If cd not found attempt to seek backward to find it */ - if (err == MZ_OK) - err = mz_stream_seek(zip->stream, eocd_pos - zip->cd_size, MZ_SEEK_SET); - if (err == MZ_OK) - err = mz_stream_read_uint32(zip->stream, &zip->cd_signature); - if ((err == MZ_OK) && (zip->cd_signature == MZ_ZIP_MAGIC_CENTRALHEADER)) { - /* If found compensate for incorrect locations */ - value64i = zip->cd_offset; - zip->cd_offset = eocd_pos - zip->cd_size; - /* Assume disk has prepended data */ - zip->disk_offset_shift = zip->cd_offset - value64i; - } - } - } - - if (err == MZ_OK) { - if (eocd_pos < zip->cd_offset) { - /* End of central dir should always come after central dir */ - err = MZ_FORMAT_ERROR; - } else if ((uint64_t)eocd_pos < (uint64_t)zip->cd_offset + zip->cd_size) { - /* Truncate size of cd if incorrect size or offset provided */ - zip->cd_size = eocd_pos - zip->cd_offset; - } - } - - return err; -} - -static int32_t mz_zip_write_cd(void *handle) { - mz_zip *zip = (mz_zip *)handle; - int64_t zip64_eocd_pos_inzip = 0; - int64_t disk_number = 0; - int64_t disk_size = 0; - int32_t comment_size = 0; - int32_t err = MZ_OK; - - if (!zip) - return MZ_PARAM_ERROR; - - if (mz_stream_get_prop_int64(zip->stream, MZ_STREAM_PROP_DISK_NUMBER, &disk_number) == MZ_OK) - zip->disk_number_with_cd = (uint32_t)disk_number; - if (mz_stream_get_prop_int64(zip->stream, MZ_STREAM_PROP_DISK_SIZE, &disk_size) == MZ_OK && disk_size > 0) - zip->disk_number_with_cd += 1; - mz_stream_set_prop_int64(zip->stream, MZ_STREAM_PROP_DISK_NUMBER, -1); - if ((zip->disk_number_with_cd > 0) && (zip->open_mode & MZ_OPEN_MODE_APPEND)) { - // Overwrite existing central directory if using split disks - mz_stream_seek(zip->stream, 0, MZ_SEEK_SET); - } - - zip->cd_offset = mz_stream_tell(zip->stream); - mz_stream_seek(zip->cd_mem_stream, 0, MZ_SEEK_END); - zip->cd_size = (uint32_t)mz_stream_tell(zip->cd_mem_stream); - mz_stream_seek(zip->cd_mem_stream, 0, MZ_SEEK_SET); - - err = mz_stream_copy(zip->stream, zip->cd_mem_stream, (int32_t)zip->cd_size); - - mz_zip_print("Zip - Write cd (disk %" PRId32 " entries %" PRId64 " offset %" PRId64 " size %" PRId64 ")\n", - zip->disk_number_with_cd, zip->number_entry, zip->cd_offset, zip->cd_size); - - if (zip->cd_size == 0 && zip->number_entry > 0) { - // Zip does not contain central directory, open with recovery option - return MZ_FORMAT_ERROR; - } - - /* Write the ZIP64 central directory header */ - if (zip->cd_offset >= UINT32_MAX || zip->number_entry >= UINT16_MAX) { - zip64_eocd_pos_inzip = mz_stream_tell(zip->stream); - - err = mz_stream_write_uint32(zip->stream, MZ_ZIP_MAGIC_ENDHEADER64); - - /* Size of this 'zip64 end of central directory' */ - if (err == MZ_OK) - err = mz_stream_write_uint64(zip->stream, (uint64_t)44); - /* Version made by */ - if (err == MZ_OK) - err = mz_stream_write_uint16(zip->stream, zip->version_madeby); - /* Version needed */ - if (err == MZ_OK) - err = mz_stream_write_uint16(zip->stream, (uint16_t)45); - /* Number of this disk */ - if (err == MZ_OK) - err = mz_stream_write_uint32(zip->stream, zip->disk_number_with_cd); - /* Number of the disk with the start of the central directory */ - if (err == MZ_OK) - err = mz_stream_write_uint32(zip->stream, zip->disk_number_with_cd); - /* Total number of entries in the central dir on this disk */ - if (err == MZ_OK) - err = mz_stream_write_uint64(zip->stream, zip->number_entry); - /* Total number of entries in the central dir */ - if (err == MZ_OK) - err = mz_stream_write_uint64(zip->stream, zip->number_entry); - /* Size of the central directory */ - if (err == MZ_OK) - err = mz_stream_write_int64(zip->stream, zip->cd_size); - /* Offset of start of central directory with respect to the starting disk number */ - if (err == MZ_OK) - err = mz_stream_write_int64(zip->stream, zip->cd_offset); - if (err == MZ_OK) - err = mz_stream_write_uint32(zip->stream, MZ_ZIP_MAGIC_ENDLOCHEADER64); - - /* Number of the disk with the start of the central directory */ - if (err == MZ_OK) - err = mz_stream_write_uint32(zip->stream, zip->disk_number_with_cd); - /* Relative offset to the end of zip64 central directory */ - if (err == MZ_OK) - err = mz_stream_write_int64(zip->stream, zip64_eocd_pos_inzip); - /* Number of the disk with the start of the central directory */ - if (err == MZ_OK) - err = mz_stream_write_uint32(zip->stream, zip->disk_number_with_cd + 1); - } - - /* Write the central directory header */ - - /* Signature */ - if (err == MZ_OK) - err = mz_stream_write_uint32(zip->stream, MZ_ZIP_MAGIC_ENDHEADER); - /* Number of this disk */ - if (err == MZ_OK) - err = mz_stream_write_uint16(zip->stream, (uint16_t)zip->disk_number_with_cd); - /* Number of the disk with the start of the central directory */ - if (err == MZ_OK) - err = mz_stream_write_uint16(zip->stream, (uint16_t)zip->disk_number_with_cd); - /* Total number of entries in the central dir on this disk */ - if (err == MZ_OK) { - if (zip->number_entry >= UINT16_MAX) - err = mz_stream_write_uint16(zip->stream, UINT16_MAX); - else - err = mz_stream_write_uint16(zip->stream, (uint16_t)zip->number_entry); - } - /* Total number of entries in the central dir */ - if (err == MZ_OK) { - if (zip->number_entry >= UINT16_MAX) - err = mz_stream_write_uint16(zip->stream, UINT16_MAX); - else - err = mz_stream_write_uint16(zip->stream, (uint16_t)zip->number_entry); - } - /* Size of the central directory */ - if (err == MZ_OK) - err = mz_stream_write_uint32(zip->stream, (uint32_t)zip->cd_size); - /* Offset of start of central directory with respect to the starting disk number */ - if (err == MZ_OK) { - if (zip->cd_offset >= UINT32_MAX) - err = mz_stream_write_uint32(zip->stream, UINT32_MAX); - else - err = mz_stream_write_uint32(zip->stream, (uint32_t)zip->cd_offset); - } - - /* Write global comment */ - if (zip->comment) { - comment_size = (int32_t)strlen(zip->comment); - if (comment_size > UINT16_MAX) - comment_size = UINT16_MAX; - } - if (err == MZ_OK) - err = mz_stream_write_uint16(zip->stream, (uint16_t)comment_size); - if (err == MZ_OK) { - if (mz_stream_write(zip->stream, zip->comment, comment_size) != comment_size) - err = MZ_READ_ERROR; - } - return err; -} - -static int32_t mz_zip_recover_cd(void *handle) { - mz_zip *zip = (mz_zip *)handle; - mz_zip_file local_file_info; - void *local_file_info_stream = NULL; - void *cd_mem_stream = NULL; - uint64_t number_entry = 0; - int64_t descriptor_pos = 0; - int64_t next_header_pos = 0; - int64_t disk_offset = 0; - int64_t disk_number = 0; - int64_t compressed_pos = 0; - int64_t compressed_end_pos = 0; - int64_t compressed_size = 0; - int64_t uncompressed_size = 0; - uint8_t descriptor_magic[4] = MZ_ZIP_MAGIC_DATADESCRIPTORU8; - uint8_t local_header_magic[4] = MZ_ZIP_MAGIC_LOCALHEADERU8; - uint8_t central_header_magic[4] = MZ_ZIP_MAGIC_CENTRALHEADERU8; - uint32_t crc32 = 0; - int32_t disk_number_with_cd = 0; - int32_t err = MZ_OK; - uint8_t zip64 = 0; - uint8_t eof = 0; - - mz_zip_print("Zip - Recover - Start\n"); - - mz_zip_get_cd_mem_stream(handle, &cd_mem_stream); - - /* Determine if we are on a split disk or not */ - mz_stream_set_prop_int64(zip->stream, MZ_STREAM_PROP_DISK_NUMBER, 0); - if (mz_stream_tell(zip->stream) < 0) { - mz_stream_set_prop_int64(zip->stream, MZ_STREAM_PROP_DISK_NUMBER, -1); - mz_stream_seek(zip->stream, 0, MZ_SEEK_SET); - } else - disk_number_with_cd = 1; - - if (mz_stream_is_open(cd_mem_stream) != MZ_OK) - err = mz_stream_mem_open(cd_mem_stream, NULL, MZ_OPEN_MODE_CREATE); - - mz_stream_mem_create(&local_file_info_stream); - mz_stream_mem_open(local_file_info_stream, NULL, MZ_OPEN_MODE_CREATE); - - if (err == MZ_OK) { - err = mz_stream_find(zip->stream, (const void *)local_header_magic, sizeof(local_header_magic), - INT64_MAX, &next_header_pos); - } - - while (err == MZ_OK && !eof) { - /* Get current offset and disk number for central dir record */ - disk_offset = mz_stream_tell(zip->stream); - mz_stream_get_prop_int64(zip->stream, MZ_STREAM_PROP_DISK_NUMBER, &disk_number); - - /* Read local headers */ - memset(&local_file_info, 0, sizeof(local_file_info)); - err = mz_zip_entry_read_header(zip->stream, 1, &local_file_info, local_file_info_stream); - if (err != MZ_OK) - break; - - local_file_info.disk_offset = disk_offset; - if (disk_number < 0) - disk_number = 0; - local_file_info.disk_number = (uint32_t)disk_number; - - compressed_pos = mz_stream_tell(zip->stream); - - if ((err == MZ_OK) && (local_file_info.compressed_size > 0)) { - mz_stream_seek(zip->stream, local_file_info.compressed_size, MZ_SEEK_CUR); - } - - for (;;) { - /* Search for the next local header */ - err = mz_stream_find(zip->stream, (const void *)local_header_magic, sizeof(local_header_magic), - INT64_MAX, &next_header_pos); - - if (err == MZ_EXIST_ERROR) { - mz_stream_seek(zip->stream, compressed_pos, MZ_SEEK_SET); - - /* Search for central dir if no local header found */ - err = mz_stream_find(zip->stream, (const void *)central_header_magic, sizeof(central_header_magic), - INT64_MAX, &next_header_pos); - - if (err == MZ_EXIST_ERROR) { - /* Get end of stream if no central header found */ - mz_stream_seek(zip->stream, 0, MZ_SEEK_END); - next_header_pos = mz_stream_tell(zip->stream); - } - - eof = 1; - } - - if (local_file_info.flag & MZ_ZIP_FLAG_DATA_DESCRIPTOR || local_file_info.compressed_size == 0) { - /* Search backwards for the descriptor, seeking too far back will be incorrect if compressed size is small */ - err = mz_stream_find_reverse(zip->stream, (const void *)descriptor_magic, sizeof(descriptor_magic), - MZ_ZIP_SIZE_MAX_DATA_DESCRIPTOR, &descriptor_pos); - if (err == MZ_OK) { - if (mz_zip_extrafield_contains(local_file_info.extrafield, - local_file_info.extrafield_size, MZ_ZIP_EXTENSION_ZIP64, NULL) == MZ_OK) - zip64 = 1; - - err = mz_zip_entry_read_descriptor(zip->stream, zip64, &crc32, - &compressed_size, &uncompressed_size); - - if (err == MZ_OK) { - if (local_file_info.crc == 0) - local_file_info.crc = crc32; - if (local_file_info.compressed_size == 0) - local_file_info.compressed_size = compressed_size; - if (local_file_info.uncompressed_size == 0) - local_file_info.uncompressed_size = uncompressed_size; - } - - compressed_end_pos = descriptor_pos; - } else if (eof) { - compressed_end_pos = next_header_pos; - } else if (local_file_info.flag & MZ_ZIP_FLAG_DATA_DESCRIPTOR) { - /* Wrong local file entry found, keep searching */ - next_header_pos += 1; - mz_stream_seek(zip->stream, next_header_pos, MZ_SEEK_SET); - continue; - } - } else { - compressed_end_pos = next_header_pos; - } - - break; - } - - compressed_size = compressed_end_pos - compressed_pos; - - if (compressed_size > UINT32_MAX) { - /* Update sizes if 4GB file is written with no ZIP64 support */ - if (local_file_info.uncompressed_size < UINT32_MAX) { - local_file_info.compressed_size = compressed_size; - local_file_info.uncompressed_size = 0; - } - } - - mz_zip_print("Zip - Recover - Entry %s (csize %" PRId64 " usize %" PRId64 " flags 0x%" PRIx16 ")\n", - local_file_info.filename, local_file_info.compressed_size, local_file_info.uncompressed_size, - local_file_info.flag); - - /* Rewrite central dir with local headers and offsets */ - err = mz_zip_entry_write_header(cd_mem_stream, 0, &local_file_info); - if (err == MZ_OK) - number_entry += 1; - - err = mz_stream_seek(zip->stream, next_header_pos, MZ_SEEK_SET); - } - - mz_stream_mem_delete(&local_file_info_stream); - - mz_zip_print("Zip - Recover - Complete (cddisk %" PRId32 " entries %" PRId64 ")\n", - disk_number_with_cd, number_entry); - - if (number_entry == 0) - return err; - - /* Set new upper seek boundary for central dir mem stream */ - disk_offset = mz_stream_tell(cd_mem_stream); - mz_stream_mem_set_buffer_limit(cd_mem_stream, (int32_t)disk_offset); - - /* Set new central directory info */ - mz_zip_set_cd_stream(handle, 0, cd_mem_stream); - mz_zip_set_number_entry(handle, number_entry); - mz_zip_set_disk_number_with_cd(handle, disk_number_with_cd); - - return MZ_OK; -} - -void *mz_zip_create(void **handle) { - mz_zip *zip = NULL; - - zip = (mz_zip *)calloc(1, sizeof(mz_zip)); - if (zip) - zip->data_descriptor = 1; - if (handle) - *handle = zip; - - return zip; -} - -void mz_zip_delete(void **handle) { - mz_zip *zip = NULL; - if (!handle) - return; - zip = (mz_zip *)*handle; - if (zip) { - free(zip); - } - *handle = NULL; -} - -int32_t mz_zip_open(void *handle, void *stream, int32_t mode) { - mz_zip *zip = (mz_zip *)handle; - int32_t err = MZ_OK; - - if (!zip) - return MZ_PARAM_ERROR; - - mz_zip_print("Zip - Open\n"); - - zip->stream = stream; - - mz_stream_mem_create(&zip->cd_mem_stream); - - if (mode & MZ_OPEN_MODE_WRITE) { - mz_stream_mem_open(zip->cd_mem_stream, NULL, MZ_OPEN_MODE_CREATE); - zip->cd_stream = zip->cd_mem_stream; - } else { - zip->cd_stream = stream; - } - - if ((mode & MZ_OPEN_MODE_READ) || (mode & MZ_OPEN_MODE_APPEND)) { - if ((mode & MZ_OPEN_MODE_CREATE) == 0) { - err = mz_zip_read_cd(zip); - if (err != MZ_OK) { - mz_zip_print("Zip - Error detected reading cd (%" PRId32 ")\n", err); - if (zip->recover && mz_zip_recover_cd(zip) == MZ_OK) - err = MZ_OK; - } - } - - if ((err == MZ_OK) && (mode & MZ_OPEN_MODE_APPEND)) { - if (zip->cd_size > 0) { - /* Store central directory in memory */ - err = mz_stream_seek(zip->stream, zip->cd_offset, MZ_SEEK_SET); - if (err == MZ_OK) - err = mz_stream_copy(zip->cd_mem_stream, zip->stream, (int32_t)zip->cd_size); - if (err == MZ_OK) - err = mz_stream_seek(zip->stream, zip->cd_offset, MZ_SEEK_SET); - } else { - if (zip->cd_signature == MZ_ZIP_MAGIC_ENDHEADER) { - /* If tiny zip then overwrite end header */ - err = mz_stream_seek(zip->stream, zip->cd_offset, MZ_SEEK_SET); - } else { - /* If no central directory, append new zip to end of file */ - err = mz_stream_seek(zip->stream, 0, MZ_SEEK_END); - } - } - - if (zip->disk_number_with_cd > 0) { - /* Move to last disk to begin appending */ - mz_stream_set_prop_int64(zip->stream, MZ_STREAM_PROP_DISK_NUMBER, zip->disk_number_with_cd - 1); - } - } else { - zip->cd_start_pos = zip->cd_offset; - } - } - - if (err != MZ_OK) { - mz_zip_close(zip); - return err; - } - - /* Memory streams used to store variable length file info data */ - mz_stream_mem_create(&zip->file_info_stream); - mz_stream_mem_open(zip->file_info_stream, NULL, MZ_OPEN_MODE_CREATE); - - mz_stream_mem_create(&zip->local_file_info_stream); - mz_stream_mem_open(zip->local_file_info_stream, NULL, MZ_OPEN_MODE_CREATE); - - zip->open_mode = mode; - - return err; -} - -int32_t mz_zip_close(void *handle) { - mz_zip *zip = (mz_zip *)handle; - int32_t err = MZ_OK; - - if (!zip) - return MZ_PARAM_ERROR; - - mz_zip_print("Zip - Close\n"); - - if (mz_zip_entry_is_open(handle) == MZ_OK) - err = mz_zip_entry_close(handle); - - if ((err == MZ_OK) && (zip->open_mode & MZ_OPEN_MODE_WRITE)) - err = mz_zip_write_cd(handle); - - if (zip->cd_mem_stream) { - mz_stream_close(zip->cd_mem_stream); - mz_stream_delete(&zip->cd_mem_stream); - } - - if (zip->file_info_stream) { - mz_stream_mem_close(zip->file_info_stream); - mz_stream_mem_delete(&zip->file_info_stream); - } - if (zip->local_file_info_stream) { - mz_stream_mem_close(zip->local_file_info_stream); - mz_stream_mem_delete(&zip->local_file_info_stream); - } - - if (zip->comment) { - free(zip->comment); - zip->comment = NULL; - } - - zip->stream = NULL; - zip->cd_stream = NULL; - - return err; -} - -int32_t mz_zip_get_comment(void *handle, const char **comment) { - mz_zip *zip = (mz_zip *)handle; - if (!zip || !comment) - return MZ_PARAM_ERROR; - if (!zip->comment) - return MZ_EXIST_ERROR; - *comment = zip->comment; - return MZ_OK; -} - -int32_t mz_zip_set_comment(void *handle, const char *comment) { - mz_zip *zip = (mz_zip *)handle; - int32_t comment_size = 0; - if (!zip || !comment) - return MZ_PARAM_ERROR; - if (zip->comment) - free(zip->comment); - comment_size = (int32_t)strlen(comment); - if (comment_size > UINT16_MAX) - return MZ_PARAM_ERROR; - zip->comment = (char *)calloc(comment_size + 1, sizeof(char)); - if (!zip->comment) - return MZ_MEM_ERROR; - strncpy(zip->comment, comment, comment_size); - return MZ_OK; -} - -int32_t mz_zip_get_version_madeby(void *handle, uint16_t *version_madeby) { - mz_zip *zip = (mz_zip *)handle; - if (!zip || !version_madeby) - return MZ_PARAM_ERROR; - *version_madeby = zip->version_madeby; - return MZ_OK; -} - -int32_t mz_zip_set_version_madeby(void *handle, uint16_t version_madeby) { - mz_zip *zip = (mz_zip *)handle; - if (!zip) - return MZ_PARAM_ERROR; - zip->version_madeby = version_madeby; - return MZ_OK; -} - -int32_t mz_zip_set_recover(void *handle, uint8_t recover) { - mz_zip *zip = (mz_zip *)handle; - if (!zip) - return MZ_PARAM_ERROR; - zip->recover = recover; - return MZ_OK; -} - -int32_t mz_zip_set_data_descriptor(void *handle, uint8_t data_descriptor) { - mz_zip *zip = (mz_zip *)handle; - if (!zip) - return MZ_PARAM_ERROR; - zip->data_descriptor = data_descriptor; - return MZ_OK; -} - -int32_t mz_zip_get_stream(void *handle, void **stream) { - mz_zip *zip = (mz_zip *)handle; - if (!zip || !stream) - return MZ_PARAM_ERROR; - *stream = zip->stream; - if (!*stream) - return MZ_EXIST_ERROR; - return MZ_OK; -} - -int32_t mz_zip_set_cd_stream(void *handle, int64_t cd_start_pos, void *cd_stream) { - mz_zip *zip = (mz_zip *)handle; - if (!zip || !cd_stream) - return MZ_PARAM_ERROR; - zip->cd_offset = 0; - zip->cd_stream = cd_stream; - zip->cd_start_pos = cd_start_pos; - return MZ_OK; -} - -int32_t mz_zip_get_cd_mem_stream(void *handle, void **cd_mem_stream) { - mz_zip *zip = (mz_zip *)handle; - if (!zip || !cd_mem_stream) - return MZ_PARAM_ERROR; - *cd_mem_stream = zip->cd_mem_stream; - if (!*cd_mem_stream) - return MZ_EXIST_ERROR; - return MZ_OK; -} - -int32_t mz_zip_set_number_entry(void *handle, uint64_t number_entry) { - mz_zip *zip = (mz_zip *)handle; - if (!zip) - return MZ_PARAM_ERROR; - zip->number_entry = number_entry; - return MZ_OK; -} - -int32_t mz_zip_get_number_entry(void *handle, uint64_t *number_entry) { - mz_zip *zip = (mz_zip *)handle; - if (!zip || !number_entry) - return MZ_PARAM_ERROR; - *number_entry = zip->number_entry; - return MZ_OK; -} - -int32_t mz_zip_set_disk_number_with_cd(void *handle, uint32_t disk_number_with_cd) { - mz_zip *zip = (mz_zip *)handle; - if (!zip) - return MZ_PARAM_ERROR; - zip->disk_number_with_cd = disk_number_with_cd; - return MZ_OK; -} - -int32_t mz_zip_get_disk_number_with_cd(void *handle, uint32_t *disk_number_with_cd) { - mz_zip *zip = (mz_zip *)handle; - if (!zip || !disk_number_with_cd) - return MZ_PARAM_ERROR; - *disk_number_with_cd = zip->disk_number_with_cd; - return MZ_OK; -} - -static int32_t mz_zip_entry_close_int(void *handle) { - mz_zip *zip = (mz_zip *)handle; - - if (zip->crypt_stream) - mz_stream_delete(&zip->crypt_stream); - zip->crypt_stream = NULL; - if (zip->compress_stream) - mz_stream_delete(&zip->compress_stream); - zip->compress_stream = NULL; - - zip->entry_opened = 0; - - return MZ_OK; -} - -static int32_t mz_zip_entry_open_int(void *handle, uint8_t raw, int16_t compress_level, const char *password) { - mz_zip *zip = (mz_zip *)handle; - int64_t max_total_in = 0; - int64_t header_size = 0; - int64_t footer_size = 0; - int32_t err = MZ_OK; - uint8_t use_crypt = 0; - - if (!zip) - return MZ_PARAM_ERROR; - - switch (zip->file_info.compression_method) { - case MZ_COMPRESS_METHOD_STORE: - case MZ_COMPRESS_METHOD_DEFLATE: -#ifdef HAVE_BZIP2 - case MZ_COMPRESS_METHOD_BZIP2: -#endif -#ifdef HAVE_LZMA - case MZ_COMPRESS_METHOD_LZMA: -#endif -#if defined(HAVE_LZMA) || defined(HAVE_LIBCOMP) - case MZ_COMPRESS_METHOD_XZ: -#endif -#ifdef HAVE_ZSTD - case MZ_COMPRESS_METHOD_ZSTD: -#endif - err = MZ_OK; - break; - default: - return MZ_SUPPORT_ERROR; - } - -#ifndef HAVE_WZAES - if (zip->file_info.aes_version) - return MZ_SUPPORT_ERROR; -#endif - - zip->entry_raw = raw; - - if ((zip->file_info.flag & MZ_ZIP_FLAG_ENCRYPTED) && (password)) { - if (zip->open_mode & MZ_OPEN_MODE_WRITE) { - /* Encrypt only when we are not trying to write raw and password is supplied. */ - if (!zip->entry_raw) - use_crypt = 1; - } else if (zip->open_mode & MZ_OPEN_MODE_READ) { - /* Decrypt only when password is supplied. Don't error when password */ - /* is not supplied as we may want to read the raw encrypted data. */ - use_crypt = 1; - } - } - - if ((err == MZ_OK) && (use_crypt)) { -#ifdef HAVE_WZAES - if (zip->file_info.aes_version) { - mz_stream_wzaes_create(&zip->crypt_stream); - mz_stream_wzaes_set_password(zip->crypt_stream, password); - mz_stream_wzaes_set_encryption_mode(zip->crypt_stream, zip->file_info.aes_encryption_mode); - } else -#endif - { -#ifdef HAVE_PKCRYPT - uint8_t verify1 = (uint8_t)((zip->file_info.pk_verify >> 8) & 0xff); - uint8_t verify2 = (uint8_t)((zip->file_info.pk_verify) & 0xff); - - mz_stream_pkcrypt_create(&zip->crypt_stream); - mz_stream_pkcrypt_set_password(zip->crypt_stream, password); - mz_stream_pkcrypt_set_verify(zip->crypt_stream, verify1, verify2); -#endif - } - } - - if (err == MZ_OK) { - if (!zip->crypt_stream) - mz_stream_raw_create(&zip->crypt_stream); - - mz_stream_set_base(zip->crypt_stream, zip->stream); - - err = mz_stream_open(zip->crypt_stream, NULL, zip->open_mode); - } - - if (err == MZ_OK) { - if (zip->entry_raw || zip->file_info.compression_method == MZ_COMPRESS_METHOD_STORE) - mz_stream_raw_create(&zip->compress_stream); -#ifdef HAVE_ZLIB - else if (zip->file_info.compression_method == MZ_COMPRESS_METHOD_DEFLATE) - mz_stream_zlib_create(&zip->compress_stream); -#endif -#ifdef HAVE_BZIP2 - else if (zip->file_info.compression_method == MZ_COMPRESS_METHOD_BZIP2) - mz_stream_bzip_create(&zip->compress_stream); -#endif -#ifdef HAVE_LIBCOMP - else if (zip->file_info.compression_method == MZ_COMPRESS_METHOD_DEFLATE || - zip->file_info.compression_method == MZ_COMPRESS_METHOD_XZ) { - mz_stream_libcomp_create(&zip->compress_stream); - mz_stream_set_prop_int64(zip->compress_stream, MZ_STREAM_PROP_COMPRESS_METHOD, - zip->file_info.compression_method); - } -#endif -#ifdef HAVE_LZMA - else if (zip->file_info.compression_method == MZ_COMPRESS_METHOD_LZMA || - zip->file_info.compression_method == MZ_COMPRESS_METHOD_XZ) { - mz_stream_lzma_create(&zip->compress_stream); - mz_stream_set_prop_int64(zip->compress_stream, MZ_STREAM_PROP_COMPRESS_METHOD, - zip->file_info.compression_method); - } -#endif -#ifdef HAVE_ZSTD - else if (zip->file_info.compression_method == MZ_COMPRESS_METHOD_ZSTD) - mz_stream_zstd_create(&zip->compress_stream); -#endif - else - err = MZ_PARAM_ERROR; - } - - if (err == MZ_OK) { - if (zip->open_mode & MZ_OPEN_MODE_WRITE) { - mz_stream_set_prop_int64(zip->compress_stream, MZ_STREAM_PROP_COMPRESS_LEVEL, compress_level); - } else { - int32_t set_end_of_stream = 0; - -#ifndef HAVE_LIBCOMP - if (zip->entry_raw || - zip->file_info.compression_method == MZ_COMPRESS_METHOD_STORE || - zip->file_info.flag & MZ_ZIP_FLAG_ENCRYPTED) -#endif - { - max_total_in = zip->file_info.compressed_size; - mz_stream_set_prop_int64(zip->crypt_stream, MZ_STREAM_PROP_TOTAL_IN_MAX, max_total_in); - - if (mz_stream_get_prop_int64(zip->crypt_stream, MZ_STREAM_PROP_HEADER_SIZE, &header_size) == MZ_OK) - max_total_in -= header_size; - if (mz_stream_get_prop_int64(zip->crypt_stream, MZ_STREAM_PROP_FOOTER_SIZE, &footer_size) == MZ_OK) - max_total_in -= footer_size; - - mz_stream_set_prop_int64(zip->compress_stream, MZ_STREAM_PROP_TOTAL_IN_MAX, max_total_in); - } - - switch (zip->file_info.compression_method) { - case MZ_COMPRESS_METHOD_LZMA: - case MZ_COMPRESS_METHOD_XZ: - set_end_of_stream = (zip->file_info.flag & MZ_ZIP_FLAG_LZMA_EOS_MARKER); - break; - case MZ_COMPRESS_METHOD_ZSTD: - set_end_of_stream = 1; - break; - } - - if (set_end_of_stream) { - mz_stream_set_prop_int64(zip->compress_stream, MZ_STREAM_PROP_TOTAL_IN_MAX, zip->file_info.compressed_size); - mz_stream_set_prop_int64(zip->compress_stream, MZ_STREAM_PROP_TOTAL_OUT_MAX, zip->file_info.uncompressed_size); - } - } - - mz_stream_set_base(zip->compress_stream, zip->crypt_stream); - - err = mz_stream_open(zip->compress_stream, NULL, zip->open_mode); - } - - if (err == MZ_OK) { - zip->entry_opened = 1; - zip->entry_crc32 = 0; - } else { - mz_zip_entry_close_int(handle); - } - - return err; -} - -int32_t mz_zip_entry_is_open(void *handle) { - mz_zip *zip = (mz_zip *)handle; - if (!zip) - return MZ_PARAM_ERROR; - if (zip->entry_opened == 0) - return MZ_EXIST_ERROR; - return MZ_OK; -} - -int32_t mz_zip_entry_read_open(void *handle, uint8_t raw, const char *password) { - mz_zip *zip = (mz_zip *)handle; - int32_t err = MZ_OK; - int32_t err_shift = MZ_OK; - -#if defined(MZ_ZIP_NO_ENCRYPTION) - if (password) - return MZ_SUPPORT_ERROR; -#endif - if (!zip || !zip->entry_scanned) - return MZ_PARAM_ERROR; - if ((zip->open_mode & MZ_OPEN_MODE_READ) == 0) - return MZ_PARAM_ERROR; - - mz_zip_print("Zip - Entry - Read open (raw %" PRId32 ")\n", raw); - - err = mz_zip_entry_seek_local_header(handle); - if (err == MZ_OK) - err = mz_zip_entry_read_header(zip->stream, 1, &zip->local_file_info, zip->local_file_info_stream); - - if (err == MZ_FORMAT_ERROR && zip->disk_offset_shift > 0) { - /* Perhaps we didn't compensated correctly for incorrect cd offset */ - err_shift = mz_stream_seek(zip->stream, zip->file_info.disk_offset, MZ_SEEK_SET); - if (err_shift == MZ_OK) - err_shift = mz_zip_entry_read_header(zip->stream, 1, &zip->local_file_info, zip->local_file_info_stream); - if (err_shift == MZ_OK) { - zip->disk_offset_shift = 0; - err = err_shift; - } - } - -#ifdef MZ_ZIP_NO_DECOMPRESSION - if (!raw && zip->file_info.compression_method != MZ_COMPRESS_METHOD_STORE) - err = MZ_SUPPORT_ERROR; -#endif - if (err == MZ_OK) - err = mz_zip_entry_open_int(handle, raw, 0, password); - - return err; -} - -int32_t mz_zip_entry_write_open(void *handle, const mz_zip_file *file_info, int16_t compress_level, uint8_t raw, const char *password) { - mz_zip *zip = (mz_zip *)handle; - int64_t filename_pos = -1; - int64_t extrafield_pos = 0; - int64_t comment_pos = 0; - int64_t linkname_pos = 0; - int64_t disk_number = 0; - uint8_t is_dir = 0; - int32_t err = MZ_OK; - -#if defined(MZ_ZIP_NO_ENCRYPTION) - if (password) - return MZ_SUPPORT_ERROR; -#endif - if (!zip || !file_info || !file_info->filename) - return MZ_PARAM_ERROR; - - if (mz_zip_entry_is_open(handle) == MZ_OK) { - err = mz_zip_entry_close(handle); - if (err != MZ_OK) - return err; - } - - memcpy(&zip->file_info, file_info, sizeof(mz_zip_file)); - - mz_zip_print("Zip - Entry - Write open - %s (level %" PRId16 " raw %" PRId8 ")\n", - zip->file_info.filename, compress_level, raw); - - mz_stream_seek(zip->file_info_stream, 0, MZ_SEEK_SET); - mz_stream_write(zip->file_info_stream, file_info, sizeof(mz_zip_file)); - - /* Copy filename, extrafield, and comment internally */ - filename_pos = mz_stream_tell(zip->file_info_stream); - if (file_info->filename) - mz_stream_write(zip->file_info_stream, file_info->filename, (int32_t)strlen(file_info->filename)); - mz_stream_write_uint8(zip->file_info_stream, 0); - - extrafield_pos = mz_stream_tell(zip->file_info_stream); - if (file_info->extrafield) - mz_stream_write(zip->file_info_stream, file_info->extrafield, file_info->extrafield_size); - mz_stream_write_uint8(zip->file_info_stream, 0); - - comment_pos = mz_stream_tell(zip->file_info_stream); - if (file_info->comment) - mz_stream_write(zip->file_info_stream, file_info->comment, file_info->comment_size); - mz_stream_write_uint8(zip->file_info_stream, 0); - - linkname_pos = mz_stream_tell(zip->file_info_stream); - if (file_info->linkname) - mz_stream_write(zip->file_info_stream, file_info->linkname, (int32_t)strlen(file_info->linkname)); - mz_stream_write_uint8(zip->file_info_stream, 0); - - mz_stream_mem_get_buffer_at(zip->file_info_stream, filename_pos, (const void **)&zip->file_info.filename); - mz_stream_mem_get_buffer_at(zip->file_info_stream, extrafield_pos, (const void **)&zip->file_info.extrafield); - mz_stream_mem_get_buffer_at(zip->file_info_stream, comment_pos, (const void **)&zip->file_info.comment); - mz_stream_mem_get_buffer_at(zip->file_info_stream, linkname_pos, (const void **)&zip->file_info.linkname); - - if (zip->file_info.compression_method == MZ_COMPRESS_METHOD_DEFLATE) { - if ((compress_level == 8) || (compress_level == 9)) - zip->file_info.flag |= MZ_ZIP_FLAG_DEFLATE_MAX; - if (compress_level == 2) - zip->file_info.flag |= MZ_ZIP_FLAG_DEFLATE_FAST; - if (compress_level == 1) - zip->file_info.flag |= MZ_ZIP_FLAG_DEFLATE_SUPER_FAST; - } -#if defined(HAVE_LZMA) || defined(HAVE_LIBCOMP) - else if (zip->file_info.compression_method == MZ_COMPRESS_METHOD_LZMA || - zip->file_info.compression_method == MZ_COMPRESS_METHOD_XZ) - zip->file_info.flag |= MZ_ZIP_FLAG_LZMA_EOS_MARKER; -#endif - - if (mz_zip_attrib_is_dir(zip->file_info.external_fa, zip->file_info.version_madeby) == MZ_OK) - is_dir = 1; - - if (!is_dir) { - if (zip->data_descriptor) - zip->file_info.flag |= MZ_ZIP_FLAG_DATA_DESCRIPTOR; - if (password) - zip->file_info.flag |= MZ_ZIP_FLAG_ENCRYPTED; - } - - mz_stream_get_prop_int64(zip->stream, MZ_STREAM_PROP_DISK_NUMBER, &disk_number); - zip->file_info.disk_number = (uint32_t)disk_number; - zip->file_info.disk_offset = mz_stream_tell(zip->stream); - - if (zip->file_info.flag & MZ_ZIP_FLAG_ENCRYPTED) { -#ifdef HAVE_PKCRYPT - /* Pre-calculated CRC value is required for PKWARE traditional encryption */ - uint32_t dos_date = mz_zip_time_t_to_dos_date(zip->file_info.modified_date); - zip->file_info.pk_verify = mz_zip_get_pk_verify(dos_date, zip->file_info.crc, zip->file_info.flag); -#endif -#ifdef HAVE_WZAES - if (zip->file_info.aes_version && zip->file_info.aes_encryption_mode == 0) - zip->file_info.aes_encryption_mode = MZ_AES_ENCRYPTION_MODE_256; -#endif - } - - zip->file_info.crc = 0; - zip->file_info.compressed_size = 0; - - if ((compress_level == 0) || (is_dir)) - zip->file_info.compression_method = MZ_COMPRESS_METHOD_STORE; - -#ifdef MZ_ZIP_NO_COMPRESSION - if (zip->file_info.compression_method != MZ_COMPRESS_METHOD_STORE) - err = MZ_SUPPORT_ERROR; -#endif - if (err == MZ_OK) - err = mz_zip_entry_write_header(zip->stream, 1, &zip->file_info); - if (err == MZ_OK) - err = mz_zip_entry_open_int(handle, raw, compress_level, password); - - return err; -} - -int32_t mz_zip_entry_read(void *handle, void *buf, int32_t len) { - mz_zip *zip = (mz_zip *)handle; - int32_t read = 0; - - if (!zip || mz_zip_entry_is_open(handle) != MZ_OK) - return MZ_PARAM_ERROR; - if (UINT_MAX == UINT16_MAX && len > UINT16_MAX) /* zlib limitation */ - return MZ_PARAM_ERROR; - if (len == 0) - return MZ_PARAM_ERROR; - - if (zip->file_info.compressed_size == 0) - return 0; - - /* Read entire entry even if uncompressed_size = 0, otherwise */ - /* aes encryption validation will fail if compressed_size > 0 */ - read = mz_stream_read(zip->compress_stream, buf, len); - if (read > 0) - zip->entry_crc32 = mz_crypt_crc32_update(zip->entry_crc32, buf, read); - - mz_zip_print("Zip - Entry - Read - %" PRId32 " (max %" PRId32 ")\n", read, len); - - return read; -} - -int32_t mz_zip_entry_write(void *handle, const void *buf, int32_t len) { - mz_zip *zip = (mz_zip *)handle; - int32_t written = 0; - - if (!zip || mz_zip_entry_is_open(handle) != MZ_OK) - return MZ_PARAM_ERROR; - written = mz_stream_write(zip->compress_stream, buf, len); - if (written > 0) - zip->entry_crc32 = mz_crypt_crc32_update(zip->entry_crc32, buf, written); - - mz_zip_print("Zip - Entry - Write - %" PRId32 " (max %" PRId32 ")\n", written, len); - - return written; -} - -int32_t mz_zip_entry_read_close(void *handle, uint32_t *crc32, int64_t *compressed_size, - int64_t *uncompressed_size) { - mz_zip *zip = (mz_zip *)handle; - int64_t total_in = 0; - int32_t err = MZ_OK; - uint8_t zip64 = 0; - - if (!zip || mz_zip_entry_is_open(handle) != MZ_OK) - return MZ_PARAM_ERROR; - - mz_stream_close(zip->compress_stream); - - mz_zip_print("Zip - Entry - Read Close\n"); - - if (crc32) - *crc32 = zip->file_info.crc; - if (compressed_size) - *compressed_size = zip->file_info.compressed_size; - if (uncompressed_size) - *uncompressed_size = zip->file_info.uncompressed_size; - - mz_stream_get_prop_int64(zip->compress_stream, MZ_STREAM_PROP_TOTAL_IN, &total_in); - - if ((zip->file_info.flag & MZ_ZIP_FLAG_DATA_DESCRIPTOR) && - ((zip->file_info.flag & MZ_ZIP_FLAG_MASK_LOCAL_INFO) == 0) && - (crc32 || compressed_size || uncompressed_size)) { - /* Check to see if data descriptor is zip64 bit format or not */ - if (mz_zip_extrafield_contains(zip->local_file_info.extrafield, - zip->local_file_info.extrafield_size, MZ_ZIP_EXTENSION_ZIP64, NULL) == MZ_OK) - zip64 = 1; - - err = mz_zip_entry_seek_local_header(handle); - - /* Seek to end of compressed stream since we might have over-read during compression */ - if (err == MZ_OK) - err = mz_stream_seek(zip->stream, MZ_ZIP_SIZE_LD_ITEM + - (int64_t)zip->local_file_info.filename_size + - (int64_t)zip->local_file_info.extrafield_size + - total_in, MZ_SEEK_CUR); - - /* Read data descriptor */ - if (err == MZ_OK) - err = mz_zip_entry_read_descriptor(zip->stream, zip64, - crc32, compressed_size, uncompressed_size); - } - - /* If entire entry was not read verification will fail */ - if ((err == MZ_OK) && (total_in == zip->file_info.compressed_size) && (!zip->entry_raw)) { -#ifdef HAVE_WZAES - /* AES zip version AE-1 will expect a valid crc as well */ - if (zip->file_info.aes_version <= 0x0001) -#endif - { - if (zip->entry_crc32 != zip->file_info.crc) { - mz_zip_print("Zip - Entry - Crc failed (actual 0x%08" PRIx32 " expected 0x%08" PRIx32 ")\n", - zip->entry_crc32, zip->file_info.crc); - - err = MZ_CRC_ERROR; - } - } - } - - mz_zip_entry_close_int(handle); - - return err; -} - -int32_t mz_zip_entry_write_close(void *handle, uint32_t crc32, int64_t compressed_size, - int64_t uncompressed_size) { - mz_zip *zip = (mz_zip *)handle; - int64_t end_disk_number = 0; - int32_t err = MZ_OK; - uint8_t zip64 = 0; - - if (!zip || mz_zip_entry_is_open(handle) != MZ_OK) - return MZ_PARAM_ERROR; - - mz_stream_close(zip->compress_stream); - - if (!zip->entry_raw) - crc32 = zip->entry_crc32; - - mz_zip_print("Zip - Entry - Write Close (crc 0x%08" PRIx32 " cs %" PRId64 " ucs %" PRId64 ")\n", - crc32, compressed_size, uncompressed_size); - - /* If sizes are not set, then read them from the compression stream */ - if (compressed_size < 0) - mz_stream_get_prop_int64(zip->compress_stream, MZ_STREAM_PROP_TOTAL_OUT, &compressed_size); - if (uncompressed_size < 0) - mz_stream_get_prop_int64(zip->compress_stream, MZ_STREAM_PROP_TOTAL_IN, &uncompressed_size); - - if (zip->file_info.flag & MZ_ZIP_FLAG_ENCRYPTED) { - mz_stream_set_base(zip->crypt_stream, zip->stream); - err = mz_stream_close(zip->crypt_stream); - - mz_stream_get_prop_int64(zip->crypt_stream, MZ_STREAM_PROP_TOTAL_OUT, &compressed_size); - } - - mz_zip_entry_needs_zip64(&zip->file_info, 1, &zip64); - - if ((err == MZ_OK) && (zip->file_info.flag & MZ_ZIP_FLAG_DATA_DESCRIPTOR)) { - /* Determine if we need to write data descriptor in zip64 format, - if local extrafield was saved with zip64 extrafield */ - - if (zip->file_info.flag & MZ_ZIP_FLAG_MASK_LOCAL_INFO) - err = mz_zip_entry_write_descriptor(zip->stream, - zip64, 0, compressed_size, 0); - else - err = mz_zip_entry_write_descriptor(zip->stream, - zip64, crc32, compressed_size, uncompressed_size); - } - - /* Write file info to central directory */ - - mz_zip_print("Zip - Entry - Write cd (ucs %" PRId64 " cs %" PRId64 " crc 0x%08" PRIx32 ")\n", - uncompressed_size, compressed_size, crc32); - - zip->file_info.crc = crc32; - zip->file_info.compressed_size = compressed_size; - zip->file_info.uncompressed_size = uncompressed_size; - - if (err == MZ_OK) - err = mz_zip_entry_write_header(zip->cd_mem_stream, 0, &zip->file_info); - - /* Update local header with crc32 and sizes */ - if ((err == MZ_OK) && ((zip->file_info.flag & MZ_ZIP_FLAG_DATA_DESCRIPTOR) == 0) && - ((zip->file_info.flag & MZ_ZIP_FLAG_MASK_LOCAL_INFO) == 0)) { - /* Save the disk number and position we are to seek back after updating local header */ - int64_t end_pos = mz_stream_tell(zip->stream); - mz_stream_get_prop_int64(zip->stream, MZ_STREAM_PROP_DISK_NUMBER, &end_disk_number); - - err = mz_zip_entry_seek_local_header(handle); - - if (err == MZ_OK) { - /* Seek to crc32 and sizes offset in local header */ - err = mz_stream_set_prop_int64(zip->stream, MZ_STREAM_PROP_DISK_NUMBER, zip->file_info.disk_number); - if (err == MZ_OK) - err = mz_stream_seek(zip->stream, zip->file_info.disk_offset + MZ_ZIP_OFFSET_CRC_SIZES, MZ_SEEK_SET); - } - - if (err == MZ_OK) - err = mz_zip_entry_write_crc_sizes(zip->stream, zip64, 0, &zip->file_info); - - /* Seek to and update zip64 extension sizes */ - if ((err == MZ_OK) && (zip64)) { - int64_t filename_size = zip->file_info.filename_size; - - if (filename_size == 0) - filename_size = strlen(zip->file_info.filename); - - /* Since we write zip64 extension first we know its offset */ - err = mz_stream_seek(zip->stream, 2 + 2 + filename_size + 4, MZ_SEEK_CUR); - - if (err == MZ_OK) - err = mz_stream_write_uint64(zip->stream, zip->file_info.uncompressed_size); - if (err == MZ_OK) - err = mz_stream_write_uint64(zip->stream, zip->file_info.compressed_size); - } - - mz_stream_set_prop_int64(zip->stream, MZ_STREAM_PROP_DISK_NUMBER, end_disk_number); - mz_stream_seek(zip->stream, end_pos, MZ_SEEK_SET); - } - - zip->number_entry += 1; - - mz_zip_entry_close_int(handle); - - return err; -} - -int32_t mz_zip_entry_seek_local_header(void *handle) { - mz_zip *zip = (mz_zip *)handle; - int64_t disk_size = 0; - uint32_t disk_number = zip->file_info.disk_number; - - if (disk_number == zip->disk_number_with_cd) { - mz_stream_get_prop_int64(zip->stream, MZ_STREAM_PROP_DISK_SIZE, &disk_size); - if ((disk_size == 0) || ((zip->open_mode & MZ_OPEN_MODE_WRITE) == 0)) - disk_number = (uint32_t)-1; - } - - mz_stream_set_prop_int64(zip->stream, MZ_STREAM_PROP_DISK_NUMBER, disk_number); - - mz_zip_print("Zip - Entry - Seek local (disk %" PRId32 " offset %" PRId64 ")\n", - disk_number, zip->file_info.disk_offset); - - /* Guard against seek overflows */ - if ((zip->disk_offset_shift > 0) && - (zip->file_info.disk_offset > (INT64_MAX - zip->disk_offset_shift))) - return MZ_FORMAT_ERROR; - - return mz_stream_seek(zip->stream, zip->file_info.disk_offset + zip->disk_offset_shift, MZ_SEEK_SET); -} - -int32_t mz_zip_entry_get_compress_stream(void *handle, void **compress_stream) { - mz_zip *zip = (mz_zip *)handle; - if (!zip || !compress_stream) - return MZ_PARAM_ERROR; - *compress_stream = zip->compress_stream; - if (!*compress_stream) - return MZ_EXIST_ERROR; - return MZ_OK; -} - -int32_t mz_zip_entry_close(void *handle) { - return mz_zip_entry_close_raw(handle, UINT64_MAX, 0); -} - -int32_t mz_zip_entry_close_raw(void *handle, int64_t uncompressed_size, uint32_t crc32) { - mz_zip *zip = (mz_zip *)handle; - int32_t err = MZ_OK; - - if (!zip || mz_zip_entry_is_open(handle) != MZ_OK) - return MZ_PARAM_ERROR; - - if (zip->open_mode & MZ_OPEN_MODE_WRITE) - err = mz_zip_entry_write_close(handle, crc32, UINT64_MAX, uncompressed_size); - else - err = mz_zip_entry_read_close(handle, NULL, NULL, NULL); - - return err; -} - -int32_t mz_zip_entry_is_dir(void *handle) { - mz_zip *zip = (mz_zip *)handle; - int32_t filename_length = 0; - - if (!zip || !zip->entry_scanned) - return MZ_PARAM_ERROR; - if (mz_zip_attrib_is_dir(zip->file_info.external_fa, zip->file_info.version_madeby) == MZ_OK) - return MZ_OK; - - filename_length = (int32_t)strlen(zip->file_info.filename); - if (filename_length > 0) { - if ((zip->file_info.filename[filename_length - 1] == '/') || - (zip->file_info.filename[filename_length - 1] == '\\')) - return MZ_OK; - } - return MZ_EXIST_ERROR; -} - -int32_t mz_zip_entry_is_symlink(void *handle) { - mz_zip *zip = (mz_zip *)handle; - - if (!zip || !zip->entry_scanned) - return MZ_PARAM_ERROR; - if (mz_zip_attrib_is_symlink(zip->file_info.external_fa, zip->file_info.version_madeby) != MZ_OK) - return MZ_EXIST_ERROR; - - return MZ_OK; -} - -int32_t mz_zip_entry_get_info(void *handle, mz_zip_file **file_info) { - mz_zip *zip = (mz_zip *)handle; - - if (!zip) - return MZ_PARAM_ERROR; - - if ((zip->open_mode & MZ_OPEN_MODE_WRITE) == 0) { - if (!zip->entry_scanned) - return MZ_PARAM_ERROR; - } - - *file_info = &zip->file_info; - return MZ_OK; -} - -int32_t mz_zip_entry_get_local_info(void *handle, mz_zip_file **local_file_info) { - mz_zip *zip = (mz_zip *)handle; - if (!zip || mz_zip_entry_is_open(handle) != MZ_OK) - return MZ_PARAM_ERROR; - *local_file_info = &zip->local_file_info; - return MZ_OK; -} - -int32_t mz_zip_entry_set_extrafield(void *handle, const uint8_t *extrafield, uint16_t extrafield_size) { - mz_zip *zip = (mz_zip *)handle; - - if (!zip || mz_zip_entry_is_open(handle) != MZ_OK) - return MZ_PARAM_ERROR; - - zip->file_info.extrafield = extrafield; - zip->file_info.extrafield_size = extrafield_size; - return MZ_OK; -} - -static int32_t mz_zip_goto_next_entry_int(void *handle) { - mz_zip *zip = (mz_zip *)handle; - int32_t err = MZ_OK; - - if (!zip) - return MZ_PARAM_ERROR; - - zip->entry_scanned = 0; - - mz_stream_set_prop_int64(zip->cd_stream, MZ_STREAM_PROP_DISK_NUMBER, -1); - - err = mz_stream_seek(zip->cd_stream, zip->cd_current_pos, MZ_SEEK_SET); - if (err == MZ_OK) - err = mz_zip_entry_read_header(zip->cd_stream, 0, &zip->file_info, zip->file_info_stream); - if (err == MZ_OK) - zip->entry_scanned = 1; - return err; -} - -int64_t mz_zip_get_entry(void *handle) { - mz_zip *zip = (mz_zip *)handle; - - if (!zip) - return MZ_PARAM_ERROR; - - return zip->cd_current_pos; -} - -int32_t mz_zip_goto_entry(void *handle, int64_t cd_pos) { - mz_zip *zip = (mz_zip *)handle; - - if (!zip) - return MZ_PARAM_ERROR; - - if (cd_pos < zip->cd_start_pos || cd_pos > zip->cd_start_pos + zip->cd_size) - return MZ_PARAM_ERROR; - - zip->cd_current_pos = cd_pos; - - return mz_zip_goto_next_entry_int(handle); -} - -int32_t mz_zip_goto_first_entry(void *handle) { - mz_zip *zip = (mz_zip *)handle; - - if (!zip) - return MZ_PARAM_ERROR; - - zip->cd_current_pos = zip->cd_start_pos; - - return mz_zip_goto_next_entry_int(handle); -} - -int32_t mz_zip_goto_next_entry(void *handle) { - mz_zip *zip = (mz_zip *)handle; - - if (!zip) - return MZ_PARAM_ERROR; - - zip->cd_current_pos += (int64_t)MZ_ZIP_SIZE_CD_ITEM + zip->file_info.filename_size + - zip->file_info.extrafield_size + zip->file_info.comment_size; - - return mz_zip_goto_next_entry_int(handle); -} - -int32_t mz_zip_locate_entry(void *handle, const char *filename, uint8_t ignore_case) { - mz_zip *zip = (mz_zip *)handle; - int32_t err = MZ_OK; - int32_t result = 0; - - if (!zip || !filename) - return MZ_PARAM_ERROR; - - /* If we are already on the current entry, no need to search */ - if (zip->entry_scanned && zip->file_info.filename) { - result = mz_zip_path_compare(zip->file_info.filename, filename, ignore_case); - if (result == 0) - return MZ_OK; - } - - /* Search all entries starting at the first */ - err = mz_zip_goto_first_entry(handle); - while (err == MZ_OK) { - result = mz_zip_path_compare(zip->file_info.filename, filename, ignore_case); - if (result == 0) - return MZ_OK; - - err = mz_zip_goto_next_entry(handle); - } - - return err; -} - -int32_t mz_zip_locate_first_entry(void *handle, void *userdata, mz_zip_locate_entry_cb cb) { - mz_zip *zip = (mz_zip *)handle; - int32_t err = MZ_OK; - int32_t result = 0; - - /* Search first entry looking for match */ - err = mz_zip_goto_first_entry(handle); - if (err != MZ_OK) - return err; - - result = cb(handle, userdata, &zip->file_info); - if (result == 0) - return MZ_OK; - - return mz_zip_locate_next_entry(handle, userdata, cb); -} - -int32_t mz_zip_locate_next_entry(void *handle, void *userdata, mz_zip_locate_entry_cb cb) { - mz_zip *zip = (mz_zip *)handle; - int32_t err = MZ_OK; - int32_t result = 0; - - /* Search next entries looking for match */ - err = mz_zip_goto_next_entry(handle); - while (err == MZ_OK) { - result = cb(handle, userdata, &zip->file_info); - if (result == 0) - return MZ_OK; - - err = mz_zip_goto_next_entry(handle); - } - - return err; -} - -/***************************************************************************/ - -int32_t mz_zip_attrib_is_dir(uint32_t attrib, int32_t version_madeby) { - uint32_t posix_attrib = 0; - uint8_t system = MZ_HOST_SYSTEM(version_madeby); - int32_t err = MZ_OK; - - err = mz_zip_attrib_convert(system, attrib, MZ_HOST_SYSTEM_UNIX, &posix_attrib); - if (err == MZ_OK) { - if ((posix_attrib & 0170000) == 0040000) /* S_ISDIR */ - return MZ_OK; - } - - return MZ_EXIST_ERROR; -} - -int32_t mz_zip_attrib_is_symlink(uint32_t attrib, int32_t version_madeby) { - uint32_t posix_attrib = 0; - uint8_t system = MZ_HOST_SYSTEM(version_madeby); - int32_t err = MZ_OK; - - err = mz_zip_attrib_convert(system, attrib, MZ_HOST_SYSTEM_UNIX, &posix_attrib); - if (err == MZ_OK) { - if ((posix_attrib & 0170000) == 0120000) /* S_ISLNK */ - return MZ_OK; - } - - return MZ_EXIST_ERROR; -} - -int32_t mz_zip_attrib_convert(uint8_t src_sys, uint32_t src_attrib, uint8_t target_sys, uint32_t *target_attrib) { - if (!target_attrib) - return MZ_PARAM_ERROR; - - *target_attrib = 0; - - if ((src_sys == MZ_HOST_SYSTEM_MSDOS) || (src_sys == MZ_HOST_SYSTEM_WINDOWS_NTFS)) { - if ((target_sys == MZ_HOST_SYSTEM_MSDOS) || (target_sys == MZ_HOST_SYSTEM_WINDOWS_NTFS)) { - *target_attrib = src_attrib; - return MZ_OK; - } - if ((target_sys == MZ_HOST_SYSTEM_UNIX) || (target_sys == MZ_HOST_SYSTEM_OSX_DARWIN) || (target_sys == MZ_HOST_SYSTEM_RISCOS)) - return mz_zip_attrib_win32_to_posix(src_attrib, target_attrib); - } else if ((src_sys == MZ_HOST_SYSTEM_UNIX) || (src_sys == MZ_HOST_SYSTEM_OSX_DARWIN) || (src_sys == MZ_HOST_SYSTEM_RISCOS)) { - /* If high bytes are set, it contains unix specific attributes */ - if ((src_attrib >> 16) != 0) - src_attrib >>= 16; - - if ((target_sys == MZ_HOST_SYSTEM_UNIX) || (target_sys == MZ_HOST_SYSTEM_OSX_DARWIN) || (target_sys == MZ_HOST_SYSTEM_RISCOS)) { - *target_attrib = src_attrib; - return MZ_OK; - } - if ((target_sys == MZ_HOST_SYSTEM_MSDOS) || (target_sys == MZ_HOST_SYSTEM_WINDOWS_NTFS)) - return mz_zip_attrib_posix_to_win32(src_attrib, target_attrib); - } - - return MZ_SUPPORT_ERROR; -} - -int32_t mz_zip_attrib_posix_to_win32(uint32_t posix_attrib, uint32_t *win32_attrib) { - if (!win32_attrib) - return MZ_PARAM_ERROR; - - *win32_attrib = 0; - - /* S_IWUSR | S_IWGRP | S_IWOTH | S_IXUSR | S_IXGRP | S_IXOTH */ - if ((posix_attrib & 0000333) == 0 && (posix_attrib & 0000444) != 0) - *win32_attrib |= 0x01; /* FILE_ATTRIBUTE_READONLY */ - /* S_IFLNK */ - if ((posix_attrib & 0170000) == 0120000) - *win32_attrib |= 0x400; /* FILE_ATTRIBUTE_REPARSE_POINT */ - /* S_IFDIR */ - else if ((posix_attrib & 0170000) == 0040000) - *win32_attrib |= 0x10; /* FILE_ATTRIBUTE_DIRECTORY */ - /* S_IFREG */ - else - *win32_attrib |= 0x80; /* FILE_ATTRIBUTE_NORMAL */ - - return MZ_OK; -} - -int32_t mz_zip_attrib_win32_to_posix(uint32_t win32_attrib, uint32_t *posix_attrib) { - if (!posix_attrib) - return MZ_PARAM_ERROR; - - *posix_attrib = 0000444; /* S_IRUSR | S_IRGRP | S_IROTH */ - /* FILE_ATTRIBUTE_READONLY */ - if ((win32_attrib & 0x01) == 0) - *posix_attrib |= 0000222; /* S_IWUSR | S_IWGRP | S_IWOTH */ - /* FILE_ATTRIBUTE_REPARSE_POINT */ - if ((win32_attrib & 0x400) == 0x400) - *posix_attrib |= 0120000; /* S_IFLNK */ - /* FILE_ATTRIBUTE_DIRECTORY */ - else if ((win32_attrib & 0x10) == 0x10) - *posix_attrib |= 0040111; /* S_IFDIR | S_IXUSR | S_IXGRP | S_IXOTH */ - else - *posix_attrib |= 0100000; /* S_IFREG */ - - return MZ_OK; -} - -/***************************************************************************/ - -int32_t mz_zip_extrafield_find(void *stream, uint16_t type, int32_t max_seek, uint16_t *length) { - int32_t err = MZ_OK; - uint16_t field_type = 0; - uint16_t field_length = 0; - - if (max_seek < 4) - return MZ_EXIST_ERROR; - - do { - err = mz_stream_read_uint16(stream, &field_type); - if (err == MZ_OK) - err = mz_stream_read_uint16(stream, &field_length); - if (err != MZ_OK) - break; - - if (type == field_type) { - if (length) - *length = field_length; - return MZ_OK; - } - - max_seek -= field_length - 4; - if (max_seek < 0) - return MZ_EXIST_ERROR; - - err = mz_stream_seek(stream, field_length, MZ_SEEK_CUR); - } while (err == MZ_OK); - - return MZ_EXIST_ERROR; -} - -int32_t mz_zip_extrafield_contains(const uint8_t *extrafield, int32_t extrafield_size, - uint16_t type, uint16_t *length) { - void *file_extra_stream = NULL; - int32_t err = MZ_OK; - - if (!extrafield || !extrafield_size) - return MZ_PARAM_ERROR; - - mz_stream_mem_create(&file_extra_stream); - mz_stream_mem_set_buffer(file_extra_stream, (void *)extrafield, extrafield_size); - - err = mz_zip_extrafield_find(file_extra_stream, type, extrafield_size, length); - - mz_stream_mem_delete(&file_extra_stream); - - return err; -} - -int32_t mz_zip_extrafield_read(void *stream, uint16_t *type, uint16_t *length) { - int32_t err = MZ_OK; - if (!type || !length) - return MZ_PARAM_ERROR; - err = mz_stream_read_uint16(stream, type); - if (err == MZ_OK) - err = mz_stream_read_uint16(stream, length); - return err; -} - -int32_t mz_zip_extrafield_write(void *stream, uint16_t type, uint16_t length) { - int32_t err = MZ_OK; - err = mz_stream_write_uint16(stream, type); - if (err == MZ_OK) - err = mz_stream_write_uint16(stream, length); - return err; -} - -/***************************************************************************/ - -static int32_t mz_zip_invalid_date(const struct tm *ptm) { -#define datevalue_in_range(min, max, value) ((min) <= (value) && (value) <= (max)) - return (!datevalue_in_range(0, 127 + 80, ptm->tm_year) || /* 1980-based year, allow 80 extra */ - !datevalue_in_range(0, 11, ptm->tm_mon) || - !datevalue_in_range(1, 31, ptm->tm_mday) || - !datevalue_in_range(0, 23, ptm->tm_hour) || - !datevalue_in_range(0, 59, ptm->tm_min) || - !datevalue_in_range(0, 59, ptm->tm_sec)); -#undef datevalue_in_range -} - -static void mz_zip_dosdate_to_raw_tm(uint64_t dos_date, struct tm *ptm) { - uint64_t date = (uint64_t)(dos_date >> 16); - - ptm->tm_mday = (uint16_t)(date & 0x1f); - ptm->tm_mon = (uint16_t)(((date & 0x1E0) / 0x20) - 1); - ptm->tm_year = (uint16_t)(((date & 0x0FE00) / 0x0200) + 80); - ptm->tm_hour = (uint16_t)((dos_date & 0xF800) / 0x800); - ptm->tm_min = (uint16_t)((dos_date & 0x7E0) / 0x20); - ptm->tm_sec = (uint16_t)(2 * (dos_date & 0x1f)); - ptm->tm_isdst = -1; -} - -int32_t mz_zip_dosdate_to_tm(uint64_t dos_date, struct tm *ptm) { - if (!ptm) - return MZ_PARAM_ERROR; - - mz_zip_dosdate_to_raw_tm(dos_date, ptm); - - if (mz_zip_invalid_date(ptm)) { - /* Invalid date stored, so don't return it */ - memset(ptm, 0, sizeof(struct tm)); - return MZ_FORMAT_ERROR; - } - return MZ_OK; -} - -time_t mz_zip_dosdate_to_time_t(uint64_t dos_date) { - struct tm ptm; - mz_zip_dosdate_to_raw_tm(dos_date, &ptm); - return mktime(&ptm); -} - -int32_t mz_zip_time_t_to_tm(time_t unix_time, struct tm *ptm) { - struct tm ltm; - if (!ptm) - return MZ_PARAM_ERROR; - if (!localtime_r(&unix_time, <m)) { /* Returns a 1900-based year */ - /* Invalid date stored, so don't return it */ - memset(ptm, 0, sizeof(struct tm)); - return MZ_INTERNAL_ERROR; - } - memcpy(ptm, <m, sizeof(struct tm)); - return MZ_OK; -} - -uint32_t mz_zip_time_t_to_dos_date(time_t unix_time) { - struct tm ptm; - mz_zip_time_t_to_tm(unix_time, &ptm); - return mz_zip_tm_to_dosdate((const struct tm *)&ptm); -} - -uint32_t mz_zip_tm_to_dosdate(const struct tm *ptm) { - struct tm fixed_tm; - - /* Years supported: */ - - /* [00, 79] (assumed to be between 2000 and 2079) */ - /* [80, 207] (assumed to be between 1980 and 2107, typical output of old */ - /* software that does 'year-1900' to get a double digit year) */ - /* [1980, 2107] (due to format limitations, only years 1980-2107 can be stored.) */ - - memcpy(&fixed_tm, ptm, sizeof(struct tm)); - if (fixed_tm.tm_year >= 1980) /* range [1980, 2107] */ - fixed_tm.tm_year -= 1980; - else if (fixed_tm.tm_year >= 80) /* range [80, 207] */ - fixed_tm.tm_year -= 80; - else /* range [00, 79] */ - fixed_tm.tm_year += 20; - - if (mz_zip_invalid_date(&fixed_tm)) - return 0; - - return (((uint32_t)fixed_tm.tm_mday + (32 * ((uint32_t)fixed_tm.tm_mon + 1)) + (512 * (uint32_t)fixed_tm.tm_year)) << 16) | - (((uint32_t)fixed_tm.tm_sec / 2) + (32 * (uint32_t)fixed_tm.tm_min) + (2048 * (uint32_t)fixed_tm.tm_hour)); -} - -int32_t mz_zip_ntfs_to_unix_time(uint64_t ntfs_time, time_t *unix_time) { - *unix_time = (time_t)((ntfs_time - 116444736000000000LL) / 10000000); - return MZ_OK; -} - -int32_t mz_zip_unix_to_ntfs_time(time_t unix_time, uint64_t *ntfs_time) { - *ntfs_time = ((uint64_t)unix_time * 10000000) + 116444736000000000LL; - return MZ_OK; -} - -/***************************************************************************/ - -int32_t mz_zip_path_compare(const char *path1, const char *path2, uint8_t ignore_case) { - do { - if ((*path1 == '\\' && *path2 == '/') || - (*path2 == '\\' && *path1 == '/')) { - /* Ignore comparison of path slashes */ - } else if (ignore_case) { - if (tolower(*path1) != tolower(*path2)) - break; - } else if (*path1 != *path2) { - break; - } - - path1 += 1; - path2 += 1; - } while (*path1 != 0 && *path2 != 0); - - if (ignore_case) - return (int32_t)(tolower(*path1) - tolower(*path2)); - - return (int32_t)(*path1 - *path2); -} - -/***************************************************************************/ - -const char* mz_zip_get_compression_method_string(int32_t compression_method) -{ - const char *method = "?"; - switch (compression_method) { - case MZ_COMPRESS_METHOD_STORE: - method = "stored"; - break; - case MZ_COMPRESS_METHOD_DEFLATE: - method = "deflate"; - break; - case MZ_COMPRESS_METHOD_BZIP2: - method = "bzip2"; - break; - case MZ_COMPRESS_METHOD_LZMA: - method = "lzma"; - break; - case MZ_COMPRESS_METHOD_XZ: - method = "xz"; - break; - case MZ_COMPRESS_METHOD_ZSTD: - method = "zstd"; - break; - } - return method; -} - -/***************************************************************************/ diff --git a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_zip.h b/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_zip.h deleted file mode 100644 index 65be301..0000000 --- a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_zip.h +++ /dev/null @@ -1,262 +0,0 @@ -/* mz_zip.h -- Zip manipulation - part of the minizip-ng project - - Copyright (C) Nathan Moinvaziri - https://github.com/zlib-ng/minizip-ng - Copyright (C) 2009-2010 Mathias Svensson - Modifications for Zip64 support - http://result42.com - Copyright (C) 1998-2010 Gilles Vollant - https://www.winimage.com/zLibDll/minizip.html - - This program is distributed under the terms of the same license as zlib. - See the accompanying LICENSE file for the full text of the license. -*/ - -#ifndef MZ_ZIP_H -#define MZ_ZIP_H - -#ifdef __cplusplus -extern "C" { -#endif - -/***************************************************************************/ - -typedef struct mz_zip_file_s { - uint16_t version_madeby; /* version made by */ - uint16_t version_needed; /* version needed to extract */ - uint16_t flag; /* general purpose bit flag */ - uint16_t compression_method; /* compression method */ - time_t modified_date; /* last modified date in unix time */ - time_t accessed_date; /* last accessed date in unix time */ - time_t creation_date; /* creation date in unix time */ - uint32_t crc; /* crc-32 */ - int64_t compressed_size; /* compressed size */ - int64_t uncompressed_size; /* uncompressed size */ - uint16_t filename_size; /* filename length */ - uint16_t extrafield_size; /* extra field length */ - uint16_t comment_size; /* file comment length */ - uint32_t disk_number; /* disk number start */ - int64_t disk_offset; /* relative offset of local header */ - uint16_t internal_fa; /* internal file attributes */ - uint32_t external_fa; /* external file attributes */ - - const char *filename; /* filename utf8 null-terminated string */ - const uint8_t *extrafield; /* extrafield data */ - const char *comment; /* comment utf8 null-terminated string */ - const char *linkname; /* sym-link filename utf8 null-terminated string */ - - uint16_t zip64; /* zip64 extension mode */ - uint16_t aes_version; /* winzip aes extension if not 0 */ - uint8_t aes_encryption_mode; /* winzip aes encryption mode */ - uint16_t pk_verify; /* pkware encryption verifier */ - -} mz_zip_file, mz_zip_entry; - -/***************************************************************************/ - -typedef int32_t (*mz_zip_locate_entry_cb)(void *handle, void *userdata, mz_zip_file *file_info); - -/***************************************************************************/ - -void * mz_zip_create(void **handle); -/* Create zip instance for opening */ - -void mz_zip_delete(void **handle); -/* Delete zip object */ - -int32_t mz_zip_open(void *handle, void *stream, int32_t mode); -/* Create a zip file, no delete file in zip functionality */ - -int32_t mz_zip_close(void *handle); -/* Close the zip file */ - -int32_t mz_zip_get_comment(void *handle, const char **comment); -/* Get a pointer to the global comment */ - -int32_t mz_zip_set_comment(void *handle, const char *comment); -/* Sets the global comment used for writing zip file */ - -int32_t mz_zip_get_version_madeby(void *handle, uint16_t *version_madeby); -/* Get the version made by */ - -int32_t mz_zip_set_version_madeby(void *handle, uint16_t version_madeby); -/* Sets the version made by used for writing zip file */ - -int32_t mz_zip_set_recover(void *handle, uint8_t recover); -/* Sets the ability to recover the central dir by reading local file headers */ - -int32_t mz_zip_set_data_descriptor(void *handle, uint8_t data_descriptor); -/* Sets the use of data descriptor flag when writing zip entries */ - -int32_t mz_zip_get_stream(void *handle, void **stream); -/* Get a pointer to the stream used to open */ - -int32_t mz_zip_set_cd_stream(void *handle, int64_t cd_start_pos, void *cd_stream); -/* Sets the stream to use for reading the central dir */ - -int32_t mz_zip_get_cd_mem_stream(void *handle, void **cd_mem_stream); -/* Get a pointer to the stream used to store the central dir in memory */ - -int32_t mz_zip_set_number_entry(void *handle, uint64_t number_entry); -/* Sets the total number of entries */ - -int32_t mz_zip_get_number_entry(void *handle, uint64_t *number_entry); -/* Get the total number of entries */ - -int32_t mz_zip_set_disk_number_with_cd(void *handle, uint32_t disk_number_with_cd); -/* Sets the disk number containing the central directory record */ - -int32_t mz_zip_get_disk_number_with_cd(void *handle, uint32_t *disk_number_with_cd); -/* Get the disk number containing the central directory record */ - -/***************************************************************************/ - -int32_t mz_zip_entry_is_open(void *handle); -/* Check to see if entry is open for read/write */ - -int32_t mz_zip_entry_read_open(void *handle, uint8_t raw, const char *password); -/* Open for reading the current file in the zip file */ - -int32_t mz_zip_entry_read(void *handle, void *buf, int32_t len); -/* Read bytes from the current file in the zip file */ - -int32_t mz_zip_entry_read_close(void *handle, uint32_t *crc32, int64_t *compressed_size, - int64_t *uncompressed_size); -/* Close the current file for reading and get data descriptor values */ - -int32_t mz_zip_entry_write_open(void *handle, const mz_zip_file *file_info, - int16_t compress_level, uint8_t raw, const char *password); -/* Open for writing the current file in the zip file */ - -int32_t mz_zip_entry_write(void *handle, const void *buf, int32_t len); -/* Write bytes from the current file in the zip file */ - -int32_t mz_zip_entry_write_close(void *handle, uint32_t crc32, int64_t compressed_size, - int64_t uncompressed_size); -/* Close the current file for writing and set data descriptor values */ - -int32_t mz_zip_entry_seek_local_header(void *handle); -/* Seeks to the local header for the entry */ - -int32_t mz_zip_entry_get_compress_stream(void *handle, void **compress_stream); -/* Get a pointer to the compression stream used for the current entry */ - -int32_t mz_zip_entry_close_raw(void *handle, int64_t uncompressed_size, uint32_t crc32); -/* Close the current file in the zip file where raw is compressed data */ - -int32_t mz_zip_entry_close(void *handle); -/* Close the current file in the zip file */ - -/***************************************************************************/ - -int32_t mz_zip_entry_is_dir(void *handle); -/* Checks to see if the entry is a directory */ - -int32_t mz_zip_entry_is_symlink(void *handle); -/* Checks to see if the entry is a symbolic link */ - -int32_t mz_zip_entry_get_info(void *handle, mz_zip_file **file_info); -/* Get info about the current file, only valid while current entry is open */ - -int32_t mz_zip_entry_get_local_info(void *handle, mz_zip_file **local_file_info); -/* Get local info about the current file, only valid while current entry is being read */ - -int32_t mz_zip_entry_set_extrafield(void *handle, const uint8_t *extrafield, uint16_t extrafield_size); -/* Sets or updates the extra field for the entry to be used before writing cd */ - -int64_t mz_zip_get_entry(void *handle); -/* Return offset of the current entry in the zip file */ - -int32_t mz_zip_goto_entry(void *handle, int64_t cd_pos); -/* Go to specified entry in the zip file */ - -int32_t mz_zip_goto_first_entry(void *handle); -/* Go to the first entry in the zip file */ - -int32_t mz_zip_goto_next_entry(void *handle); -/* Go to the next entry in the zip file or MZ_END_OF_LIST if reaching the end */ - -int32_t mz_zip_locate_entry(void *handle, const char *filename, uint8_t ignore_case); -/* Locate the file with the specified name in the zip file or MZ_END_LIST if not found */ - -int32_t mz_zip_locate_first_entry(void *handle, void *userdata, mz_zip_locate_entry_cb cb); -/* Locate the first matching entry based on a match callback */ - -int32_t mz_zip_locate_next_entry(void *handle, void *userdata, mz_zip_locate_entry_cb cb); -/* Locate the next matching entry based on a match callback */ - -/***************************************************************************/ - -int32_t mz_zip_attrib_is_dir(uint32_t attrib, int32_t version_madeby); -/* Checks to see if the attribute is a directory based on platform */ - -int32_t mz_zip_attrib_is_symlink(uint32_t attrib, int32_t version_madeby); -/* Checks to see if the attribute is a symbolic link based on platform */ - -int32_t mz_zip_attrib_convert(uint8_t src_sys, uint32_t src_attrib, uint8_t target_sys, - uint32_t *target_attrib); -/* Converts file attributes from one host system to another */ - -int32_t mz_zip_attrib_posix_to_win32(uint32_t posix_attrib, uint32_t *win32_attrib); -/* Converts posix file attributes to win32 file attributes */ - -int32_t mz_zip_attrib_win32_to_posix(uint32_t win32_attrib, uint32_t *posix_attrib); -/* Converts win32 file attributes to posix file attributes */ - -/***************************************************************************/ - -int32_t mz_zip_extrafield_find(void *stream, uint16_t type, int32_t max_seek, uint16_t *length); -/* Seeks to extra field by its type and returns its length */ - -int32_t mz_zip_extrafield_contains(const uint8_t *extrafield, int32_t extrafield_size, - uint16_t type, uint16_t *length); -/* Gets whether an extrafield exists and its size */ - -int32_t mz_zip_extrafield_read(void *stream, uint16_t *type, uint16_t *length); -/* Reads an extrafield header from a stream */ - -int32_t mz_zip_extrafield_write(void *stream, uint16_t type, uint16_t length); -/* Writes an extrafield header to a stream */ - -/***************************************************************************/ - -int32_t mz_zip_dosdate_to_tm(uint64_t dos_date, struct tm *ptm); -/* Convert dos date/time format to struct tm */ - -time_t mz_zip_dosdate_to_time_t(uint64_t dos_date); -/* Convert dos date/time format to time_t */ - -int32_t mz_zip_time_t_to_tm(time_t unix_time, struct tm *ptm); -/* Convert time_t to time struct */ - -uint32_t mz_zip_time_t_to_dos_date(time_t unix_time); -/* Convert time_t to dos date/time format */ - -uint32_t mz_zip_tm_to_dosdate(const struct tm *ptm); -/* Convert struct tm to dos date/time format */ - -int32_t mz_zip_ntfs_to_unix_time(uint64_t ntfs_time, time_t *unix_time); -/* Convert ntfs time to unix time */ - -int32_t mz_zip_unix_to_ntfs_time(time_t unix_time, uint64_t *ntfs_time); -/* Convert unix time to ntfs time */ - -/***************************************************************************/ - -int32_t mz_zip_path_compare(const char *path1, const char *path2, uint8_t ignore_case); -/* Compare two paths without regard to slashes */ - -/***************************************************************************/ - -const -char* mz_zip_get_compression_method_string(int32_t compression_method); -/* Gets a string representing the compression method */ - -/***************************************************************************/ - -#ifdef __cplusplus -} -#endif - -#endif /* _ZIP_H */ diff --git a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_zip_rw.c b/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_zip_rw.c deleted file mode 100644 index 05390cc..0000000 --- a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_zip_rw.c +++ /dev/null @@ -1,1942 +0,0 @@ -/* mz_zip_rw.c -- Zip reader/writer - part of the minizip-ng project - - Copyright (C) Nathan Moinvaziri - https://github.com/zlib-ng/minizip-ng - - This program is distributed under the terms of the same license as zlib. - See the accompanying LICENSE file for the full text of the license. -*/ - -#include "mz.h" -#include "mz_crypt.h" -#include "mz_os.h" -#include "mz_strm.h" -#include "mz_strm_buf.h" -#include "mz_strm_mem.h" -#include "mz_strm_os.h" -#include "mz_strm_split.h" -#include "mz_strm_wzaes.h" -#include "mz_zip.h" - -#include "mz_zip_rw.h" - -/***************************************************************************/ - -#define MZ_DEFAULT_PROGRESS_INTERVAL (1000u) - -#define MZ_ZIP_CD_FILENAME ("__cdcd__") - -/***************************************************************************/ - -typedef struct mz_zip_reader_s { - void *zip_handle; - void *file_stream; - void *buffered_stream; - void *split_stream; - void *mem_stream; - void *hash; - uint16_t hash_algorithm; - uint16_t hash_digest_size; - mz_zip_file *file_info; - const char *pattern; - uint8_t pattern_ignore_case; - const char *password; - void *overwrite_userdata; - mz_zip_reader_overwrite_cb - overwrite_cb; - void *password_userdata; - mz_zip_reader_password_cb - password_cb; - void *progress_userdata; - mz_zip_reader_progress_cb - progress_cb; - uint32_t progress_cb_interval_ms; - void *entry_userdata; - mz_zip_reader_entry_cb - entry_cb; - uint8_t raw; - uint8_t buffer[UINT16_MAX]; - int32_t encoding; - uint8_t sign_required; - uint8_t cd_verified; - uint8_t cd_zipped; - uint8_t entry_verified; - uint8_t recover; -} mz_zip_reader; - -/***************************************************************************/ - -int32_t mz_zip_reader_is_open(void *handle) { - mz_zip_reader *reader = (mz_zip_reader *)handle; - if (!reader) - return MZ_PARAM_ERROR; - if (!reader->zip_handle) - return MZ_PARAM_ERROR; - return MZ_OK; -} - -int32_t mz_zip_reader_open(void *handle, void *stream) { - mz_zip_reader *reader = (mz_zip_reader *)handle; - int32_t err = MZ_OK; - - reader->cd_verified = 0; - reader->cd_zipped = 0; - - mz_zip_create(&reader->zip_handle); - mz_zip_set_recover(reader->zip_handle, reader->recover); - - err = mz_zip_open(reader->zip_handle, stream, MZ_OPEN_MODE_READ); - - if (err != MZ_OK) { - mz_zip_reader_close(handle); - return err; - } - - mz_zip_reader_unzip_cd(reader); - return MZ_OK; -} - -int32_t mz_zip_reader_open_file(void *handle, const char *path) { - mz_zip_reader *reader = (mz_zip_reader *)handle; - int32_t err = MZ_OK; - - mz_zip_reader_close(handle); - - mz_stream_os_create(&reader->file_stream); - mz_stream_buffered_create(&reader->buffered_stream); - mz_stream_split_create(&reader->split_stream); - - mz_stream_set_base(reader->buffered_stream, reader->file_stream); - mz_stream_set_base(reader->split_stream, reader->buffered_stream); - - err = mz_stream_open(reader->split_stream, path, MZ_OPEN_MODE_READ); - if (err == MZ_OK) - err = mz_zip_reader_open(handle, reader->split_stream); - return err; -} - -int32_t mz_zip_reader_open_file_in_memory(void *handle, const char *path) { - mz_zip_reader *reader = (mz_zip_reader *)handle; - void *file_stream = NULL; - int64_t file_size = 0; - int32_t err = 0; - - mz_zip_reader_close(handle); - - mz_stream_os_create(&file_stream); - - err = mz_stream_os_open(file_stream, path, MZ_OPEN_MODE_READ); - - if (err != MZ_OK) { - mz_stream_os_delete(&file_stream); - mz_zip_reader_close(handle); - return err; - } - - mz_stream_os_seek(file_stream, 0, MZ_SEEK_END); - file_size = mz_stream_os_tell(file_stream); - mz_stream_os_seek(file_stream, 0, MZ_SEEK_SET); - - if ((file_size <= 0) || (file_size > UINT32_MAX)) { - /* Memory size is too large or too small */ - - mz_stream_os_close(file_stream); - mz_stream_os_delete(&file_stream); - mz_zip_reader_close(handle); - return MZ_MEM_ERROR; - } - - mz_stream_mem_create(&reader->mem_stream); - mz_stream_mem_set_grow_size(reader->mem_stream, (int32_t)file_size); - mz_stream_mem_open(reader->mem_stream, NULL, MZ_OPEN_MODE_CREATE); - - err = mz_stream_copy(reader->mem_stream, file_stream, (int32_t)file_size); - - mz_stream_os_close(file_stream); - mz_stream_os_delete(&file_stream); - - if (err == MZ_OK) - err = mz_zip_reader_open(handle, reader->mem_stream); - if (err != MZ_OK) - mz_zip_reader_close(handle); - - return err; -} - -int32_t mz_zip_reader_open_buffer(void *handle, uint8_t *buf, int32_t len, uint8_t copy) { - mz_zip_reader *reader = (mz_zip_reader *)handle; - int32_t err = MZ_OK; - - mz_zip_reader_close(handle); - - mz_stream_mem_create(&reader->mem_stream); - - if (copy) { - mz_stream_mem_set_grow_size(reader->mem_stream, len); - mz_stream_mem_open(reader->mem_stream, NULL, MZ_OPEN_MODE_CREATE); - mz_stream_mem_write(reader->mem_stream, buf, len); - mz_stream_mem_seek(reader->mem_stream, 0, MZ_SEEK_SET); - } else { - mz_stream_mem_open(reader->mem_stream, NULL, MZ_OPEN_MODE_READ); - mz_stream_mem_set_buffer(reader->mem_stream, buf, len); - } - - if (err == MZ_OK) - err = mz_zip_reader_open(handle, reader->mem_stream); - - return err; -} - -int32_t mz_zip_reader_close(void *handle) { - mz_zip_reader *reader = (mz_zip_reader *)handle; - int32_t err = MZ_OK; - - if (reader->zip_handle) { - err = mz_zip_close(reader->zip_handle); - mz_zip_delete(&reader->zip_handle); - } - - if (reader->split_stream) { - mz_stream_split_close(reader->split_stream); - mz_stream_split_delete(&reader->split_stream); - } - - if (reader->buffered_stream) - mz_stream_buffered_delete(&reader->buffered_stream); - - if (reader->file_stream) - mz_stream_os_delete(&reader->file_stream); - - if (reader->mem_stream) { - mz_stream_close(reader->mem_stream); - mz_stream_delete(&reader->mem_stream); - } - - return err; -} - -/***************************************************************************/ - -int32_t mz_zip_reader_unzip_cd(void *handle) { - mz_zip_reader *reader = (mz_zip_reader *)handle; - mz_zip_file *cd_info = NULL; - void *cd_mem_stream = NULL; - void *new_cd_stream = NULL; - void *file_extra_stream = NULL; - uint64_t number_entry = 0; - int32_t err = MZ_OK; - - err = mz_zip_reader_goto_first_entry(handle); - if (err != MZ_OK) - return err; - err = mz_zip_reader_entry_get_info(handle, &cd_info); - if (err != MZ_OK) - return err; - - if (strcmp(cd_info->filename, MZ_ZIP_CD_FILENAME) != 0) - return mz_zip_reader_goto_first_entry(handle); - - err = mz_zip_reader_entry_open(handle); - if (err != MZ_OK) - return err; - - mz_stream_mem_create(&file_extra_stream); - mz_stream_mem_set_buffer(file_extra_stream, (void *)cd_info->extrafield, cd_info->extrafield_size); - - err = mz_zip_extrafield_find(file_extra_stream, MZ_ZIP_EXTENSION_CDCD, INT32_MAX, NULL); - if (err == MZ_OK) - err = mz_stream_read_uint64(file_extra_stream, &number_entry); - - mz_stream_mem_delete(&file_extra_stream); - - if (err != MZ_OK) - return err; - - mz_zip_get_cd_mem_stream(reader->zip_handle, &cd_mem_stream); - if (mz_stream_mem_is_open(cd_mem_stream) != MZ_OK) - mz_stream_mem_open(cd_mem_stream, NULL, MZ_OPEN_MODE_CREATE); - - err = mz_stream_seek(cd_mem_stream, 0, MZ_SEEK_SET); - if (err == MZ_OK) - err = mz_stream_copy_stream(cd_mem_stream, NULL, handle, mz_zip_reader_entry_read, - (int32_t)cd_info->uncompressed_size); - - if (err == MZ_OK) { - reader->cd_zipped = 1; - - mz_zip_set_cd_stream(reader->zip_handle, 0, cd_mem_stream); - mz_zip_set_number_entry(reader->zip_handle, number_entry); - - err = mz_zip_reader_goto_first_entry(handle); - } - - reader->cd_verified = reader->entry_verified; - - mz_stream_mem_delete(&new_cd_stream); - return err; -} - -/***************************************************************************/ - -static int32_t mz_zip_reader_locate_entry_cb(void *handle, void *userdata, mz_zip_file *file_info) { - mz_zip_reader *reader = (mz_zip_reader *)userdata; - int32_t result = 0; - MZ_UNUSED(handle); - result = mz_path_compare_wc(file_info->filename, reader->pattern, reader->pattern_ignore_case); - return result; -} - -int32_t mz_zip_reader_goto_first_entry(void *handle) { - mz_zip_reader *reader = (mz_zip_reader *)handle; - int32_t err = MZ_OK; - - if (mz_zip_reader_is_open(handle) != MZ_OK) - return MZ_PARAM_ERROR; - - if (mz_zip_entry_is_open(reader->zip_handle) == MZ_OK) - mz_zip_reader_entry_close(handle); - - if (!reader->pattern) - err = mz_zip_goto_first_entry(reader->zip_handle); - else - err = mz_zip_locate_first_entry(reader->zip_handle, reader, mz_zip_reader_locate_entry_cb); - - reader->file_info = NULL; - if (err == MZ_OK) - err = mz_zip_entry_get_info(reader->zip_handle, &reader->file_info); - - return err; -} - -int32_t mz_zip_reader_goto_next_entry(void *handle) { - mz_zip_reader *reader = (mz_zip_reader *)handle; - int32_t err = MZ_OK; - - if (mz_zip_reader_is_open(handle) != MZ_OK) - return MZ_PARAM_ERROR; - - if (mz_zip_entry_is_open(reader->zip_handle) == MZ_OK) - mz_zip_reader_entry_close(handle); - - if (!reader->pattern) - err = mz_zip_goto_next_entry(reader->zip_handle); - else - err = mz_zip_locate_next_entry(reader->zip_handle, reader, mz_zip_reader_locate_entry_cb); - - reader->file_info = NULL; - if (err == MZ_OK) - err = mz_zip_entry_get_info(reader->zip_handle, &reader->file_info); - - return err; -} - -int32_t mz_zip_reader_locate_entry(void *handle, const char *filename, uint8_t ignore_case) { - mz_zip_reader *reader = (mz_zip_reader *)handle; - int32_t err = MZ_OK; - - if (mz_zip_entry_is_open(reader->zip_handle) == MZ_OK) - mz_zip_reader_entry_close(handle); - - err = mz_zip_locate_entry(reader->zip_handle, filename, ignore_case); - - reader->file_info = NULL; - if (err == MZ_OK) - err = mz_zip_entry_get_info(reader->zip_handle, &reader->file_info); - - return err; -} - -/***************************************************************************/ - -int32_t mz_zip_reader_entry_open(void *handle) { - mz_zip_reader *reader = (mz_zip_reader *)handle; - int32_t err = MZ_OK; - const char *password = NULL; - char password_buf[120]; - - reader->entry_verified = 0; - - if (mz_zip_reader_is_open(reader) != MZ_OK) - return MZ_PARAM_ERROR; - if (!reader->file_info) - return MZ_PARAM_ERROR; - - /* If the entry isn't open for reading, open it */ - if (mz_zip_entry_is_open(reader->zip_handle) == MZ_OK) - return MZ_OK; - - password = reader->password; - - /* Check if we need a password and ask for it if we need to */ - if (!password && reader->password_cb && (reader->file_info->flag & MZ_ZIP_FLAG_ENCRYPTED)) { - reader->password_cb(handle, reader->password_userdata, reader->file_info, - password_buf, sizeof(password_buf)); - - password = password_buf; - } - - err = mz_zip_entry_read_open(reader->zip_handle, reader->raw, password); -#ifndef MZ_ZIP_NO_CRYPTO - if (err != MZ_OK) - return err; - - if (mz_zip_reader_entry_get_first_hash(handle, &reader->hash_algorithm, &reader->hash_digest_size) == MZ_OK) { - mz_crypt_sha_create(&reader->hash); - if (reader->hash_algorithm == MZ_HASH_SHA1) - mz_crypt_sha_set_algorithm(reader->hash, MZ_HASH_SHA1); - else if (reader->hash_algorithm == MZ_HASH_SHA256) - mz_crypt_sha_set_algorithm(reader->hash, MZ_HASH_SHA256); - else - err = MZ_SUPPORT_ERROR; - - if (err == MZ_OK) - mz_crypt_sha_begin(reader->hash); -#ifdef MZ_ZIP_SIGNING - if (err == MZ_OK) { - if (mz_zip_reader_entry_has_sign(handle) == MZ_OK) { - err = mz_zip_reader_entry_sign_verify(handle); - if (err == MZ_OK) - reader->entry_verified = 1; - } else if (reader->sign_required && !reader->cd_verified) - err = MZ_SIGN_ERROR; - } -#endif - } else if (reader->sign_required && !reader->cd_verified) - err = MZ_SIGN_ERROR; -#endif - - return err; -} - -int32_t mz_zip_reader_entry_close(void *handle) { - mz_zip_reader *reader = (mz_zip_reader *)handle; - int32_t err = MZ_OK; - int32_t err_close = MZ_OK; -#ifndef MZ_ZIP_NO_CRYPTO - int32_t err_hash = MZ_OK; - uint8_t computed_hash[MZ_HASH_MAX_SIZE]; - uint8_t expected_hash[MZ_HASH_MAX_SIZE]; - - if (reader->hash) { - mz_crypt_sha_end(reader->hash, computed_hash, sizeof(computed_hash)); - mz_crypt_sha_delete(&reader->hash); - - err_hash = mz_zip_reader_entry_get_hash(handle, reader->hash_algorithm, expected_hash, - reader->hash_digest_size); - - if (err_hash == MZ_OK) { - /* Verify expected hash against computed hash */ - if (memcmp(computed_hash, expected_hash, reader->hash_digest_size) != 0) - err = MZ_CRC_ERROR; - } - } -#endif - - err_close = mz_zip_entry_close(reader->zip_handle); - if (err == MZ_OK) - err = err_close; - return err; -} - -int32_t mz_zip_reader_entry_read(void *handle, void *buf, int32_t len) { - mz_zip_reader *reader = (mz_zip_reader *)handle; - int32_t read = 0; - read = mz_zip_entry_read(reader->zip_handle, buf, len); -#ifndef MZ_ZIP_NO_CRYPTO - if (read > 0 && reader->hash) - mz_crypt_sha_update(reader->hash, buf, read); -#endif - return read; -} - -int32_t mz_zip_reader_entry_has_sign(void *handle) { - mz_zip_reader *reader = (mz_zip_reader *)handle; - - if (!reader || mz_zip_entry_is_open(reader->zip_handle) != MZ_OK) - return MZ_PARAM_ERROR; - - return mz_zip_extrafield_contains(reader->file_info->extrafield, - reader->file_info->extrafield_size, MZ_ZIP_EXTENSION_SIGN, NULL); -} - -#if !defined(MZ_ZIP_NO_CRYPTO) && defined(MZ_ZIP_SIGNING) -int32_t mz_zip_reader_entry_sign_verify(void *handle) { - mz_zip_reader *reader = (mz_zip_reader *)handle; - void *file_extra_stream = NULL; - int32_t err = MZ_OK; - uint8_t *signature = NULL; - uint16_t signature_size = 0; - uint8_t hash[MZ_HASH_MAX_SIZE]; - - if (!reader || mz_zip_entry_is_open(reader->zip_handle) != MZ_OK) - return MZ_PARAM_ERROR; - - mz_stream_mem_create(&file_extra_stream); - mz_stream_mem_set_buffer(file_extra_stream, (void *)reader->file_info->extrafield, - reader->file_info->extrafield_size); - - err = mz_zip_extrafield_find(file_extra_stream, MZ_ZIP_EXTENSION_SIGN, INT32_MAX, &signature_size); - if ((err == MZ_OK) && (signature_size > 0)) { - signature = (uint8_t *)malloc(signature_size); - if (mz_stream_read(file_extra_stream, signature, signature_size) != signature_size) - err = MZ_READ_ERROR; - } - - mz_stream_mem_delete(&file_extra_stream); - - if (err == MZ_OK) { - /* Get most secure hash to verify signature against */ - err = mz_zip_reader_entry_get_hash(handle, reader->hash_algorithm, hash, reader->hash_digest_size); - } - - if (err == MZ_OK) { - /* Verify the pkcs signature */ - err = mz_crypt_sign_verify(hash, reader->hash_digest_size, signature, signature_size); - } - - if (signature) - free(signature); - - return err; -} -#endif - -int32_t mz_zip_reader_entry_get_hash(void *handle, uint16_t algorithm, uint8_t *digest, int32_t digest_size) { - mz_zip_reader *reader = (mz_zip_reader *)handle; - void *file_extra_stream = NULL; - int32_t err = MZ_OK; - int32_t return_err = MZ_EXIST_ERROR; - uint16_t cur_algorithm = 0; - uint16_t cur_digest_size = 0; - - mz_stream_mem_create(&file_extra_stream); - mz_stream_mem_set_buffer(file_extra_stream, (void *)reader->file_info->extrafield, - reader->file_info->extrafield_size); - - do { - err = mz_zip_extrafield_find(file_extra_stream, MZ_ZIP_EXTENSION_HASH, INT32_MAX, NULL); - if (err != MZ_OK) - break; - - err = mz_stream_read_uint16(file_extra_stream, &cur_algorithm); - if (err == MZ_OK) - err = mz_stream_read_uint16(file_extra_stream, &cur_digest_size); - if ((err == MZ_OK) && (cur_algorithm == algorithm) && (cur_digest_size <= digest_size) && - (cur_digest_size <= MZ_HASH_MAX_SIZE)) { - /* Read hash digest */ - if (mz_stream_read(file_extra_stream, digest, digest_size) == cur_digest_size) - return_err = MZ_OK; - break; - } else { - err = mz_stream_seek(file_extra_stream, cur_digest_size, MZ_SEEK_CUR); - } - } while (err == MZ_OK); - - mz_stream_mem_delete(&file_extra_stream); - - return return_err; -} - -int32_t mz_zip_reader_entry_get_first_hash(void *handle, uint16_t *algorithm, uint16_t *digest_size) { - mz_zip_reader *reader = (mz_zip_reader *)handle; - void *file_extra_stream = NULL; - int32_t err = MZ_OK; - uint16_t cur_algorithm = 0; - uint16_t cur_digest_size = 0; - - if (!reader || !algorithm) - return MZ_PARAM_ERROR; - - mz_stream_mem_create(&file_extra_stream); - mz_stream_mem_set_buffer(file_extra_stream, (void *)reader->file_info->extrafield, - reader->file_info->extrafield_size); - - err = mz_zip_extrafield_find(file_extra_stream, MZ_ZIP_EXTENSION_HASH, INT32_MAX, NULL); - if (err == MZ_OK) - err = mz_stream_read_uint16(file_extra_stream, &cur_algorithm); - if (err == MZ_OK) - err = mz_stream_read_uint16(file_extra_stream, &cur_digest_size); - - if (algorithm) - *algorithm = cur_algorithm; - if (digest_size) - *digest_size = cur_digest_size; - - mz_stream_mem_delete(&file_extra_stream); - - return err; -} - -int32_t mz_zip_reader_entry_get_info(void *handle, mz_zip_file **file_info) { - mz_zip_reader *reader = (mz_zip_reader *)handle; - int32_t err = MZ_OK; - if (!file_info || mz_zip_reader_is_open(handle) != MZ_OK) - return MZ_PARAM_ERROR; - *file_info = reader->file_info; - if (!*file_info) - return MZ_EXIST_ERROR; - return err; -} - -int32_t mz_zip_reader_entry_is_dir(void *handle) { - mz_zip_reader *reader = (mz_zip_reader *)handle; - if (mz_zip_reader_is_open(handle) != MZ_OK) - return MZ_PARAM_ERROR; - return mz_zip_entry_is_dir(reader->zip_handle); -} - -int32_t mz_zip_reader_entry_save_process(void *handle, void *stream, mz_stream_write_cb write_cb) { - mz_zip_reader *reader = (mz_zip_reader *)handle; - int32_t err = MZ_OK; - int32_t read = 0; - int32_t written = 0; - - if (mz_zip_reader_is_open(reader) != MZ_OK) - return MZ_PARAM_ERROR; - if (!reader->file_info || !write_cb) - return MZ_PARAM_ERROR; - - /* If the entry isn't open for reading, open it */ - if (mz_zip_entry_is_open(reader->zip_handle) != MZ_OK) - err = mz_zip_reader_entry_open(handle); - - if (err != MZ_OK) - return err; - - /* Unzip entry in zip file */ - read = mz_zip_reader_entry_read(handle, reader->buffer, sizeof(reader->buffer)); - - if (read == 0) { - /* If we are done close the entry */ - err = mz_zip_reader_entry_close(handle); - if (err != MZ_OK) - return err; - - return MZ_END_OF_STREAM; - } - - if (read > 0) { - /* Write the data to the specified stream */ - written = write_cb(stream, reader->buffer, read); - if (written != read) - return MZ_WRITE_ERROR; - } - - return read; -} - -int32_t mz_zip_reader_entry_save(void *handle, void *stream, mz_stream_write_cb write_cb) { - mz_zip_reader *reader = (mz_zip_reader *)handle; - uint64_t current_time = 0; - uint64_t update_time = 0; - int64_t current_pos = 0; - int64_t update_pos = 0; - int32_t err = MZ_OK; - int32_t written = 0; - - if (mz_zip_reader_is_open(reader) != MZ_OK) - return MZ_PARAM_ERROR; - if (!reader->file_info) - return MZ_PARAM_ERROR; - - /* Update the progress at the beginning */ - if (reader->progress_cb) - reader->progress_cb(handle, reader->progress_userdata, reader->file_info, current_pos); - - /* Write data to stream until done */ - while (err == MZ_OK) { - written = mz_zip_reader_entry_save_process(handle, stream, write_cb); - if (written == MZ_END_OF_STREAM) - break; - if (written > 0) - current_pos += written; - if (written < 0) - err = written; - - /* Update progress if enough time have passed */ - current_time = mz_os_ms_time(); - if ((current_time - update_time) > reader->progress_cb_interval_ms) { - if (reader->progress_cb) - reader->progress_cb(handle, reader->progress_userdata, reader->file_info, current_pos); - - update_pos = current_pos; - update_time = current_time; - } - } - - /* Update the progress at the end */ - if (reader->progress_cb && update_pos != current_pos) - reader->progress_cb(handle, reader->progress_userdata, reader->file_info, current_pos); - - return err; -} - -int32_t mz_zip_reader_entry_save_file(void *handle, const char *path) { - mz_zip_reader *reader = (mz_zip_reader *)handle; - void *stream = NULL; - uint32_t target_attrib = 0; - int32_t err_attrib = 0; - int32_t err = MZ_OK; - int32_t err_cb = MZ_OK; - char pathwfs[512]; - char directory[512]; - - if (mz_zip_reader_is_open(reader) != MZ_OK) - return MZ_PARAM_ERROR; - if (!reader->file_info || !path) - return MZ_PARAM_ERROR; - - /* Convert to forward slashes for unix which doesn't like backslashes */ - strncpy(pathwfs, path, sizeof(pathwfs) - 1); - pathwfs[sizeof(pathwfs) - 1] = 0; - mz_path_convert_slashes(pathwfs, MZ_PATH_SLASH_UNIX); - - if (reader->entry_cb) - reader->entry_cb(handle, reader->entry_userdata, reader->file_info, pathwfs); - - strncpy(directory, pathwfs, sizeof(directory) - 1); - directory[sizeof(directory) - 1] = 0; - mz_path_remove_filename(directory); - - /* If it is a directory entry then create a directory instead of writing file */ - if ((mz_zip_entry_is_dir(reader->zip_handle) == MZ_OK) && - (mz_zip_entry_is_symlink(reader->zip_handle) != MZ_OK)) { - err = mz_dir_make(directory); - return err; - } - - /* Check if file exists and ask if we want to overwrite */ - if (reader->overwrite_cb && mz_os_file_exists(pathwfs) == MZ_OK) { - err_cb = reader->overwrite_cb(handle, reader->overwrite_userdata, reader->file_info, pathwfs); - if (err_cb != MZ_OK) - return err; - /* We want to overwrite the file so we delete the existing one */ - mz_os_unlink(pathwfs); - } - - /* If symbolic link then properly construct destination path and link path */ - if ((mz_zip_entry_is_symlink(reader->zip_handle) == MZ_OK) && - (mz_path_has_slash(pathwfs) == MZ_OK)) { - mz_path_remove_slash(pathwfs); - mz_path_remove_filename(directory); - } - - /* Create the output directory if it doesn't already exist */ - if (mz_os_is_dir(directory) != MZ_OK) { - err = mz_dir_make(directory); - if (err != MZ_OK) - return err; - } - - /* If it is a symbolic link then create symbolic link instead of writing file */ - if (mz_zip_entry_is_symlink(reader->zip_handle) == MZ_OK) { - if (reader->file_info->linkname && *reader->file_info->linkname != 0) { - /* Create symbolic link from UNIX1 extrafield */ - err = mz_os_make_symlink(pathwfs, reader->file_info->linkname); - } else if (reader->file_info->uncompressed_size < UINT16_MAX) { - /* Create symbolic link from zip entry contents */ - mz_stream_mem_create(&stream); - err = mz_stream_mem_open(stream, NULL, MZ_OPEN_MODE_CREATE); - - if (err == MZ_OK) - err = mz_zip_reader_entry_save(handle, stream, mz_stream_write); - - if (err == MZ_OK) - err = mz_stream_write_uint8(stream, 0); - - if (err == MZ_OK) { - const char *linkname = NULL; - if (mz_stream_mem_get_buffer(stream, (const void **)&linkname) == MZ_OK) - err = mz_os_make_symlink(pathwfs, linkname); - } - - mz_stream_mem_close(stream); - mz_stream_mem_delete(&stream); - } - - /* Don't check return value because we aren't validating symbolic link target */ - return err; - } - - /* Create the file on disk so we can save to it */ - mz_stream_os_create(&stream); - err = mz_stream_os_open(stream, pathwfs, MZ_OPEN_MODE_CREATE); - - if (err == MZ_OK) - err = mz_zip_reader_entry_save(handle, stream, mz_stream_write); - - mz_stream_close(stream); - mz_stream_delete(&stream); - - if (err == MZ_OK) { - /* Set the time of the file that has been created */ - mz_os_set_file_date(pathwfs, reader->file_info->modified_date, - reader->file_info->accessed_date, reader->file_info->creation_date); - } - - if (err == MZ_OK) { - /* Set file attributes for the correct system */ - err_attrib = mz_zip_attrib_convert(MZ_HOST_SYSTEM(reader->file_info->version_madeby), - reader->file_info->external_fa, MZ_VERSION_MADEBY_HOST_SYSTEM, &target_attrib); - - if (err_attrib == MZ_OK) - mz_os_set_file_attribs(pathwfs, target_attrib); - } - - return err; -} - -int32_t mz_zip_reader_entry_save_buffer(void *handle, void *buf, int32_t len) { - mz_zip_reader *reader = (mz_zip_reader *)handle; - void *mem_stream = NULL; - int32_t err = MZ_OK; - - if (mz_zip_reader_is_open(reader) != MZ_OK) - return MZ_PARAM_ERROR; - if (!reader->file_info || reader->file_info->uncompressed_size > INT32_MAX) - return MZ_PARAM_ERROR; - if (len != (int32_t)reader->file_info->uncompressed_size) - return MZ_BUF_ERROR; - - /* Create a memory stream backed by our buffer and save to it */ - mz_stream_mem_create(&mem_stream); - mz_stream_mem_set_buffer(mem_stream, buf, len); - - err = mz_stream_mem_open(mem_stream, NULL, MZ_OPEN_MODE_READ); - if (err == MZ_OK) - err = mz_zip_reader_entry_save(handle, mem_stream, mz_stream_mem_write); - - mz_stream_mem_delete(&mem_stream); - return err; -} - -int32_t mz_zip_reader_entry_save_buffer_length(void *handle) { - mz_zip_reader *reader = (mz_zip_reader *)handle; - - if (mz_zip_reader_is_open(reader) != MZ_OK) - return MZ_PARAM_ERROR; - if (!reader->file_info || reader->file_info->uncompressed_size > INT32_MAX) - return MZ_PARAM_ERROR; - - /* Get the maximum size required for the save buffer */ - return (int32_t)reader->file_info->uncompressed_size; -} - -/***************************************************************************/ - -int32_t mz_zip_reader_save_all(void *handle, const char *destination_dir) { - mz_zip_reader *reader = (mz_zip_reader *)handle; - int32_t err = MZ_OK; - uint8_t *utf8_string = NULL; - char path[512]; - char utf8_name[256]; - char resolved_name[256]; - - err = mz_zip_reader_goto_first_entry(handle); - - if (err == MZ_END_OF_LIST) - return err; - - while (err == MZ_OK) { - /* Construct output path */ - path[0] = 0; - - strncpy(utf8_name, reader->file_info->filename, sizeof(utf8_name) - 1); - utf8_name[sizeof(utf8_name) - 1] = 0; - - if ((reader->encoding > 0) && (reader->file_info->flag & MZ_ZIP_FLAG_UTF8) == 0) { - utf8_string = mz_os_utf8_string_create(reader->file_info->filename, reader->encoding); - if (utf8_string) { - strncpy(utf8_name, (char *)utf8_string, sizeof(utf8_name) - 1); - utf8_name[sizeof(utf8_name) - 1] = 0; - mz_os_utf8_string_delete(&utf8_string); - } - } - - err = mz_path_resolve(utf8_name, resolved_name, sizeof(resolved_name)); - if (err != MZ_OK) - break; - - if (destination_dir) - mz_path_combine(path, destination_dir, sizeof(path)); - - mz_path_combine(path, resolved_name, sizeof(path)); - - /* Save file to disk */ - err = mz_zip_reader_entry_save_file(handle, path); - - if (err == MZ_OK) - err = mz_zip_reader_goto_next_entry(handle); - } - - if (err == MZ_END_OF_LIST) - return MZ_OK; - - return err; -} - -/***************************************************************************/ - -void mz_zip_reader_set_pattern(void *handle, const char *pattern, uint8_t ignore_case) { - mz_zip_reader *reader = (mz_zip_reader *)handle; - reader->pattern = pattern; - reader->pattern_ignore_case = ignore_case; -} - -void mz_zip_reader_set_password(void *handle, const char *password) { - mz_zip_reader *reader = (mz_zip_reader *)handle; - reader->password = password; -} - -void mz_zip_reader_set_raw(void *handle, uint8_t raw) { - mz_zip_reader *reader = (mz_zip_reader *)handle; - reader->raw = raw; -} - -int32_t mz_zip_reader_get_raw(void *handle, uint8_t *raw) { - mz_zip_reader *reader = (mz_zip_reader *)handle; - if (!raw) - return MZ_PARAM_ERROR; - *raw = reader->raw; - return MZ_OK; -} - -int32_t mz_zip_reader_get_zip_cd(void *handle, uint8_t *zip_cd) { - mz_zip_reader *reader = (mz_zip_reader *)handle; - if (!zip_cd) - return MZ_PARAM_ERROR; - *zip_cd = reader->cd_zipped; - return MZ_OK; -} - -int32_t mz_zip_reader_get_comment(void *handle, const char **comment) { - mz_zip_reader *reader = (mz_zip_reader *)handle; - if (mz_zip_reader_is_open(reader) != MZ_OK) - return MZ_PARAM_ERROR; - if (!comment) - return MZ_PARAM_ERROR; - return mz_zip_get_comment(reader->zip_handle, comment); -} - -int32_t mz_zip_reader_set_recover(void *handle, uint8_t recover) { - mz_zip_reader *reader = (mz_zip_reader *)handle; - if (!reader) - return MZ_PARAM_ERROR; - reader->recover = recover; - return MZ_OK; -} - -void mz_zip_reader_set_encoding(void *handle, int32_t encoding) { - mz_zip_reader *reader = (mz_zip_reader *)handle; - reader->encoding = encoding; -} - -void mz_zip_reader_set_sign_required(void *handle, uint8_t sign_required) { - mz_zip_reader *reader = (mz_zip_reader *)handle; - reader->sign_required = sign_required; -} - -void mz_zip_reader_set_overwrite_cb(void *handle, void *userdata, mz_zip_reader_overwrite_cb cb) { - mz_zip_reader *reader = (mz_zip_reader *)handle; - reader->overwrite_cb = cb; - reader->overwrite_userdata = userdata; -} - -void mz_zip_reader_set_password_cb(void *handle, void *userdata, mz_zip_reader_password_cb cb) { - mz_zip_reader *reader = (mz_zip_reader *)handle; - reader->password_cb = cb; - reader->password_userdata = userdata; -} - -void mz_zip_reader_set_progress_cb(void *handle, void *userdata, mz_zip_reader_progress_cb cb) { - mz_zip_reader *reader = (mz_zip_reader *)handle; - reader->progress_cb = cb; - reader->progress_userdata = userdata; -} - -void mz_zip_reader_set_progress_interval(void *handle, uint32_t milliseconds) { - mz_zip_reader *reader = (mz_zip_reader *)handle; - reader->progress_cb_interval_ms = milliseconds; -} - -void mz_zip_reader_set_entry_cb(void *handle, void *userdata, mz_zip_reader_entry_cb cb) { - mz_zip_reader *reader = (mz_zip_reader *)handle; - reader->entry_cb = cb; - reader->entry_userdata = userdata; -} - -int32_t mz_zip_reader_get_zip_handle(void *handle, void **zip_handle) { - mz_zip_reader *reader = (mz_zip_reader *)handle; - if (!zip_handle) - return MZ_PARAM_ERROR; - *zip_handle = reader->zip_handle; - if (!*zip_handle) - return MZ_EXIST_ERROR; - return MZ_OK; -} - -/***************************************************************************/ - -void *mz_zip_reader_create(void **handle) { - mz_zip_reader *reader = NULL; - - reader = (mz_zip_reader *)calloc(1, sizeof(mz_zip_reader)); - if (reader) { - reader->recover = 1; - reader->progress_cb_interval_ms = MZ_DEFAULT_PROGRESS_INTERVAL; - } - if (handle) - *handle = reader; - - return reader; -} - -void mz_zip_reader_delete(void **handle) { - mz_zip_reader *reader = NULL; - if (!handle) - return; - reader = (mz_zip_reader *)*handle; - if (reader) { - mz_zip_reader_close(reader); - free(reader); - } - *handle = NULL; -} - -/***************************************************************************/ - -typedef struct mz_zip_writer_s { - void *zip_handle; - void *file_stream; - void *buffered_stream; - void *split_stream; - void *sha256; - void *mem_stream; - void *file_extra_stream; - mz_zip_file file_info; - void *overwrite_userdata; - mz_zip_writer_overwrite_cb - overwrite_cb; - void *password_userdata; - mz_zip_writer_password_cb - password_cb; - void *progress_userdata; - mz_zip_writer_progress_cb - progress_cb; - uint32_t progress_cb_interval_ms; - void *entry_userdata; - mz_zip_writer_entry_cb - entry_cb; - const char *password; - const char *comment; - uint8_t *cert_data; - int32_t cert_data_size; - const char *cert_pwd; - uint16_t compress_method; - int16_t compress_level; - uint8_t follow_links; - uint8_t store_links; - uint8_t zip_cd; - uint8_t aes; - uint8_t raw; - uint8_t buffer[UINT16_MAX]; -} mz_zip_writer; - -/***************************************************************************/ - -int32_t mz_zip_writer_zip_cd(void *handle) { - mz_zip_writer *writer = (mz_zip_writer *)handle; - mz_zip_file cd_file; - uint64_t number_entry = 0; - int64_t cd_mem_length = 0; - int32_t err = MZ_OK; - int32_t extrafield_size = 0; - void *file_extra_stream = NULL; - void *cd_mem_stream = NULL; - - memset(&cd_file, 0, sizeof(cd_file)); - - mz_zip_get_number_entry(writer->zip_handle, &number_entry); - mz_zip_get_cd_mem_stream(writer->zip_handle, &cd_mem_stream); - mz_stream_seek(cd_mem_stream, 0, MZ_SEEK_END); - cd_mem_length = (uint32_t)mz_stream_tell(cd_mem_stream); - mz_stream_seek(cd_mem_stream, 0, MZ_SEEK_SET); - - cd_file.filename = MZ_ZIP_CD_FILENAME; - cd_file.modified_date = time(NULL); - cd_file.version_madeby = MZ_VERSION_MADEBY; - cd_file.compression_method = writer->compress_method; - cd_file.uncompressed_size = (int32_t)cd_mem_length; - cd_file.flag = MZ_ZIP_FLAG_UTF8; - - if (writer->password) - cd_file.flag |= MZ_ZIP_FLAG_ENCRYPTED; - - mz_stream_mem_create(&file_extra_stream); - mz_stream_mem_open(file_extra_stream, NULL, MZ_OPEN_MODE_CREATE); - - mz_zip_extrafield_write(file_extra_stream, MZ_ZIP_EXTENSION_CDCD, 8); - - mz_stream_write_uint64(file_extra_stream, number_entry); - - mz_stream_mem_get_buffer(file_extra_stream, (const void **)&cd_file.extrafield); - mz_stream_mem_get_buffer_length(file_extra_stream, &extrafield_size); - cd_file.extrafield_size = (uint16_t)extrafield_size; - - err = mz_zip_writer_entry_open(handle, &cd_file); - if (err == MZ_OK) { - mz_stream_copy_stream(handle, mz_zip_writer_entry_write, cd_mem_stream, - NULL, (int32_t)cd_mem_length); - - mz_stream_seek(cd_mem_stream, 0, MZ_SEEK_SET); - mz_stream_mem_set_buffer_limit(cd_mem_stream, 0); - - err = mz_zip_writer_entry_close(writer); - } - - mz_stream_mem_delete(&file_extra_stream); - - return err; -} - -/***************************************************************************/ - -int32_t mz_zip_writer_is_open(void *handle) { - mz_zip_writer *writer = (mz_zip_writer *)handle; - if (!writer || !writer->zip_handle) - return MZ_PARAM_ERROR; - return MZ_OK; -} - -static int32_t mz_zip_writer_open_int(void *handle, void *stream, int32_t mode) { - mz_zip_writer *writer = (mz_zip_writer *)handle; - int32_t err = MZ_OK; - - mz_zip_create(&writer->zip_handle); - err = mz_zip_open(writer->zip_handle, stream, mode); - - if (err != MZ_OK) { - mz_zip_writer_close(handle); - return err; - } - - return MZ_OK; -} - -int32_t mz_zip_writer_open(void *handle, void *stream, uint8_t append) { - int32_t mode = MZ_OPEN_MODE_WRITE; - - if (append) { - mode |= MZ_OPEN_MODE_APPEND; - } else { - mode |= MZ_OPEN_MODE_CREATE; - } - - return mz_zip_writer_open_int(handle, stream, mode); -} - -int32_t mz_zip_writer_open_file(void *handle, const char *path, int64_t disk_size, uint8_t append) { - mz_zip_writer *writer = (mz_zip_writer *)handle; - int32_t mode = MZ_OPEN_MODE_READWRITE; - int32_t err = MZ_OK; - int32_t err_cb = 0; - char directory[320]; - - mz_zip_writer_close(handle); - - if (mz_os_file_exists(path) != MZ_OK) { - /* If the file doesn't exist, we don't append file */ - mode |= MZ_OPEN_MODE_CREATE; - - /* Create destination directory if it doesn't already exist */ - if (strchr(path, '/') || strrchr(path, '\\')) { - strncpy(directory, path, sizeof(directory) - 1); - directory[sizeof(directory) - 1] = 0; - mz_path_remove_filename(directory); - if (mz_os_file_exists(directory) != MZ_OK) - mz_dir_make(directory); - } - } else if (append) { - mode |= MZ_OPEN_MODE_APPEND; - } else { - if (writer->overwrite_cb) - err_cb = writer->overwrite_cb(handle, writer->overwrite_userdata, path); - - if (err_cb == MZ_INTERNAL_ERROR) - return err; - - if (err_cb == MZ_OK) - mode |= MZ_OPEN_MODE_CREATE; - else - mode |= MZ_OPEN_MODE_APPEND; - } - - mz_stream_os_create(&writer->file_stream); - mz_stream_buffered_create(&writer->buffered_stream); - mz_stream_split_create(&writer->split_stream); - - mz_stream_set_base(writer->buffered_stream, writer->file_stream); - mz_stream_set_base(writer->split_stream, writer->buffered_stream); - - mz_stream_split_set_prop_int64(writer->split_stream, MZ_STREAM_PROP_DISK_SIZE, disk_size); - - err = mz_stream_open(writer->split_stream, path, mode); - if (err == MZ_OK) - err = mz_zip_writer_open_int(handle, writer->split_stream, mode); - - return err; -} - -int32_t mz_zip_writer_open_file_in_memory(void *handle, const char *path) { - mz_zip_writer *writer = (mz_zip_writer *)handle; - void *file_stream = NULL; - int64_t file_size = 0; - int32_t err = 0; - - mz_zip_writer_close(handle); - - mz_stream_os_create(&file_stream); - - err = mz_stream_os_open(file_stream, path, MZ_OPEN_MODE_READ); - - if (err != MZ_OK) { - mz_stream_os_delete(&file_stream); - mz_zip_writer_close(handle); - return err; - } - - mz_stream_os_seek(file_stream, 0, MZ_SEEK_END); - file_size = mz_stream_os_tell(file_stream); - mz_stream_os_seek(file_stream, 0, MZ_SEEK_SET); - - if ((file_size <= 0) || (file_size > UINT32_MAX)) { - /* Memory size is too large or too small */ - - mz_stream_os_close(file_stream); - mz_stream_os_delete(&file_stream); - mz_zip_writer_close(handle); - return MZ_MEM_ERROR; - } - - mz_stream_mem_create(&writer->mem_stream); - mz_stream_mem_set_grow_size(writer->mem_stream, (int32_t)file_size); - mz_stream_mem_open(writer->mem_stream, NULL, MZ_OPEN_MODE_CREATE); - - err = mz_stream_copy(writer->mem_stream, file_stream, (int32_t)file_size); - - mz_stream_os_close(file_stream); - mz_stream_os_delete(&file_stream); - - if (err == MZ_OK) - err = mz_zip_writer_open(handle, writer->mem_stream, 1); - if (err != MZ_OK) - mz_zip_writer_close(handle); - - return err; -} - -int32_t mz_zip_writer_close(void *handle) { - mz_zip_writer *writer = (mz_zip_writer *)handle; - int32_t err = MZ_OK; - - if (writer->zip_handle) { - mz_zip_set_version_madeby(writer->zip_handle, MZ_VERSION_MADEBY); - if (writer->comment) - mz_zip_set_comment(writer->zip_handle, writer->comment); - if (writer->zip_cd) - mz_zip_writer_zip_cd(writer); - - err = mz_zip_close(writer->zip_handle); - mz_zip_delete(&writer->zip_handle); - } - - if (writer->split_stream) { - mz_stream_split_close(writer->split_stream); - mz_stream_split_delete(&writer->split_stream); - } - - if (writer->buffered_stream) - mz_stream_buffered_delete(&writer->buffered_stream); - - if (writer->file_stream) - mz_stream_os_delete(&writer->file_stream); - - if (writer->mem_stream) { - mz_stream_mem_close(writer->mem_stream); - mz_stream_mem_delete(&writer->mem_stream); - } - - return err; -} - -/***************************************************************************/ - -int32_t mz_zip_writer_entry_open(void *handle, mz_zip_file *file_info) { - mz_zip_writer *writer = (mz_zip_writer *)handle; - int32_t err = MZ_OK; - const char *password = NULL; - char password_buf[120]; - - /* Copy file info to access data upon close */ - memcpy(&writer->file_info, file_info, sizeof(mz_zip_file)); - - if (writer->entry_cb) - writer->entry_cb(handle, writer->entry_userdata, &writer->file_info); - - password = writer->password; - - /* Check if we need a password and ask for it if we need to */ - if (!password && writer->password_cb && (writer->file_info.flag & MZ_ZIP_FLAG_ENCRYPTED)) { - writer->password_cb(handle, writer->password_userdata, &writer->file_info, - password_buf, sizeof(password_buf)); - password = password_buf; - } - -#ifndef MZ_ZIP_NO_CRYPTO - if (mz_zip_attrib_is_dir(writer->file_info.external_fa, writer->file_info.version_madeby) != MZ_OK) { - /* Start calculating sha256 */ - mz_crypt_sha_create(&writer->sha256); - mz_crypt_sha_set_algorithm(writer->sha256, MZ_HASH_SHA256); - mz_crypt_sha_begin(writer->sha256); - } -#endif - - /* Open entry in zip */ - err = mz_zip_entry_write_open(writer->zip_handle, &writer->file_info, writer->compress_level, - writer->raw, password); - - return err; -} - -#if !defined(MZ_ZIP_NO_CRYPTO) && defined(MZ_ZIP_SIGNING) -int32_t mz_zip_writer_entry_sign(void *handle, uint8_t *message, int32_t message_size, - uint8_t *cert_data, int32_t cert_data_size, const char *cert_pwd) { - mz_zip_writer *writer = (mz_zip_writer *)handle; - int32_t err = MZ_OK; - int32_t signature_size = 0; - uint8_t *signature = NULL; - - if (!writer || !cert_data || cert_data_size <= 0) - return MZ_PARAM_ERROR; - if (mz_zip_entry_is_open(writer->zip_handle) != MZ_OK) - return MZ_PARAM_ERROR; - - /* Sign message with certificate */ - err = mz_crypt_sign(message, message_size, cert_data, cert_data_size, cert_pwd, - &signature, &signature_size); - - if (err == MZ_OK && signature) { - /* Write signature zip extra field */ - err = mz_zip_extrafield_write(writer->file_extra_stream, MZ_ZIP_EXTENSION_SIGN, - (uint16_t)signature_size); - - if (err == MZ_OK) { - if (mz_stream_write(writer->file_extra_stream, signature, signature_size) != signature_size) - err = MZ_WRITE_ERROR; - } - - free(signature); - } - - return err; -} -#endif - -int32_t mz_zip_writer_entry_close(void *handle) { - mz_zip_writer *writer = (mz_zip_writer *)handle; - int32_t err = MZ_OK; -#ifndef MZ_ZIP_NO_CRYPTO - const uint8_t *extrafield = NULL; - int32_t extrafield_size = 0; - int16_t field_length_hash = 0; - uint8_t sha256[MZ_HASH_SHA256_SIZE]; - - if (writer->sha256) { - mz_crypt_sha_end(writer->sha256, sha256, sizeof(sha256)); - mz_crypt_sha_delete(&writer->sha256); - - /* Copy extrafield so we can append our own fields before close */ - mz_stream_mem_create(&writer->file_extra_stream); - mz_stream_mem_open(writer->file_extra_stream, NULL, MZ_OPEN_MODE_CREATE); - - /* Write sha256 hash to extrafield */ - field_length_hash = 4 + MZ_HASH_SHA256_SIZE; - err = mz_zip_extrafield_write(writer->file_extra_stream, MZ_ZIP_EXTENSION_HASH, field_length_hash); - if (err == MZ_OK) - err = mz_stream_write_uint16(writer->file_extra_stream, MZ_HASH_SHA256); - if (err == MZ_OK) - err = mz_stream_write_uint16(writer->file_extra_stream, MZ_HASH_SHA256_SIZE); - if (err == MZ_OK) { - if (mz_stream_write(writer->file_extra_stream, sha256, sizeof(sha256)) != MZ_HASH_SHA256_SIZE) - err = MZ_WRITE_ERROR; - } - -#ifdef MZ_ZIP_SIGNING - if ((err == MZ_OK) && (writer->cert_data) && (writer->cert_data_size > 0)) { - /* Sign entry if not zipping cd or if it is cd being zipped */ - if (!writer->zip_cd || strcmp(writer->file_info.filename, MZ_ZIP_CD_FILENAME) == 0) { - err = mz_zip_writer_entry_sign(handle, sha256, sizeof(sha256), - writer->cert_data, writer->cert_data_size, writer->cert_pwd); - } - } -#endif - - if ((writer->file_info.extrafield) && (writer->file_info.extrafield_size > 0)) - mz_stream_mem_write(writer->file_extra_stream, writer->file_info.extrafield, - writer->file_info.extrafield_size); - - /* Update extra field for central directory after adding extra fields */ - mz_stream_mem_get_buffer(writer->file_extra_stream, (const void **)&extrafield); - mz_stream_mem_get_buffer_length(writer->file_extra_stream, &extrafield_size); - - mz_zip_entry_set_extrafield(writer->zip_handle, extrafield, (uint16_t)extrafield_size); - } -#endif - - if (err == MZ_OK) { - if (writer->raw) - err = mz_zip_entry_close_raw(writer->zip_handle, writer->file_info.uncompressed_size, - writer->file_info.crc); - else - err = mz_zip_entry_close(writer->zip_handle); - } - - if (writer->file_extra_stream) - mz_stream_mem_delete(&writer->file_extra_stream); - - return err; -} - -int32_t mz_zip_writer_entry_write(void *handle, const void *buf, int32_t len) { - mz_zip_writer *writer = (mz_zip_writer *)handle; - int32_t written = 0; - written = mz_zip_entry_write(writer->zip_handle, buf, len); -#ifndef MZ_ZIP_NO_CRYPTO - if (written > 0 && writer->sha256) - mz_crypt_sha_update(writer->sha256, buf, written); -#endif - return written; -} -/***************************************************************************/ - -int32_t mz_zip_writer_add_process(void *handle, void *stream, mz_stream_read_cb read_cb) { - mz_zip_writer *writer = (mz_zip_writer *)handle; - int32_t read = 0; - int32_t written = 0; - int32_t err = MZ_OK; - - if (mz_zip_writer_is_open(writer) != MZ_OK) - return MZ_PARAM_ERROR; - /* If the entry isn't open for writing, open it */ - if (mz_zip_entry_is_open(writer->zip_handle) != MZ_OK) - return MZ_PARAM_ERROR; - if (!read_cb) - return MZ_PARAM_ERROR; - - read = read_cb(stream, writer->buffer, sizeof(writer->buffer)); - if (read == 0) - return MZ_END_OF_STREAM; - if (read < 0) { - err = read; - return err; - } - - written = mz_zip_writer_entry_write(handle, writer->buffer, read); - if (written != read) - return MZ_WRITE_ERROR; - - return written; -} - -int32_t mz_zip_writer_add(void *handle, void *stream, mz_stream_read_cb read_cb) { - mz_zip_writer *writer = (mz_zip_writer *)handle; - uint64_t current_time = 0; - uint64_t update_time = 0; - int64_t current_pos = 0; - int64_t update_pos = 0; - int32_t err = MZ_OK; - int32_t written = 0; - - /* Update the progress at the beginning */ - if (writer->progress_cb) - writer->progress_cb(handle, writer->progress_userdata, &writer->file_info, current_pos); - - /* Write data to stream until done */ - while (err == MZ_OK) { - written = mz_zip_writer_add_process(handle, stream, read_cb); - if (written == MZ_END_OF_STREAM) - break; - if (written > 0) - current_pos += written; - if (written < 0) - err = written; - - /* Update progress if enough time have passed */ - current_time = mz_os_ms_time(); - if ((current_time - update_time) > writer->progress_cb_interval_ms) { - if (writer->progress_cb) - writer->progress_cb(handle, writer->progress_userdata, &writer->file_info, current_pos); - - update_pos = current_pos; - update_time = current_time; - } - } - - /* Update the progress at the end */ - if (writer->progress_cb && update_pos != current_pos) - writer->progress_cb(handle, writer->progress_userdata, &writer->file_info, current_pos); - - return err; -} - -int32_t mz_zip_writer_add_info(void *handle, void *stream, mz_stream_read_cb read_cb, mz_zip_file *file_info) { - mz_zip_writer *writer = (mz_zip_writer *)handle; - int32_t err = MZ_OK; - - if (mz_zip_writer_is_open(handle) != MZ_OK) - return MZ_PARAM_ERROR; - if (!file_info) - return MZ_PARAM_ERROR; - - /* Add to zip */ - err = mz_zip_writer_entry_open(handle, file_info); - if (err != MZ_OK) - return err; - - if (stream) { - if (mz_zip_attrib_is_dir(writer->file_info.external_fa, writer->file_info.version_madeby) != MZ_OK) { - err = mz_zip_writer_add(handle, stream, read_cb); - if (err != MZ_OK) - return err; - } - } - - err = mz_zip_writer_entry_close(handle); - - return err; -} - -int32_t mz_zip_writer_add_buffer(void *handle, void *buf, int32_t len, mz_zip_file *file_info) { - void *mem_stream = NULL; - int32_t err = MZ_OK; - - if (mz_zip_writer_is_open(handle) != MZ_OK) - return MZ_PARAM_ERROR; - if (!buf) - return MZ_PARAM_ERROR; - - /* Create a memory stream backed by our buffer and add from it */ - mz_stream_mem_create(&mem_stream); - mz_stream_mem_set_buffer(mem_stream, buf, len); - - err = mz_stream_mem_open(mem_stream, NULL, MZ_OPEN_MODE_READ); - if (err == MZ_OK) - err = mz_zip_writer_add_info(handle, mem_stream, mz_stream_mem_read, file_info); - - mz_stream_mem_delete(&mem_stream); - return err; -} - -int32_t mz_zip_writer_add_file(void *handle, const char *path, const char *filename_in_zip) { - mz_zip_writer *writer = (mz_zip_writer *)handle; - mz_zip_file file_info; - uint32_t target_attrib = 0; - uint32_t src_attrib = 0; - int32_t err = MZ_OK; - uint8_t src_sys = 0; - void *stream = NULL; - char link_path[1024]; - const char *filename = filename_in_zip; - - if (mz_zip_writer_is_open(handle) != MZ_OK) - return MZ_PARAM_ERROR; - if (!path) - return MZ_PARAM_ERROR; - - if (!filename) { - err = mz_path_get_filename(path, &filename); - if (err != MZ_OK) - return err; - } - - memset(&file_info, 0, sizeof(file_info)); - - /* The path name saved, should not include a leading slash. */ - /* If it did, windows/xp and dynazip couldn't read the zip file. */ - - while (filename[0] == '\\' || filename[0] == '/') - filename += 1; - - /* Get information about the file on disk so we can store it in zip */ - - file_info.version_madeby = MZ_VERSION_MADEBY; - file_info.compression_method = writer->compress_method; - file_info.filename = filename; - file_info.uncompressed_size = mz_os_get_file_size(path); - file_info.flag = MZ_ZIP_FLAG_UTF8; - - if (writer->zip_cd) - file_info.flag |= MZ_ZIP_FLAG_MASK_LOCAL_INFO; - if (writer->aes) - file_info.aes_version = MZ_AES_VERSION; - - mz_os_get_file_date(path, &file_info.modified_date, &file_info.accessed_date, - &file_info.creation_date); - mz_os_get_file_attribs(path, &src_attrib); - - src_sys = MZ_HOST_SYSTEM(file_info.version_madeby); - - if ((src_sys != MZ_HOST_SYSTEM_MSDOS) && (src_sys != MZ_HOST_SYSTEM_WINDOWS_NTFS)) { - /* High bytes are OS specific attributes, low byte is always DOS attributes */ - if (mz_zip_attrib_convert(src_sys, src_attrib, MZ_HOST_SYSTEM_MSDOS, &target_attrib) == MZ_OK) - file_info.external_fa = target_attrib; - file_info.external_fa |= (src_attrib << 16); - } else { - file_info.external_fa = src_attrib; - } - - if (writer->store_links && mz_os_is_symlink(path) == MZ_OK) { - err = mz_os_read_symlink(path, link_path, sizeof(link_path)); - if (err == MZ_OK) - file_info.linkname = link_path; - } else if (mz_os_is_dir(path) != MZ_OK) { - mz_stream_os_create(&stream); - err = mz_stream_os_open(stream, path, MZ_OPEN_MODE_READ); - } - - if (err == MZ_OK) - err = mz_zip_writer_add_info(handle, stream, mz_stream_read, &file_info); - - if (stream) { - mz_stream_close(stream); - mz_stream_delete(&stream); - } - - return err; -} - -int32_t mz_zip_writer_add_path(void *handle, const char *path, const char *root_path, - uint8_t include_path, uint8_t recursive) { - mz_zip_writer *writer = (mz_zip_writer *)handle; - DIR *dir = NULL; - struct dirent *entry = NULL; - int32_t err = MZ_OK; - int16_t is_dir = 0; - const char *filename = NULL; - const char *filenameinzip = path; - char *wildcard_ptr = NULL; - char full_path[1024]; - char path_dir[1024]; - - if (strrchr(path, '*')) { - strncpy(path_dir, path, sizeof(path_dir) - 1); - path_dir[sizeof(path_dir) - 1] = 0; - mz_path_remove_filename(path_dir); - wildcard_ptr = path_dir + strlen(path_dir) + 1; - root_path = path = path_dir; - } else { - if (mz_os_is_dir(path) == MZ_OK) - is_dir = 1; - - /* Construct the filename that our file will be stored in the zip as */ - if (!root_path) - root_path = path; - - /* Should the file be stored with any path info at all? */ - if (!include_path) { - if (!is_dir && root_path == path) { - if (mz_path_get_filename(filenameinzip, &filename) == MZ_OK) - filenameinzip = filename; - } else { - filenameinzip += strlen(root_path); - } - } - - if (!writer->store_links && !writer->follow_links) { - if (mz_os_is_symlink(path) == MZ_OK) - return err; - } - - if (*filenameinzip != 0) - err = mz_zip_writer_add_file(handle, path, filenameinzip); - - if (!is_dir) - return err; - - if (writer->store_links) { - if (mz_os_is_symlink(path) == MZ_OK) - return err; - } - } - - dir = mz_os_open_dir(path); - - if (!dir) - return MZ_EXIST_ERROR; - - while ((entry = mz_os_read_dir(dir))) { - if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) - continue; - - full_path[0] = 0; - mz_path_combine(full_path, path, sizeof(full_path)); - mz_path_combine(full_path, entry->d_name, sizeof(full_path)); - - if (!recursive && mz_os_is_dir(full_path) == MZ_OK) - continue; - - if ((wildcard_ptr) && (mz_path_compare_wc(entry->d_name, wildcard_ptr, 1) != MZ_OK)) - continue; - - err = mz_zip_writer_add_path(handle, full_path, root_path, include_path, recursive); - if (err != MZ_OK) - break; - } - - mz_os_close_dir(dir); - return err; -} - -int32_t mz_zip_writer_copy_from_reader(void *handle, void *reader) { - mz_zip_writer *writer = (mz_zip_writer *)handle; - mz_zip_file *file_info = NULL; - int64_t compressed_size = 0; - int64_t uncompressed_size = 0; - uint32_t crc32 = 0; - int32_t err = MZ_OK; - uint8_t original_raw = 0; - void *reader_zip_handle = NULL; - void *writer_zip_handle = NULL; - - if (mz_zip_reader_is_open(reader) != MZ_OK) - return MZ_PARAM_ERROR; - if (mz_zip_writer_is_open(writer) != MZ_OK) - return MZ_PARAM_ERROR; - - err = mz_zip_reader_entry_get_info(reader, &file_info); - - if (err != MZ_OK) - return err; - - mz_zip_reader_get_zip_handle(reader, &reader_zip_handle); - mz_zip_writer_get_zip_handle(writer, &writer_zip_handle); - - /* Open entry for raw reading */ - err = mz_zip_entry_read_open(reader_zip_handle, 1, NULL); - - if (err == MZ_OK) { - /* Write entry raw, save original raw value */ - original_raw = writer->raw; - writer->raw = 1; - - err = mz_zip_writer_entry_open(writer, file_info); - - if ((err == MZ_OK) && - (mz_zip_attrib_is_dir(writer->file_info.external_fa, writer->file_info.version_madeby) != MZ_OK)) { - err = mz_zip_writer_add(writer, reader_zip_handle, mz_zip_entry_read); - } - - if (err == MZ_OK) { - err = mz_zip_entry_read_close(reader_zip_handle, &crc32, &compressed_size, &uncompressed_size); - if (err == MZ_OK) - err = mz_zip_entry_write_close(writer_zip_handle, crc32, compressed_size, uncompressed_size); - } - - if (mz_zip_entry_is_open(reader_zip_handle) == MZ_OK) - mz_zip_entry_close(reader_zip_handle); - - if (mz_zip_entry_is_open(writer_zip_handle) == MZ_OK) - mz_zip_entry_close(writer_zip_handle); - - writer->raw = original_raw; - } - - return err; -} - -/***************************************************************************/ - -void mz_zip_writer_set_password(void *handle, const char *password) { - mz_zip_writer *writer = (mz_zip_writer *)handle; - writer->password = password; -} - -void mz_zip_writer_set_comment(void *handle, const char *comment) { - mz_zip_writer *writer = (mz_zip_writer *)handle; - writer->comment = comment; -} - -void mz_zip_writer_set_raw(void *handle, uint8_t raw) { - mz_zip_writer *writer = (mz_zip_writer *)handle; - writer->raw = raw; -} - -int32_t mz_zip_writer_get_raw(void *handle, uint8_t *raw) { - mz_zip_writer *writer = (mz_zip_writer *)handle; - if (!raw) - return MZ_PARAM_ERROR; - *raw = writer->raw; - return MZ_OK; -} - -void mz_zip_writer_set_aes(void *handle, uint8_t aes) { - mz_zip_writer *writer = (mz_zip_writer *)handle; - writer->aes = aes; -} - -void mz_zip_writer_set_compress_method(void *handle, uint16_t compress_method) { - mz_zip_writer *writer = (mz_zip_writer *)handle; - writer->compress_method = compress_method; -} - -void mz_zip_writer_set_compress_level(void *handle, int16_t compress_level) { - mz_zip_writer *writer = (mz_zip_writer *)handle; - writer->compress_level = compress_level; -} - -void mz_zip_writer_set_follow_links(void *handle, uint8_t follow_links) { - mz_zip_writer *writer = (mz_zip_writer *)handle; - writer->follow_links = follow_links; -} - -void mz_zip_writer_set_store_links(void *handle, uint8_t store_links) { - mz_zip_writer *writer = (mz_zip_writer *)handle; - writer->store_links = store_links; -} - -void mz_zip_writer_set_zip_cd(void *handle, uint8_t zip_cd) { - mz_zip_writer *writer = (mz_zip_writer *)handle; - writer->zip_cd = zip_cd; -} - -int32_t mz_zip_writer_set_certificate(void *handle, const char *cert_path, const char *cert_pwd) { - mz_zip_writer *writer = (mz_zip_writer *)handle; - void *cert_stream = NULL; - uint8_t *cert_data = NULL; - int32_t cert_data_size = 0; - int32_t err = MZ_OK; - - if (!cert_path) - return MZ_PARAM_ERROR; - - cert_data_size = (int32_t)mz_os_get_file_size(cert_path); - - if (cert_data_size == 0) - return MZ_PARAM_ERROR; - - if (writer->cert_data) { - free(writer->cert_data); - writer->cert_data = NULL; - } - - cert_data = (uint8_t *)malloc(cert_data_size); - - /* Read pkcs12 certificate from disk */ - mz_stream_os_create(&cert_stream); - err = mz_stream_os_open(cert_stream, cert_path, MZ_OPEN_MODE_READ); - if (err == MZ_OK) { - if (mz_stream_os_read(cert_stream, cert_data, cert_data_size) != cert_data_size) - err = MZ_READ_ERROR; - mz_stream_os_close(cert_stream); - } - mz_stream_os_delete(&cert_stream); - - if (err == MZ_OK) { - writer->cert_data = cert_data; - writer->cert_data_size = cert_data_size; - writer->cert_pwd = cert_pwd; - } else { - free(cert_data); - } - - return err; -} - -void mz_zip_writer_set_overwrite_cb(void *handle, void *userdata, mz_zip_writer_overwrite_cb cb) { - mz_zip_writer *writer = (mz_zip_writer *)handle; - writer->overwrite_cb = cb; - writer->overwrite_userdata = userdata; -} - -void mz_zip_writer_set_password_cb(void *handle, void *userdata, mz_zip_writer_password_cb cb) { - mz_zip_writer *writer = (mz_zip_writer *)handle; - writer->password_cb = cb; - writer->password_userdata = userdata; -} - -void mz_zip_writer_set_progress_cb(void *handle, void *userdata, mz_zip_writer_progress_cb cb) { - mz_zip_writer *writer = (mz_zip_writer *)handle; - writer->progress_cb = cb; - writer->progress_userdata = userdata; -} - -void mz_zip_writer_set_progress_interval(void *handle, uint32_t milliseconds) { - mz_zip_writer *writer = (mz_zip_writer *)handle; - writer->progress_cb_interval_ms = milliseconds; -} - -void mz_zip_writer_set_entry_cb(void *handle, void *userdata, mz_zip_writer_entry_cb cb) { - mz_zip_writer *writer = (mz_zip_writer *)handle; - writer->entry_cb = cb; - writer->entry_userdata = userdata; -} - -int32_t mz_zip_writer_get_zip_handle(void *handle, void **zip_handle) { - mz_zip_writer *writer = (mz_zip_writer *)handle; - if (!zip_handle) - return MZ_PARAM_ERROR; - *zip_handle = writer->zip_handle; - if (!*zip_handle) - return MZ_EXIST_ERROR; - return MZ_OK; -} - -/***************************************************************************/ - -void *mz_zip_writer_create(void **handle) { - mz_zip_writer *writer = NULL; - - writer = (mz_zip_writer *)calloc(1, sizeof(mz_zip_writer)); - if (writer) { -#if defined(HAVE_WZAES) - writer->aes = 1; -#endif -#if defined(HAVE_ZLIB) || defined(HAVE_LIBCOMP) - writer->compress_method = MZ_COMPRESS_METHOD_DEFLATE; -#elif defined(HAVE_BZIP2) - writer->compress_method = MZ_COMPRESS_METHOD_BZIP2; -#elif defined(HAVE_LZMA) - writer->compress_method = MZ_COMPRESS_METHOD_LZMA; -#else - writer->compress_method = MZ_COMPRESS_METHOD_STORE; -#endif - writer->compress_level = MZ_COMPRESS_LEVEL_BEST; - writer->progress_cb_interval_ms = MZ_DEFAULT_PROGRESS_INTERVAL; - } - if (handle) - *handle = writer; - - return writer; -} - -void mz_zip_writer_delete(void **handle) { - mz_zip_writer *writer = NULL; - if (!handle) - return; - writer = (mz_zip_writer *)*handle; - if (writer) { - mz_zip_writer_close(writer); - - if (writer->cert_data) - free(writer->cert_data); - - writer->cert_data = NULL; - writer->cert_data_size = 0; - - free(writer); - } - *handle = NULL; -} - -/***************************************************************************/ diff --git a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_zip_rw.h b/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_zip_rw.h deleted file mode 100644 index 195b507..0000000 --- a/iosApp/Pods/SSZipArchive/SSZipArchive/minizip/mz_zip_rw.h +++ /dev/null @@ -1,285 +0,0 @@ -/* mz_zip_rw.h -- Zip reader/writer - part of the minizip-ng project - - Copyright (C) Nathan Moinvaziri - https://github.com/zlib-ng/minizip-ng - - This program is distributed under the terms of the same license as zlib. - See the accompanying LICENSE file for the full text of the license. -*/ - -#ifndef MZ_ZIP_RW_H -#define MZ_ZIP_RW_H - -#ifdef __cplusplus -extern "C" { -#endif - -/***************************************************************************/ - -typedef int32_t (*mz_zip_reader_overwrite_cb)(void *handle, void *userdata, mz_zip_file *file_info, const char *path); -typedef int32_t (*mz_zip_reader_password_cb)(void *handle, void *userdata, mz_zip_file *file_info, char *password, int32_t max_password); -typedef int32_t (*mz_zip_reader_progress_cb)(void *handle, void *userdata, mz_zip_file *file_info, int64_t position); -typedef int32_t (*mz_zip_reader_entry_cb)(void *handle, void *userdata, mz_zip_file *file_info, const char *path); - -/***************************************************************************/ - -int32_t mz_zip_reader_is_open(void *handle); -/* Checks to see if the zip file is open */ - -int32_t mz_zip_reader_open(void *handle, void *stream); -/* Opens zip file from stream */ - -int32_t mz_zip_reader_open_file(void *handle, const char *path); -/* Opens zip file from a file path */ - -int32_t mz_zip_reader_open_file_in_memory(void *handle, const char *path); -/* Opens zip file from a file path into memory for faster access */ - -int32_t mz_zip_reader_open_buffer(void *handle, uint8_t *buf, int32_t len, uint8_t copy); -/* Opens zip file from memory buffer */ - -int32_t mz_zip_reader_close(void *handle); -/* Closes the zip file */ - -/***************************************************************************/ - -int32_t mz_zip_reader_unzip_cd(void *handle); -/* Unzip the central directory */ - -/***************************************************************************/ - -int32_t mz_zip_reader_goto_first_entry(void *handle); -/* Goto the first entry in the zip file that matches the pattern */ - -int32_t mz_zip_reader_goto_next_entry(void *handle); -/* Goto the next entry in the zip file that matches the pattern */ - -int32_t mz_zip_reader_locate_entry(void *handle, const char *filename, uint8_t ignore_case); -/* Locates an entry by filename */ - -int32_t mz_zip_reader_entry_open(void *handle); -/* Opens an entry for reading */ - -int32_t mz_zip_reader_entry_close(void *handle); -/* Closes an entry */ - -int32_t mz_zip_reader_entry_read(void *handle, void *buf, int32_t len); -/* Reads and entry after being opened */ - -int32_t mz_zip_reader_entry_has_sign(void *handle); -/* Checks to see if the entry has a signature */ - -int32_t mz_zip_reader_entry_sign_verify(void *handle); -/* Verifies a signature stored with the entry */ - -int32_t mz_zip_reader_entry_get_hash(void *handle, uint16_t algorithm, uint8_t *digest, int32_t digest_size); -/* Gets a hash algorithm from the entry's extra field */ - -int32_t mz_zip_reader_entry_get_first_hash(void *handle, uint16_t *algorithm, uint16_t *digest_size); -/* Gets the most secure hash algorithm from the entry's extra field */ - -int32_t mz_zip_reader_entry_get_info(void *handle, mz_zip_file **file_info); -/* Gets the current entry file info */ - -int32_t mz_zip_reader_entry_is_dir(void *handle); -/* Gets the current entry is a directory */ - -int32_t mz_zip_reader_entry_save(void *handle, void *stream, mz_stream_write_cb write_cb); -/* Save the current entry to a stream */ - -int32_t mz_zip_reader_entry_save_process(void *handle, void *stream, mz_stream_write_cb write_cb); -/* Saves a portion of the current entry to a stream callback */ - -int32_t mz_zip_reader_entry_save_file(void *handle, const char *path); -/* Save the current entry to a file */ - -int32_t mz_zip_reader_entry_save_buffer(void *handle, void *buf, int32_t len); -/* Save the current entry to a memory buffer */ - -int32_t mz_zip_reader_entry_save_buffer_length(void *handle); -/* Gets the length of the buffer required to save */ - -/***************************************************************************/ - -int32_t mz_zip_reader_save_all(void *handle, const char *destination_dir); -/* Save all files into a directory */ - -/***************************************************************************/ - -void mz_zip_reader_set_pattern(void *handle, const char *pattern, uint8_t ignore_case); -/* Sets the match pattern for entries in the zip file, if null all entries are matched */ - -void mz_zip_reader_set_password(void *handle, const char *password); -/* Sets the password required for extraction */ - -void mz_zip_reader_set_raw(void *handle, uint8_t raw); -/* Sets whether or not it should save the entry raw */ - -int32_t mz_zip_reader_get_raw(void *handle, uint8_t *raw); -/* Gets whether or not it should save the entry raw */ - -int32_t mz_zip_reader_get_zip_cd(void *handle, uint8_t *zip_cd); -/* Gets whether or not the archive has a zipped central directory */ - -int32_t mz_zip_reader_get_comment(void *handle, const char **comment); -/* Gets the comment for the central directory */ - -int32_t mz_zip_reader_set_recover(void *handle, uint8_t recover); -/* Sets the ability to recover the central dir by reading local file headers */ - -void mz_zip_reader_set_encoding(void *handle, int32_t encoding); -/* Sets whether or not it should support a special character encoding in zip file names. */ - -void mz_zip_reader_set_sign_required(void *handle, uint8_t sign_required); -/* Sets whether or not it a signature is required */ - -void mz_zip_reader_set_overwrite_cb(void *handle, void *userdata, mz_zip_reader_overwrite_cb cb); -/* Callback for what to do when a file is being overwritten */ - -void mz_zip_reader_set_password_cb(void *handle, void *userdata, mz_zip_reader_password_cb cb); -/* Callback for when a password is required and hasn't been set */ - -void mz_zip_reader_set_progress_cb(void *handle, void *userdata, mz_zip_reader_progress_cb cb); -/* Callback for extraction progress */ - -void mz_zip_reader_set_progress_interval(void *handle, uint32_t milliseconds); -/* Let at least milliseconds pass between calls to progress callback */ - -void mz_zip_reader_set_entry_cb(void *handle, void *userdata, mz_zip_reader_entry_cb cb); -/* Callback for zip file entries */ - -int32_t mz_zip_reader_get_zip_handle(void *handle, void **zip_handle); -/* Gets the underlying zip instance handle */ - -void* mz_zip_reader_create(void **handle); -/* Create new instance of zip reader */ - -void mz_zip_reader_delete(void **handle); -/* Delete instance of zip reader */ - -/***************************************************************************/ - -typedef int32_t (*mz_zip_writer_overwrite_cb)(void *handle, void *userdata, const char *path); -typedef int32_t (*mz_zip_writer_password_cb)(void *handle, void *userdata, mz_zip_file *file_info, char *password, int32_t max_password); -typedef int32_t (*mz_zip_writer_progress_cb)(void *handle, void *userdata, mz_zip_file *file_info, int64_t position); -typedef int32_t (*mz_zip_writer_entry_cb)(void *handle, void *userdata, mz_zip_file *file_info); - -/***************************************************************************/ - -int32_t mz_zip_writer_is_open(void *handle); -/* Checks to see if the zip file is open */ - -int32_t mz_zip_writer_open(void *handle, void *stream, uint8_t append); -/* Opens zip file from stream */ - -int32_t mz_zip_writer_open_file(void *handle, const char *path, int64_t disk_size, uint8_t append); -/* Opens zip file from a file path */ - -int32_t mz_zip_writer_open_file_in_memory(void *handle, const char *path); -/* Opens zip file from a file path into memory for faster access */ - -int32_t mz_zip_writer_close(void *handle); -/* Closes the zip file */ - -/***************************************************************************/ - -int32_t mz_zip_writer_entry_open(void *handle, mz_zip_file *file_info); -/* Opens an entry in the zip file for writing */ - -int32_t mz_zip_writer_entry_close(void *handle); -/* Closes entry in zip file */ - -int32_t mz_zip_writer_entry_write(void *handle, const void *buf, int32_t len); -/* Writes data into entry for zip */ - -/***************************************************************************/ - -int32_t mz_zip_writer_add(void *handle, void *stream, mz_stream_read_cb read_cb); -/* Writes all data to the currently open entry in the zip */ - -int32_t mz_zip_writer_add_process(void *handle, void *stream, mz_stream_read_cb read_cb); -/* Writes a portion of data to the currently open entry in the zip */ - -int32_t mz_zip_writer_add_info(void *handle, void *stream, mz_stream_read_cb read_cb, mz_zip_file *file_info); -/* Adds an entry to the zip based on the info */ - -int32_t mz_zip_writer_add_buffer(void *handle, void *buf, int32_t len, mz_zip_file *file_info); -/* Adds an entry to the zip with a memory buffer */ - -int32_t mz_zip_writer_add_file(void *handle, const char *path, const char *filename_in_zip); -/* Adds an entry to the zip from a file */ - -int32_t mz_zip_writer_add_path(void *handle, const char *path, const char *root_path, uint8_t include_path, - uint8_t recursive); -/* Enumerates a directory or pattern and adds entries to the zip */ - -int32_t mz_zip_writer_copy_from_reader(void *handle, void *reader); -/* Adds an entry from a zip reader instance */ - -/***************************************************************************/ - -void mz_zip_writer_set_password(void *handle, const char *password); -/* Password to use for encrypting files in the zip */ - -void mz_zip_writer_set_comment(void *handle, const char *comment); -/* Comment to use for the archive */ - -void mz_zip_writer_set_raw(void *handle, uint8_t raw); -/* Sets whether or not we should write the entry raw */ - -int32_t mz_zip_writer_get_raw(void *handle, uint8_t *raw); -/* Gets whether or not we should write the entry raw */ - -void mz_zip_writer_set_aes(void *handle, uint8_t aes); -/* Use aes encryption when adding files in zip */ - -void mz_zip_writer_set_compress_method(void *handle, uint16_t compress_method); -/* Sets the compression method when adding files in zip */ - -void mz_zip_writer_set_compress_level(void *handle, int16_t compress_level); -/* Sets the compression level when adding files in zip */ - -void mz_zip_writer_set_follow_links(void *handle, uint8_t follow_links); -/* Follow symbolic links when traversing directories and files to add */ - -void mz_zip_writer_set_store_links(void *handle, uint8_t store_links); -/* Store symbolic links in zip file */ - -void mz_zip_writer_set_zip_cd(void *handle, uint8_t zip_cd); -/* Sets whether or not central directory should be zipped */ - -int32_t mz_zip_writer_set_certificate(void *handle, const char *cert_path, const char *cert_pwd); -/* Sets the certificate and timestamp url to use for signing when adding files in zip */ - -void mz_zip_writer_set_overwrite_cb(void *handle, void *userdata, mz_zip_writer_overwrite_cb cb); -/* Callback for what to do when zip file already exists */ - -void mz_zip_writer_set_password_cb(void *handle, void *userdata, mz_zip_writer_password_cb cb); -/* Callback for ask if a password is required for adding */ - -void mz_zip_writer_set_progress_cb(void *handle, void *userdata, mz_zip_writer_progress_cb cb); -/* Callback for compression progress */ - -void mz_zip_writer_set_progress_interval(void *handle, uint32_t milliseconds); -/* Let at least milliseconds pass between calls to progress callback */ - -void mz_zip_writer_set_entry_cb(void *handle, void *userdata, mz_zip_writer_entry_cb cb); -/* Callback for zip file entries */ - -int32_t mz_zip_writer_get_zip_handle(void *handle, void **zip_handle); -/* Gets the underlying zip handle */ - -void* mz_zip_writer_create(void **handle); -/* Create new instance of zip writer */ - -void mz_zip_writer_delete(void **handle); -/* Delete instance of zip writer */ - -/***************************************************************************/ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-acknowledgements.markdown b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-acknowledgements.markdown index 715f7a8..102af75 100644 --- a/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-acknowledgements.markdown +++ b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-acknowledgements.markdown @@ -1,27 +1,3 @@ # Acknowledgements This application makes use of the following third party libraries: - -## SSZipArchive - -Copyright (c) 2013-2021, ZipArchive, https://github.com/ZipArchive - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - Generated by CocoaPods - https://cocoapods.org diff --git a/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-acknowledgements.plist b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-acknowledgements.plist index fcc9083..7acbad1 100644 --- a/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-acknowledgements.plist +++ b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-acknowledgements.plist @@ -12,36 +12,6 @@ Type PSGroupSpecifier - - FooterText - Copyright (c) 2013-2021, ZipArchive, https://github.com/ZipArchive - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - License - MIT - Title - SSZipArchive - Type - PSGroupSpecifier - FooterText Generated by CocoaPods - https://cocoapods.org diff --git a/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks-Debug-input-files.xcfilelist b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks-Debug-input-files.xcfilelist index f6ae551..39d6055 100644 --- a/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks-Debug-input-files.xcfilelist +++ b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks-Debug-input-files.xcfilelist @@ -1,3 +1,2 @@ ${PODS_ROOT}/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks.sh -${BUILT_PRODUCTS_DIR}/SSZipArchive/SSZipArchive.framework ${PODS_ROOT}/../../shared/build/cocoapods/framework/shared.framework \ No newline at end of file diff --git a/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks-Debug-output-files.xcfilelist b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks-Debug-output-files.xcfilelist index c4ff9ab..54fce2b 100644 --- a/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks-Debug-output-files.xcfilelist +++ b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks-Debug-output-files.xcfilelist @@ -1,2 +1 @@ -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SSZipArchive.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/shared.framework \ No newline at end of file diff --git a/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks-Release-input-files.xcfilelist b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks-Release-input-files.xcfilelist index f6ae551..39d6055 100644 --- a/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks-Release-input-files.xcfilelist +++ b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks-Release-input-files.xcfilelist @@ -1,3 +1,2 @@ ${PODS_ROOT}/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks.sh -${BUILT_PRODUCTS_DIR}/SSZipArchive/SSZipArchive.framework ${PODS_ROOT}/../../shared/build/cocoapods/framework/shared.framework \ No newline at end of file diff --git a/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks-Release-output-files.xcfilelist b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks-Release-output-files.xcfilelist index c4ff9ab..54fce2b 100644 --- a/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks-Release-output-files.xcfilelist +++ b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks-Release-output-files.xcfilelist @@ -1,2 +1 @@ -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SSZipArchive.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/shared.framework \ No newline at end of file diff --git a/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks.sh b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks.sh index dd78d1c..4339d47 100755 --- a/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks.sh +++ b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks.sh @@ -176,11 +176,9 @@ code_sign_if_enabled() { } if [[ "$CONFIGURATION" == "Debug" ]]; then - install_framework "${BUILT_PRODUCTS_DIR}/SSZipArchive/SSZipArchive.framework" install_framework "${PODS_ROOT}/../../shared/build/cocoapods/framework/shared.framework" fi if [[ "$CONFIGURATION" == "Release" ]]; then - install_framework "${BUILT_PRODUCTS_DIR}/SSZipArchive/SSZipArchive.framework" install_framework "${PODS_ROOT}/../../shared/build/cocoapods/framework/shared.framework" fi if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then diff --git a/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp.debug.xcconfig b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp.debug.xcconfig index e2d904a..dbc2bf7 100644 --- a/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp.debug.xcconfig +++ b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp.debug.xcconfig @@ -1,10 +1,9 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO ENABLE_USER_SCRIPT_SANDBOXING = NO -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SSZipArchive" "${PODS_ROOT}/../../shared/build/cocoapods/framework" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/../../shared/build/cocoapods/framework" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SSZipArchive/SSZipArchive.framework/Headers" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_LDFLAGS = $(inherited) -l"c++" -l"iconv" -l"z" -framework "SSZipArchive" -framework "Security" -framework "shared" +OTHER_LDFLAGS = $(inherited) -l"c++" -framework "shared" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. diff --git a/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp.release.xcconfig b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp.release.xcconfig index e2d904a..dbc2bf7 100644 --- a/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp.release.xcconfig +++ b/iosApp/Pods/Target Support Files/Pods-iosApp/Pods-iosApp.release.xcconfig @@ -1,10 +1,9 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO ENABLE_USER_SCRIPT_SANDBOXING = NO -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SSZipArchive" "${PODS_ROOT}/../../shared/build/cocoapods/framework" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/../../shared/build/cocoapods/framework" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SSZipArchive/SSZipArchive.framework/Headers" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_LDFLAGS = $(inherited) -l"c++" -l"iconv" -l"z" -framework "SSZipArchive" -framework "Security" -framework "shared" +OTHER_LDFLAGS = $(inherited) -l"c++" -framework "shared" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. diff --git a/iosApp/Pods/Target Support Files/SSZipArchive/ResourceBundle-SSZipArchive-SSZipArchive-Info.plist b/iosApp/Pods/Target Support Files/SSZipArchive/ResourceBundle-SSZipArchive-SSZipArchive-Info.plist deleted file mode 100644 index 33ec8cb..0000000 --- a/iosApp/Pods/Target Support Files/SSZipArchive/ResourceBundle-SSZipArchive-SSZipArchive-Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - ${PODS_DEVELOPMENT_LANGUAGE} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - BNDL - CFBundleShortVersionString - 2.5.5 - CFBundleSignature - ???? - CFBundleVersion - 1 - NSPrincipalClass - - - diff --git a/iosApp/Pods/Target Support Files/SSZipArchive/SSZipArchive-Info.plist b/iosApp/Pods/Target Support Files/SSZipArchive/SSZipArchive-Info.plist deleted file mode 100644 index 3ffe9d1..0000000 --- a/iosApp/Pods/Target Support Files/SSZipArchive/SSZipArchive-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - ${PODS_DEVELOPMENT_LANGUAGE} - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 2.5.5 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/iosApp/Pods/Target Support Files/SSZipArchive/SSZipArchive-dummy.m b/iosApp/Pods/Target Support Files/SSZipArchive/SSZipArchive-dummy.m deleted file mode 100644 index 9fabf79..0000000 --- a/iosApp/Pods/Target Support Files/SSZipArchive/SSZipArchive-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_SSZipArchive : NSObject -@end -@implementation PodsDummy_SSZipArchive -@end diff --git a/iosApp/Pods/Target Support Files/SSZipArchive/SSZipArchive-prefix.pch b/iosApp/Pods/Target Support Files/SSZipArchive/SSZipArchive-prefix.pch deleted file mode 100644 index beb2a24..0000000 --- a/iosApp/Pods/Target Support Files/SSZipArchive/SSZipArchive-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/iosApp/Pods/Target Support Files/SSZipArchive/SSZipArchive-umbrella.h b/iosApp/Pods/Target Support Files/SSZipArchive/SSZipArchive-umbrella.h deleted file mode 100644 index 332a149..0000000 --- a/iosApp/Pods/Target Support Files/SSZipArchive/SSZipArchive-umbrella.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "SSZipArchive.h" -#import "SSZipCommon.h" - -FOUNDATION_EXPORT double SSZipArchiveVersionNumber; -FOUNDATION_EXPORT const unsigned char SSZipArchiveVersionString[]; - diff --git a/iosApp/Pods/Target Support Files/SSZipArchive/SSZipArchive.debug.xcconfig b/iosApp/Pods/Target Support Files/SSZipArchive/SSZipArchive.debug.xcconfig deleted file mode 100644 index b2a51a4..0000000 --- a/iosApp/Pods/Target Support Files/SSZipArchive/SSZipArchive.debug.xcconfig +++ /dev/null @@ -1,14 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SSZipArchive -DEFINES_MODULE = YES -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HAVE_INTTYPES_H HAVE_PKCRYPT HAVE_STDINT_H HAVE_WZAES HAVE_ZLIB ZLIB_COMPAT -OTHER_LDFLAGS = $(inherited) -l"iconv" -l"z" -framework "Security" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/SSZipArchive -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iosApp/Pods/Target Support Files/SSZipArchive/SSZipArchive.modulemap b/iosApp/Pods/Target Support Files/SSZipArchive/SSZipArchive.modulemap deleted file mode 100644 index c30b519..0000000 --- a/iosApp/Pods/Target Support Files/SSZipArchive/SSZipArchive.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module SSZipArchive { - umbrella header "SSZipArchive-umbrella.h" - - export * - module * { export * } -} diff --git a/iosApp/Pods/Target Support Files/SSZipArchive/SSZipArchive.release.xcconfig b/iosApp/Pods/Target Support Files/SSZipArchive/SSZipArchive.release.xcconfig deleted file mode 100644 index b2a51a4..0000000 --- a/iosApp/Pods/Target Support Files/SSZipArchive/SSZipArchive.release.xcconfig +++ /dev/null @@ -1,14 +0,0 @@ -CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SSZipArchive -DEFINES_MODULE = YES -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HAVE_INTTYPES_H HAVE_PKCRYPT HAVE_STDINT_H HAVE_WZAES HAVE_ZLIB ZLIB_COMPAT -OTHER_LDFLAGS = $(inherited) -l"iconv" -l"z" -framework "Security" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/SSZipArchive -PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/iosApp/Pods/Target Support Files/shared/shared.debug.xcconfig b/iosApp/Pods/Target Support Files/shared/shared.debug.xcconfig index 92694ba..640705e 100644 --- a/iosApp/Pods/Target Support Files/shared/shared.debug.xcconfig +++ b/iosApp/Pods/Target Support Files/shared/shared.debug.xcconfig @@ -1,7 +1,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/shared ENABLE_USER_SCRIPT_SANDBOXING = NO -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SSZipArchive" "${PODS_ROOT}/../../shared/build/cocoapods/framework" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/../../shared/build/cocoapods/framework" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 KOTLIN_PROJECT_PATH = :shared OTHER_LDFLAGS = $(inherited) -l"c++" diff --git a/iosApp/Pods/Target Support Files/shared/shared.release.xcconfig b/iosApp/Pods/Target Support Files/shared/shared.release.xcconfig index 92694ba..640705e 100644 --- a/iosApp/Pods/Target Support Files/shared/shared.release.xcconfig +++ b/iosApp/Pods/Target Support Files/shared/shared.release.xcconfig @@ -1,7 +1,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/shared ENABLE_USER_SCRIPT_SANDBOXING = NO -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SSZipArchive" "${PODS_ROOT}/../../shared/build/cocoapods/framework" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/../../shared/build/cocoapods/framework" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 KOTLIN_PROJECT_PATH = :shared OTHER_LDFLAGS = $(inherited) -l"c++" diff --git a/shared/build.gradle.kts b/shared/build.gradle.kts index 6f6c618..3ff9e96 100644 --- a/shared/build.gradle.kts +++ b/shared/build.gradle.kts @@ -1,3 +1,4 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.plugin.mpp.BitcodeEmbeddingMode import org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType @@ -14,10 +15,8 @@ plugins { @OptIn(org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi::class) kotlin { androidTarget { - compilations.all { - kotlinOptions { - jvmTarget = "17" - } + compilerOptions { + jvmTarget.set(JvmTarget.JVM_17) } } @@ -42,10 +41,6 @@ kotlin { baseName = "shared" embedBitcode(BitcodeEmbeddingMode.BITCODE) } - - pod("SSZipArchive") { - version = "2.5.5" - } } sourceSets { @@ -119,7 +114,7 @@ kotlin { android { namespace = "com.techbeloved.hymnbook.shared" - compileSdk = 34 + compileSdk = 35 defaultConfig { minSdk = 21 } diff --git a/shared/shared.podspec b/shared/shared.podspec index 69f2e1f..6100920 100644 --- a/shared/shared.podspec +++ b/shared/shared.podspec @@ -9,7 +9,7 @@ Pod::Spec.new do |spec| spec.vendored_frameworks = 'build/cocoapods/framework/shared.framework' spec.libraries = 'c++' spec.ios.deployment_target = '16.0' - spec.dependency 'SSZipArchive', '2.5.5' + if !Dir.exist?('build/cocoapods/framework/shared.framework') || Dir.empty?('build/cocoapods/framework/shared.framework') raise " diff --git a/shared/src/androidAndDesktop/kotlin/com/techbeloved/hymnbook/shared/files/Decompress.kt b/shared/src/androidAndDesktop/kotlin/com/techbeloved/hymnbook/shared/files/Decompress.kt index 7a3f2b8..f03d99d 100644 --- a/shared/src/androidAndDesktop/kotlin/com/techbeloved/hymnbook/shared/files/Decompress.kt +++ b/shared/src/androidAndDesktop/kotlin/com/techbeloved/hymnbook/shared/files/Decompress.kt @@ -4,24 +4,30 @@ import java.io.File import java.io.FileOutputStream import java.util.zip.ZipInputStream +private val ignoreList = listOf("macosx", "ds_store") + internal class Decompress { fun unzip(zipInputStream: ZipInputStream, destinationDirPath: File) { zipInputStream.use { inputStream -> - var entry = inputStream.nextEntry - while (entry != null) { - val entryPath = File(destinationDirPath, entry.name) - if (entry.isDirectory) { - entryPath.mkdirs() - } else { - if (entryPath.exists()) { - entryPath.delete() + generateSequence { + inputStream.nextEntry + }.filter { entry -> + ignoreList.none { + entry.name.lowercase().contains(it, ignoreCase = true) + } + }.forEach { entry -> + val entryPath = File(destinationDirPath, entry.name) + if (entry.isDirectory) { + entryPath.mkdirs() + } else { + if (entryPath.exists()) { + entryPath.delete() + } + val fileOutputStream = FileOutputStream(entryPath) + inputStream.copyTo(fileOutputStream) + fileOutputStream.close() } - val fileOutputStream = FileOutputStream(entryPath) - inputStream.copyTo(fileOutputStream) - fileOutputStream.close() } - entry = inputStream.nextEntry - } } } -} \ No newline at end of file +} diff --git a/shared/src/androidMain/kotlin/com/techbeloved/hymnbook/shared/files/AssetArchiveExtractor.android.kt b/shared/src/androidMain/kotlin/com/techbeloved/hymnbook/shared/files/AssetArchiveExtractor.android.kt index 14c0428..355a7c6 100644 --- a/shared/src/androidMain/kotlin/com/techbeloved/hymnbook/shared/files/AssetArchiveExtractor.android.kt +++ b/shared/src/androidMain/kotlin/com/techbeloved/hymnbook/shared/files/AssetArchiveExtractor.android.kt @@ -1,5 +1,8 @@ package com.techbeloved.hymnbook.shared.files +import com.techbeloved.hymnbook.shared.dispatcher.DispatchersProvider +import com.techbeloved.hymnbook.shared.dispatcher.getPlatformDispatcherProvider +import kotlinx.coroutines.withContext import okio.Path import java.util.zip.ZipInputStream @@ -7,8 +10,10 @@ internal actual val defaultAssetArchiveExtractor: AssetArchiveExtractor by lazy private class AndroidArchiveExtractor( private val decompress: Decompress = Decompress(), + private val dispatchersProvider: DispatchersProvider = getPlatformDispatcherProvider(), ) : AssetArchiveExtractor { - override fun extract(assetFile: String, destination: Path) { - decompress.unzip(ZipInputStream(openAndroidAsset(assetFile)), destination.toFile()) - } + override suspend fun extract(assetFile: String, destination: Path) = + withContext(dispatchersProvider.io()) { + decompress.unzip(ZipInputStream(openAndroidAsset(assetFile)), destination.toFile()) + } } diff --git a/shared/src/androidMain/kotlin/com/techbeloved/hymnbook/shared/files/AssetFileProvider.android.kt b/shared/src/androidMain/kotlin/com/techbeloved/hymnbook/shared/files/AssetFileProvider.android.kt index d140895..53efbf4 100644 --- a/shared/src/androidMain/kotlin/com/techbeloved/hymnbook/shared/files/AssetFileProvider.android.kt +++ b/shared/src/androidMain/kotlin/com/techbeloved/hymnbook/shared/files/AssetFileProvider.android.kt @@ -3,7 +3,7 @@ package com.techbeloved.hymnbook.shared.files import com.techbeloved.hymnbook.shared.di.AndroidInjector import okio.source -internal actual val assetFileProvider: AssetFileProvider = AssetFileProvider { path -> +internal actual val assetFileSourceProvider: AssetFileSourceProvider = AssetFileSourceProvider { path -> openAndroidAsset(path).source() } diff --git a/shared/src/commonMain/composeResources/files/openlyrics/sample_songs.zip b/shared/src/commonMain/composeResources/files/openlyrics/sample_songs.zip index e2d5606..5ec114f 100644 Binary files a/shared/src/commonMain/composeResources/files/openlyrics/sample_songs.zip and b/shared/src/commonMain/composeResources/files/openlyrics/sample_songs.zip differ diff --git a/shared/src/commonMain/kotlin/com/techbeloved/hymnbook/shared/App.kt b/shared/src/commonMain/kotlin/com/techbeloved/hymnbook/shared/App.kt index 804630e..b245d70 100644 --- a/shared/src/commonMain/kotlin/com/techbeloved/hymnbook/shared/App.kt +++ b/shared/src/commonMain/kotlin/com/techbeloved/hymnbook/shared/App.kt @@ -1,6 +1,5 @@ package com.techbeloved.hymnbook.shared -import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.runtime.Composable import cafe.adriel.voyager.navigator.Navigator import com.techbeloved.hymnbook.shared.ui.home.HomeScreen diff --git a/shared/src/commonMain/kotlin/com/techbeloved/hymnbook/shared/files/AssetArchiveExtractor.kt b/shared/src/commonMain/kotlin/com/techbeloved/hymnbook/shared/files/AssetArchiveExtractor.kt index 946b4ab..ecef8bb 100644 --- a/shared/src/commonMain/kotlin/com/techbeloved/hymnbook/shared/files/AssetArchiveExtractor.kt +++ b/shared/src/commonMain/kotlin/com/techbeloved/hymnbook/shared/files/AssetArchiveExtractor.kt @@ -5,5 +5,5 @@ import okio.Path internal expect val defaultAssetArchiveExtractor: AssetArchiveExtractor internal fun interface AssetArchiveExtractor { - fun extract(assetFile: String, destination: Path) + suspend fun extract(assetFile: String, destination: Path) } diff --git a/shared/src/commonMain/kotlin/com/techbeloved/hymnbook/shared/files/AssetFileProvider.kt b/shared/src/commonMain/kotlin/com/techbeloved/hymnbook/shared/files/AssetFileProvider.kt deleted file mode 100644 index 83db028..0000000 --- a/shared/src/commonMain/kotlin/com/techbeloved/hymnbook/shared/files/AssetFileProvider.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.techbeloved.hymnbook.shared.files - -import okio.Source - -internal expect val assetFileProvider: AssetFileProvider -internal fun interface AssetFileProvider { - fun get(path: String): Source -} diff --git a/shared/src/commonMain/kotlin/com/techbeloved/hymnbook/shared/files/AssetFileSourceProvider.kt b/shared/src/commonMain/kotlin/com/techbeloved/hymnbook/shared/files/AssetFileSourceProvider.kt new file mode 100644 index 0000000..c0de912 --- /dev/null +++ b/shared/src/commonMain/kotlin/com/techbeloved/hymnbook/shared/files/AssetFileSourceProvider.kt @@ -0,0 +1,8 @@ +package com.techbeloved.hymnbook.shared.files + +import okio.Source + +internal expect val assetFileSourceProvider: AssetFileSourceProvider +internal fun interface AssetFileSourceProvider { + fun get(path: String): Source +} diff --git a/shared/src/commonMain/kotlin/com/techbeloved/hymnbook/shared/files/HashAssetFileUseCase.kt b/shared/src/commonMain/kotlin/com/techbeloved/hymnbook/shared/files/HashAssetFileUseCase.kt index 8ccd266..6c16e96 100644 --- a/shared/src/commonMain/kotlin/com/techbeloved/hymnbook/shared/files/HashAssetFileUseCase.kt +++ b/shared/src/commonMain/kotlin/com/techbeloved/hymnbook/shared/files/HashAssetFileUseCase.kt @@ -11,11 +11,11 @@ import okio.use internal class HashAssetFileUseCase( private val dispatchersProvider: DispatchersProvider = getPlatformDispatcherProvider(), - private val defaultAssetFileProvider: AssetFileProvider = assetFileProvider, + private val defaultAssetFileSourceProvider: AssetFileSourceProvider = assetFileSourceProvider, ) { suspend operator fun invoke(filePath: String): FileHash = withContext(dispatchersProvider.io()){ val hash = HashingSink.sha256(blackholeSink()).use { hashingSink -> - defaultAssetFileProvider.get(filePath).buffer().use { source -> + defaultAssetFileSourceProvider.get(filePath).buffer().use { source -> source.readAll(hashingSink) hashingSink.hash.hex() } diff --git a/shared/src/commonMain/kotlin/com/techbeloved/hymnbook/shared/files/SystemArchiveExtractor.kt b/shared/src/commonMain/kotlin/com/techbeloved/hymnbook/shared/files/SystemArchiveExtractor.kt new file mode 100644 index 0000000..8521e91 --- /dev/null +++ b/shared/src/commonMain/kotlin/com/techbeloved/hymnbook/shared/files/SystemArchiveExtractor.kt @@ -0,0 +1,43 @@ +package com.techbeloved.hymnbook.shared.files + +import com.techbeloved.hymnbook.shared.dispatcher.DispatchersProvider +import com.techbeloved.hymnbook.shared.dispatcher.getPlatformDispatcherProvider +import kotlinx.coroutines.withContext +import okio.FileSystem +import okio.Path +import okio.Path.Companion.toPath +import okio.buffer +import okio.openZip +import okio.use + +/** + * Extracts files from a zip archive. + * This excludes android assets. + * Regular archives in regular filesystems are supported for all platforms + * [Credits](https://www.reddit.com/r/Kotlin/comments/ut2n62/comment/ltdx229/?utm_source=share&utm_medium=web3x&utm_name=web3xcss&utm_term=1&utm_content=share_button) + */ +internal class SystemArchiveExtractor( + private val dispatchersProvider: DispatchersProvider = getPlatformDispatcherProvider(), +) { + suspend fun extract( + sourceFile: Path, + destination: Path, + sourceFileSystem: FileSystem, + destinationFileSystem: FileSystem, + ) = withContext(dispatchersProvider.io()) { + val zipFileSystem = sourceFileSystem.openZip(sourceFile) + val paths = zipFileSystem.listRecursively("/".toPath()) + .filter { zipFileSystem.metadata(it).isRegularFile } + + paths.forEach { zipFilePath -> + zipFileSystem.source(zipFilePath).buffer().use { source -> + val relativeFilePath = zipFilePath.toString().trimStart('/') + val fileToWrite = destination.resolve(relativeFilePath) + // create parent directories + fileToWrite.parent?.let { parent -> destinationFileSystem.createDirectories(parent) } + destinationFileSystem.sink(fileToWrite).buffer() + .use { sink -> sink.writeAll(source) } + } + } + } +} diff --git a/shared/src/commonMain/kotlin/com/techbeloved/hymnbook/shared/ui/detail/SongDetailScreen.kt b/shared/src/commonMain/kotlin/com/techbeloved/hymnbook/shared/ui/detail/SongDetailScreen.kt index e926bb4..849f972 100644 --- a/shared/src/commonMain/kotlin/com/techbeloved/hymnbook/shared/ui/detail/SongDetailScreen.kt +++ b/shared/src/commonMain/kotlin/com/techbeloved/hymnbook/shared/ui/detail/SongDetailScreen.kt @@ -1,6 +1,5 @@ package com.techbeloved.hymnbook.shared.ui.detail -import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize @@ -11,9 +10,8 @@ import androidx.compose.foundation.pager.HorizontalPager import androidx.compose.foundation.pager.rememberPagerState import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll -import androidx.compose.material.BottomAppBar -import androidx.compose.material.LocalContentColor -import androidx.compose.material.Text +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.Text import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.MaterialTheme @@ -29,7 +27,6 @@ import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.unit.sp import cafe.adriel.voyager.core.model.rememberScreenModel import cafe.adriel.voyager.core.screen.Screen -import com.techbeloved.hymnbook.shared.model.SongBookEntry import com.techbeloved.hymnbook.shared.model.SongPageEntry import com.techbeloved.hymnbook.shared.ui.AppTopBar import com.techbeloved.hymnbook.shared.ui.theme.crimsonText @@ -80,7 +77,7 @@ private fun SongDetailUi(state: SongUiDetail, modifier: Modifier = Modifier) { } -@OptIn(ExperimentalMaterial3Api::class, ExperimentalFoundationApi::class) +@OptIn(ExperimentalMaterial3Api::class) @Composable private fun SongPager( state: SongDetailPagerState.Content, @@ -93,16 +90,11 @@ private fun SongPager( topBar = { AppTopBar("", scrollBehaviour = scrollBehavior) }, - bottomBar = { - BottomAppBar { - - } - } ) { paddingValues -> HorizontalPager( state = rememberPagerState(state.initialPage, pageCount = { state.pages.size }), modifier = modifier.padding(paddingValues), - key = { state.pages[it] } + key = { state.pages[it].id } ) { page -> pageContent(state.pages[page]) } diff --git a/shared/src/commonMain/kotlin/com/techbeloved/hymnbook/shared/ui/home/HomeScreenModel.kt b/shared/src/commonMain/kotlin/com/techbeloved/hymnbook/shared/ui/home/HomeScreenModel.kt index 192af1c..a5de4b1 100644 --- a/shared/src/commonMain/kotlin/com/techbeloved/hymnbook/shared/ui/home/HomeScreenModel.kt +++ b/shared/src/commonMain/kotlin/com/techbeloved/hymnbook/shared/ui/home/HomeScreenModel.kt @@ -7,21 +7,15 @@ import com.techbeloved.hymnbook.shared.files.GetSavedFileHashUseCase import com.techbeloved.hymnbook.shared.files.HashAssetFileUseCase import com.techbeloved.hymnbook.shared.files.OkioFileSystemProvider import com.techbeloved.hymnbook.shared.files.SaveFileHashUseCase -import com.techbeloved.hymnbook.shared.files.assetFileProvider import com.techbeloved.hymnbook.shared.files.defaultOkioFileSystemProvider import com.techbeloved.hymnbook.shared.model.SongTitle import com.techbeloved.hymnbook.shared.openlyrics.ImportOpenLyricsUseCase import com.techbeloved.hymnbook.shared.titles.GetHymnTitlesUseCase -import hymnbook.shared.generated.resources.Res import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.launch -import okio.FileSystem -import okio.Path.Companion.toPath -import okio.SYSTEM -import org.jetbrains.compose.resources.ExperimentalResourceApi internal class HomeScreenModel( private val hashAssetFileUseCase: HashAssetFileUseCase = HashAssetFileUseCase(), @@ -42,38 +36,33 @@ internal class HomeScreenModel( } } - @OptIn(ExperimentalResourceApi::class) private suspend fun importBundledAssets() { val fileSystem = fileSystemProvider.get() // Lyrics assets val lyricsBundledAsset = "files/openlyrics/sample_songs.zip" - val path = Res.getUri(lyricsBundledAsset).toPath() - println("Path to resources: ${Res.getUri(lyricsBundledAsset)}") - println(path) - assetFileProvider.get(lyricsBundledAsset) - // FileSystem.SYSTEM.source(path) -// val lyricsAssetFileHash = hashAssetFileUseCase(lyricsBundledAsset) -// val savedLyricsArchiveHash = getSavedFileHashUseCase(lyricsBundledAsset) -// -// // Check if file has been imported already. Otherwise, we ignore -// if (savedLyricsArchiveHash?.sha256 != lyricsAssetFileHash.sha256) { -// val lyricsDir = fileSystem.tempDir / "lyrics/" -// fileSystem.fileSystem.createDirectory(lyricsDir) -// -// val result = extractArchiveUseCase( -// assetFilePath = lyricsBundledAsset, -// destination = lyricsDir -// ) -// if (result.isSuccess) { -// importOpenLyricsUseCase(lyricsDir) -// saveFileHashUseCase(lyricsAssetFileHash) -// // Delete temporary files -// fileSystem.fileSystem.deleteRecursively(lyricsDir) -// } else { -// result.exceptionOrNull()?.printStackTrace() -// } -// } + val lyricsAssetFileHash = hashAssetFileUseCase(lyricsBundledAsset) + val savedLyricsArchiveHash = getSavedFileHashUseCase(lyricsBundledAsset) + + // Check if file has been imported already. Otherwise, we ignore + println(fileSystem.userData) + if (savedLyricsArchiveHash?.sha256 != lyricsAssetFileHash.sha256) { + val lyricsDir = fileSystem.tempDir / "lyrics/" + fileSystem.fileSystem.createDirectory(lyricsDir) + + val result = extractArchiveUseCase( + assetFilePath = lyricsBundledAsset, + destination = lyricsDir + ) + if (result.isSuccess) { + importOpenLyricsUseCase(lyricsDir) + saveFileHashUseCase(lyricsAssetFileHash) + // Delete temporary files + fileSystem.fileSystem.deleteRecursively(lyricsDir) + } else { + result.exceptionOrNull()?.printStackTrace() + } + } } } diff --git a/shared/src/commonTest/kotlin/com/techbeloved/hymnbook/shared/files/HashFileUseCaseTest.kt b/shared/src/commonTest/kotlin/com/techbeloved/hymnbook/shared/files/HashFileUseCaseTest.kt index aa5019f..c289643 100644 --- a/shared/src/commonTest/kotlin/com/techbeloved/hymnbook/shared/files/HashFileUseCaseTest.kt +++ b/shared/src/commonTest/kotlin/com/techbeloved/hymnbook/shared/files/HashFileUseCaseTest.kt @@ -1,36 +1,24 @@ package com.techbeloved.hymnbook.shared.files import com.techbeloved.hymnbook.shared.model.file.FileHash -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.test.StandardTestDispatcher -import kotlinx.coroutines.test.TestScope -import kotlinx.coroutines.test.resetMain import kotlinx.coroutines.test.runTest -import kotlinx.coroutines.test.setMain import okio.Path.Companion.toPath import okio.fakefilesystem.FakeFileSystem import kotlin.test.AfterTest -import kotlin.test.BeforeTest import kotlin.test.Test import kotlin.test.assertEquals class HashFileUseCaseTest { - private val scope = TestScope() private val fakeFileSystem = FakeFileSystem() - private val useCase = HashAssetFileUseCase(defaultAssetFileProvider = { - fakeFileSystem.source(it.toPath()) - }) - - @BeforeTest - fun setUp() { - Dispatchers.setMain(StandardTestDispatcher(scope.testScheduler)) - } + private val useCase = HashAssetFileUseCase( + defaultAssetFileSourceProvider = { + fakeFileSystem.source(it.toPath()) + }) @AfterTest fun tearDown() { fakeFileSystem.checkNoOpenFiles() - Dispatchers.resetMain() } @Test diff --git a/shared/src/commonTest/kotlin/com/techbeloved/hymnbook/shared/openlyrics/SaveOpenLyricsUseCaseTest.kt b/shared/src/commonTest/kotlin/com/techbeloved/hymnbook/shared/openlyrics/SaveOpenLyricsUseCaseTest.kt index dfa06e8..5323a35 100644 --- a/shared/src/commonTest/kotlin/com/techbeloved/hymnbook/shared/openlyrics/SaveOpenLyricsUseCaseTest.kt +++ b/shared/src/commonTest/kotlin/com/techbeloved/hymnbook/shared/openlyrics/SaveOpenLyricsUseCaseTest.kt @@ -7,12 +7,7 @@ import com.techbeloved.hymnbook.shared.model.SongTitle import com.techbeloved.hymnbook.shared.model.ext.OpenLyricsSong import com.techbeloved.hymnbook.shared.testDatabaseDriver import com.techbeloved.hymnbook.shared.titles.GetHymnTitlesUseCase -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.test.StandardTestDispatcher -import kotlinx.coroutines.test.TestScope -import kotlinx.coroutines.test.resetMain import kotlinx.coroutines.test.runTest -import kotlinx.coroutines.test.setMain import kotlinx.datetime.Instant import kotlin.test.AfterTest import kotlin.test.BeforeTest @@ -20,26 +15,23 @@ import kotlin.test.Test import kotlin.test.assertEquals class SaveOpenLyricsUseCaseTest { - private val scope = TestScope() private lateinit var useCase: SaveOpenLyricsUseCase private lateinit var database: Database private lateinit var getHymnTitlesUseCase: GetHymnTitlesUseCase @BeforeTest fun setUp() { - Dispatchers.setMain(StandardTestDispatcher(scope.testScheduler)) database = Injector.getDatabase(testDatabaseDriver()) getHymnTitlesUseCase = GetHymnTitlesUseCase(database) useCase = SaveOpenLyricsUseCase( database, - instantProvider = { Instant.parse(isoString = "2023-01-01T00:00:00Z") }, + instantProvider = { Instant.parse("2023-01-01T00:00:00Z") }, ) } @AfterTest fun tearDown() { database.deleteAll() - Dispatchers.resetMain() } @Test diff --git a/shared/src/desktopMain/kotlin/com/techbeloved/hymnbook/shared/files/AssetArchiveExtractor.desktop.kt b/shared/src/desktopMain/kotlin/com/techbeloved/hymnbook/shared/files/AssetArchiveExtractor.desktop.kt index 0bbf82d..f6201a8 100644 --- a/shared/src/desktopMain/kotlin/com/techbeloved/hymnbook/shared/files/AssetArchiveExtractor.desktop.kt +++ b/shared/src/desktopMain/kotlin/com/techbeloved/hymnbook/shared/files/AssetArchiveExtractor.desktop.kt @@ -1,7 +1,13 @@ package com.techbeloved.hymnbook.shared.files -import okio.FileNotFoundException +import com.techbeloved.hymnbook.shared.dispatcher.DispatchersProvider +import com.techbeloved.hymnbook.shared.dispatcher.getPlatformDispatcherProvider +import kotlinx.coroutines.withContext +import okio.FileSystem import okio.Path +import okio.Path.Companion.toPath +import okio.asResourceFileSystem +import okio.buffer import java.util.zip.ZipInputStream internal actual val defaultAssetArchiveExtractor: AssetArchiveExtractor by lazy { @@ -10,15 +16,28 @@ internal actual val defaultAssetArchiveExtractor: AssetArchiveExtractor by lazy private class DesktopAssetArchiveExtractor( private val decompress: Decompress = Decompress(), + private val systemArchiveExtractor: SystemArchiveExtractor = SystemArchiveExtractor(), + private val dispatchersProvider: DispatchersProvider = getPlatformDispatcherProvider(), ) : AssetArchiveExtractor { - override fun extract(assetFile: String, destination: Path) { - val classLoader = Thread.currentThread().contextClassLoader - ?: (::DesktopAssetArchiveExtractor.javaClass.classLoader) - val assetStream = classLoader.getResourceAsStream(assetFile) - if (assetStream != null) { - decompress.unzip(ZipInputStream(assetStream), destination.toFile()) - } else { - throw FileNotFoundException("Failed to open asset") + override suspend fun extract(assetFile: String, destination: Path) { + try { + systemArchiveExtractor.extract( + sourceFile = getResourcePath(assetFile).toPath(), + destination = destination, + sourceFileSystem = FileSystem.RESOURCES, + destinationFileSystem = FileSystem.SYSTEM + ) + } catch (e: UnsupportedOperationException) { + e.printStackTrace() + withContext(dispatchersProvider.io()) { + val classLoader = Thread.currentThread().contextClassLoader + ?: (::DesktopAssetArchiveExtractor.javaClass.classLoader) + val assetStream = classLoader.asResourceFileSystem() + .source(getResourcePath(assetFile).toPath()) + .buffer() + .inputStream() + decompress.unzip(ZipInputStream(assetStream), destination.toFile()) + } } } } diff --git a/shared/src/desktopMain/kotlin/com/techbeloved/hymnbook/shared/files/AssetFileProvider.desktop.kt b/shared/src/desktopMain/kotlin/com/techbeloved/hymnbook/shared/files/AssetFileProvider.desktop.kt index b4b47cd..c171f72 100644 --- a/shared/src/desktopMain/kotlin/com/techbeloved/hymnbook/shared/files/AssetFileProvider.desktop.kt +++ b/shared/src/desktopMain/kotlin/com/techbeloved/hymnbook/shared/files/AssetFileProvider.desktop.kt @@ -1,8 +1,16 @@ +@file:OptIn(ExperimentalResourceApi::class) + package com.techbeloved.hymnbook.shared.files +import hymnbook.shared.generated.resources.Res import okio.FileSystem import okio.Path.Companion.toPath +import org.jetbrains.compose.resources.ExperimentalResourceApi -internal actual val assetFileProvider: AssetFileProvider = AssetFileProvider { - FileSystem.RESOURCES.source(it.toPath()) +internal actual val assetFileSourceProvider: AssetFileSourceProvider = AssetFileSourceProvider { + val resourcePath = getResourcePath(it) + FileSystem.RESOURCES.source(resourcePath.toPath()) } + +@OptIn(ExperimentalResourceApi::class) +internal fun getResourcePath(assetFile: String) = Res.getUri(assetFile).split("!").last() diff --git a/shared/src/iosMain/kotlin/com/techbeloved/hymnbook/shared/files/AssetArchiveExtractor.ios.kt b/shared/src/iosMain/kotlin/com/techbeloved/hymnbook/shared/files/AssetArchiveExtractor.ios.kt index e57cbea..12284c4 100644 --- a/shared/src/iosMain/kotlin/com/techbeloved/hymnbook/shared/files/AssetArchiveExtractor.ios.kt +++ b/shared/src/iosMain/kotlin/com/techbeloved/hymnbook/shared/files/AssetArchiveExtractor.ios.kt @@ -1,15 +1,20 @@ package com.techbeloved.hymnbook.shared.files -//import cocoapods.SSZipArchive.SSZipArchive -import kotlinx.cinterop.ExperimentalForeignApi +import okio.FileSystem import okio.Path +import okio.Path.Companion.toPath internal actual val defaultAssetArchiveExtractor: AssetArchiveExtractor by lazy { IosArchiveExtractor() } -@OptIn(ExperimentalForeignApi::class) -private class IosArchiveExtractor : AssetArchiveExtractor { - override fun extract(assetFile: String, destination: Path) { - // val extracted = SSZipArchive.unzipFileAtPath(getAssetFilePath(assetFile), destination.toString()) - // println("File extracted to $destination: $extracted") +private class IosArchiveExtractor( + private val systemArchiveExtractor: SystemArchiveExtractor = SystemArchiveExtractor(), +) : AssetArchiveExtractor { + override suspend fun extract(assetFile: String, destination: Path) { + systemArchiveExtractor.extract( + sourceFile = getAssetFilePath(assetFile).toPath(), + destination = destination, + sourceFileSystem = FileSystem.SYSTEM, + destinationFileSystem = FileSystem.SYSTEM + ) } } diff --git a/shared/src/iosMain/kotlin/com/techbeloved/hymnbook/shared/files/AssetFileProvider.ios.kt b/shared/src/iosMain/kotlin/com/techbeloved/hymnbook/shared/files/AssetFileProvider.ios.kt index 33668d0..c5fbd55 100644 --- a/shared/src/iosMain/kotlin/com/techbeloved/hymnbook/shared/files/AssetFileProvider.ios.kt +++ b/shared/src/iosMain/kotlin/com/techbeloved/hymnbook/shared/files/AssetFileProvider.ios.kt @@ -1,11 +1,15 @@ package com.techbeloved.hymnbook.shared.files +import hymnbook.shared.generated.resources.Res import okio.FileSystem import okio.Path.Companion.toPath -import platform.Foundation.NSBundle +import org.jetbrains.compose.resources.ExperimentalResourceApi -internal actual val assetFileProvider: AssetFileProvider = AssetFileProvider { +internal actual val assetFileSourceProvider: AssetFileSourceProvider = AssetFileSourceProvider { FileSystem.SYSTEM.source(getAssetFilePath(it).toPath()) } -internal fun getAssetFilePath(path: String): String = NSBundle.mainBundle.resourcePath + "/compose-resources/" + path +@OptIn(ExperimentalResourceApi::class) +internal fun getAssetFilePath(path: String): String = + // getUri appends a file scheme which the okio FileSystem does not understand + Res.getUri(path).removePrefix("file://") diff --git a/shared/src/iosMain/kotlin/com/techbeloved/hymnbook/shared/main.ios.kt b/shared/src/iosMain/kotlin/com/techbeloved/hymnbook/shared/main.ios.kt index a950a88..22635ef 100644 --- a/shared/src/iosMain/kotlin/com/techbeloved/hymnbook/shared/main.ios.kt +++ b/shared/src/iosMain/kotlin/com/techbeloved/hymnbook/shared/main.ios.kt @@ -3,4 +3,5 @@ package com.techbeloved.hymnbook.shared import androidx.compose.ui.window.ComposeUIViewController import platform.UIKit.UIViewController -public fun MainViewController(): UIViewController = ComposeUIViewController { App() } \ No newline at end of file +public fun MainViewController(): UIViewController = + ComposeUIViewController(configure = { enforceStrictPlistSanityCheck = false }) { App() } \ No newline at end of file