[squeak-dev] The Trunk: Compression-cmm.60.mcz
commits at source.squeak.org
commits at source.squeak.org
Sat Jan 29 01:29:14 UTC 2022
Chris Muller uploaded a new version of Compression to project The Trunk:
http://source.squeak.org/trunk/Compression-cmm.60.mcz
==================== Summary ====================
Name: Compression-cmm.60
Author: cmm
Time: 28 January 2022, 7:29:13.629831 pm
UUID: da1f9ad9-51bb-4815-83ba-706af4137db0
Ancestors: Compression-dtl.59, Compression-cmm.9
Don't leave open file-handles for each file added to a ZipArchive. Only open them when needed, and close them as soon as possible so the function isn't limited by availability of that resource.
=============== Diff against Compression-dtl.59 ===============
Item was changed:
----- Method: ZipArchive>>writeTo: (in category 'writing') -----
+ writeTo: stream
- writeTo: stream
stream binary.
+ members do: [ : member |
+ [ member writeTo: stream.
+ member endRead ] ensure: [ member close ] ].
- members do: [ :member |
- member writeTo: stream.
- member endRead.
- ].
writeCentralDirectoryOffset := stream position.
+ self writeCentralDirectoryTo: stream!
- self writeCentralDirectoryTo: stream.
- !
Item was changed:
----- Method: ZipFileMember>>readRawChunk: (in category 'private-reading') -----
readRawChunk: n
+ ^stream ensureOpen next: n!
- ^stream next: n!
Item was changed:
----- Method: ZipFileMember>>rewindData (in category 'private-reading') -----
rewindData
super rewindData.
+ stream isNil ifTrue: [ self error: 'stream missing' ].
+ stream ensureOpen.
+ stream position: localHeaderRelativeOffset + 4.
+ self skipLocalDirectoryFileHeaderFrom: stream!
- (stream isNil or: [ stream closed ])
- ifTrue: [ self error: 'stream missing or closed' ].
- stream position: (localHeaderRelativeOffset + 4).
- self skipLocalDirectoryFileHeaderFrom: stream.!
Item was changed:
----- Method: ZipFileMember>>uncompressDataTo: (in category 'private-writing') -----
uncompressDataTo: aStream
| decoder buffer crcErrorMessage |
+ decoder := ZipReadStream on: stream ensureOpen.
- decoder := ZipReadStream on: stream.
decoder expectedCrc: self crc32.
buffer := ByteArray new: (32768 min: readDataRemaining).
crcErrorMessage := nil.
[[ readDataRemaining > 0 ] whileTrue: [
| chunkSize |
chunkSize := 32768 min: readDataRemaining.
buffer := decoder next: chunkSize into: buffer startingAt: 1.
aStream next: chunkSize putAll: buffer startingAt: 1.
readDataRemaining := readDataRemaining - chunkSize.
]] on: CRCError do: [ :ex | crcErrorMessage := ex messageText. ex proceed ].
crcErrorMessage ifNotNil: [ self isCorrupt: true. CRCError signal: crcErrorMessage ]
!
Item was changed:
----- Method: ZipFileMember>>uncompressDataTo:from:to: (in category 'private-writing') -----
uncompressDataTo: aStream from: start to: finish
| decoder buffer chunkSize |
+ decoder := FastInflateStream on: stream ensureOpen.
- decoder := FastInflateStream on: stream.
readDataRemaining := readDataRemaining min: finish - start + 1.
buffer := ByteArray new: (32768 min: readDataRemaining).
decoder next: start - 1.
[ readDataRemaining > 0 ] whileTrue: [
chunkSize := 32768 min: readDataRemaining.
buffer := decoder next: chunkSize into: buffer startingAt: 1.
aStream next: chunkSize putAll: buffer startingAt: 1.
readDataRemaining := readDataRemaining - chunkSize.
].
!
Item was changed:
----- Method: ZipNewFileMember>>from: (in category 'initialization') -----
from: aFileName
| entry |
compressionMethod := CompressionStored.
"Now get the size, attributes, and timestamps, and see if the file exists"
+ stream := (StandardFileStream readOnlyFileNamed: aFileName) close.
- stream := StandardFileStream readOnlyFileNamed: aFileName.
self localFileName: (externalFileName := stream name).
entry := stream directoryEntry.
compressedSize := uncompressedSize := entry fileSize.
desiredCompressionMethod := compressedSize > 0 ifTrue: [ CompressionDeflated ] ifFalse: [ CompressionStored ].
+ self setLastModFileDateTimeFrom: entry modificationTime
+ !
- self setLastModFileDateTimeFrom: entry modificationTime.
- stream close!
Item was changed:
----- Method: ZipNewFileMember>>rewindData (in category 'private-writing') -----
rewindData
super rewindData.
+ readDataRemaining := stream ensureOpen size.
- readDataRemaining := stream size.
stream position: 0.!
More information about the Squeak-dev
mailing list
|