[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