[LZMA2] Use LZMA2.decompress with dict size byte argument function instead of using LZMA2Decoder directly in "clients"

This commit is contained in:
Timofey Solomko
2018-08-22 10:40:16 +03:00
parent bcc703d1f6
commit 4713ad5ed8
3 changed files with 6 additions and 15 deletions
+1 -4
View File
@@ -164,10 +164,7 @@ class SevenZipFolder {
properties.count == 1
else { throw LZMA2Error.wrongDictionarySize }
let byteReader = ByteReader(data: decodedData)
let decoder = try LZMA2Decoder(byteReader, properties[0])
try decoder.decode()
decodedData = Data(bytes: decoder.out)
decodedData = try Data(bytes: LZMA2.decompress(ByteReader(data: decodedData), properties[0]))
case .lzma:
// Both properties' byte (lp, lc, pb) and dictionary size are stored in coder's properties.
guard let properties = coder.properties,
+3 -3
View File
@@ -24,11 +24,11 @@ public class LZMA2: DecompressionAlgorithm {
*/
public static func decompress(data: Data) throws -> Data {
let byteReader = ByteReader(data: data)
return Data(bytes: try decompress(byteReader))
return Data(bytes: try decompress(byteReader, byteReader.byte()))
}
static func decompress(_ byteReader: ByteReader) throws -> [UInt8] {
let decoder = try LZMA2Decoder(byteReader, byteReader.byte())
static func decompress(_ byteReader: ByteReader, _ dictSizeByte: UInt8) throws -> [UInt8] {
let decoder = try LZMA2Decoder(byteReader, dictSizeByte)
try decoder.decode()
return decoder.out
}
+2 -8
View File
@@ -45,15 +45,9 @@ struct XZBlock {
let propertiesSize = try byteReader.multiByteDecode()
guard propertiesSize == 1
else { throw LZMA2Error.wrongDictionarySize }
/// In case of LZMA2 filters property is a dicitonary size.
/// Filter property for LZMA2 is a dictionary size.
let filterPropeties = byteReader.byte()
let closure = { (dwp: ByteReader) -> Data in
let decoder = try LZMA2Decoder(byteReader, filterPropeties)
try decoder.decode()
return Data(bytes: decoder.out)
}
filters.append(closure)
filters.append { try Data(bytes: LZMA2.decompress($0, filterPropeties)) }
} else {
throw XZError.wrongFilterID
}