diff --git a/.gitignore b/.gitignore index 16a48119..5bb77d02 100644 --- a/.gitignore +++ b/.gitignore @@ -38,3 +38,6 @@ Carthage/Build .build/ .swiftpm/ Packages/ + +# vim +.*.sw? diff --git a/Package.swift b/Package.swift index fd33704c..20c5e210 100644 --- a/Package.swift +++ b/Package.swift @@ -1,6 +1,8 @@ -// swift-tools-version:5.1 +// swift-tools-version:5.4 // The swift-tools-version declares the minimum version of Swift required to build this package. + import PackageDescription +import Foundation let package = Package( name: "Zip", @@ -13,17 +15,33 @@ let package = Package( dependencies: [], path: "Zip/minizip", exclude: ["module"], - linkerSettings: [ - .linkedLibrary("z") + cSettings: [ + .define("_CRT_SECURE_NO_WARNINGS", .when(platforms: [.windows])), ]), .target( name: "Zip", dependencies: ["Minizip"], path: "Zip", - exclude: ["minizip", "zlib"]), + exclude: ["minizip", "zlib"], + cSettings: [ + .define("_CRT_SECURE_NO_WARNINGS", .when(platforms: [.windows])), + ]), .testTarget( name: "ZipTests", dependencies: ["Zip"], path: "ZipTests"), ] ) + +if let target = package.targets.filter({ $0.name == "Minizip" }).first { +#if os(Windows) + if ProcessInfo.processInfo.environment["ZIP_USE_DYNAMIC_ZLIB"] == nil { + target.cSettings?.append(contentsOf: [.define("ZLIB_STATIC")]) + target.linkerSettings = [.linkedLibrary("zlibstatic")] + } else { + target.linkerSettings = [.linkedLibrary("zlib")] + } +#else + target.linkerSettings = [.linkedLibrary("z")] +#endif +} diff --git a/Zip/Zip.swift b/Zip/Zip.swift index af2d453e..1d4aa99e 100644 --- a/Zip/Zip.swift +++ b/Zip/Zip.swift @@ -156,8 +156,9 @@ public class Zip { let fileNameSize = Int(fileInfo.size_filename) + 1 //let fileName = UnsafeMutablePointer(allocatingCapacity: fileNameSize) let fileName = UnsafeMutablePointer.allocate(capacity: fileNameSize) + defer { fileName.deallocate() } - unzGetCurrentFileInfo64(zip, &fileInfo, fileName, UInt(fileNameSize), nil, 0, nil, 0) + unzGetCurrentFileInfo64(zip, &fileInfo, fileName, uLong(fileNameSize), nil, 0, nil, 0) fileName[Int(fileInfo.size_filename)] = 0 var pathString = String(cString: fileName) @@ -171,7 +172,6 @@ public class Zip { if (fileName[fileInfoSizeFileName] == "/".cString(using: String.Encoding.utf8)?.first || fileName[fileInfoSizeFileName] == "\\".cString(using: String.Encoding.utf8)?.first) { isDirectory = true; } - free(fileName) if pathString.rangeOfCharacter(from: CharacterSet(charactersIn: "/\\")) != nil { pathString = pathString.replacingOccurrences(of: "\\", with: "/") } diff --git a/Zip/minizip/include/Minizip.h b/Zip/minizip/include/Minizip.h index c50f6324..6777dcf3 100644 --- a/Zip/minizip/include/Minizip.h +++ b/Zip/minizip/include/Minizip.h @@ -9,8 +9,8 @@ #ifndef Minizip_h #define Minizip_h -#import "crypt.h" -#import "unzip.h" -#import "zip.h" +#include "crypt.h" +#include "unzip.h" +#include "zip.h" #endif /* Minizip_h */ diff --git a/Zip/minizip/module/module.modulemap b/Zip/minizip/module/module.modulemap index 59eaacd7..100b7290 100644 --- a/Zip/minizip/module/module.modulemap +++ b/Zip/minizip/module/module.modulemap @@ -1,5 +1,4 @@ module Minizip [system][extern_c] { header "../include/Minizip.h" - link "z" export * } diff --git a/ZipTests/ZipTests.swift b/ZipTests/ZipTests.swift index 70f689ff..e1ca06f3 100644 --- a/ZipTests/ZipTests.swift +++ b/ZipTests/ZipTests.swift @@ -190,6 +190,8 @@ class ZipTests: XCTestCase { let foundPermissions = try FileManager.default.attributesOfItem(atPath: permission644.path)[.posixPermissions] as? Int #if os(Linux) let expectedPermissions = 0o664 + #elseif os(Windows) + let expectedPermissions = 0o700 #else let expectedPermissions = 0o644 #endif @@ -212,9 +214,15 @@ class ZipTests: XCTestCase { let attributes777 = try fileManager.attributesOfItem(atPath: permission777.path) let attributes600 = try fileManager.attributesOfItem(atPath: permission600.path) let attributes604 = try fileManager.attributesOfItem(atPath: permission604.path) + #if os(Windows) + XCTAssertEqual(attributes777[.posixPermissions] as? Int, 0o700) + XCTAssertEqual(attributes600[.posixPermissions] as? Int, 0o700) + XCTAssertEqual(attributes604[.posixPermissions] as? Int, 0o700) + #else XCTAssertEqual(attributes777[.posixPermissions] as? Int, 0o777) XCTAssertEqual(attributes600[.posixPermissions] as? Int, 0o600) XCTAssertEqual(attributes604[.posixPermissions] as? Int, 0o604) + #endif } func testQuickUnzipSubDir() throws {