#BUGFIX by stefan
class: ZipArchive::AbstractZipStream
class definition
added:
#close
#zipFileStream:zipEntry:
class: ZipArchive::AbstractZipStream class
added: #isAbstract
class: ZipArchive::ZipReadStream
added: #reset
removed: #close
changed: #zipFileStream:zipEntry:
class: ZipArchive::ZipWriteStream
class definition
comment/format in:
#close
#contents
#next
#peek
#zipFileStream:zipEntry:
close ZipReadStream
--- a/ZipArchive.st Sat May 26 11:32:48 2018 +0200
+++ b/ZipArchive.st Mon Jun 11 14:57:51 2018 +0200
@@ -26,7 +26,7 @@
!
PeekableStream subclass:#AbstractZipStream
- instanceVariableNames:'zipArchive zipEntry zipFileStream compressingStream crc32
+ instanceVariableNames:'zipArchive zipEntry zipFileStream compressingStream
uncompressedDataSize startDataPosition'
classVariableNames:''
poolDictionaries:''
@@ -64,7 +64,7 @@
!
ZipArchive::AbstractZipStream subclass:#ZipWriteStream
- instanceVariableNames:''
+ instanceVariableNames:'crc32'
classVariableNames:''
poolDictionaries:'ZipArchiveConstants'
privateIn:ZipArchive
@@ -4582,6 +4582,16 @@
^ self basicNew zipFileStream:something zipEntry:compressionMethodArg
! !
+!ZipArchive::AbstractZipStream class methodsFor:'queries'!
+
+isAbstract
+ "Return if this class is an abstract class.
+ True is returned here for myself only; false for subclasses.
+ Abstract subclasses must redefine this again."
+
+ ^ self == ZipArchive::AbstractZipStream.
+! !
+
!ZipArchive::AbstractZipStream methodsFor:'accessing'!
zipArchive
@@ -4604,6 +4614,28 @@
^ zipFileStream
! !
+!ZipArchive::AbstractZipStream methodsFor:'closing'!
+
+close
+ (compressingStream notNil and:[compressingStream ~~ zipFileStream]) ifTrue:[
+ "close ZipStream"
+ compressingStream close.
+ ].
+ compressingStream := nil.
+
+ "Modified: / 11-06-2018 / 14:14:26 / Stefan Vogel"
+! !
+
+!ZipArchive::AbstractZipStream methodsFor:'initialization'!
+
+zipFileStream:zipFileStreamArg zipEntry:zipEntryArg
+ "raise an error: must be redefined in concrete subclass(es)"
+
+ ^ self subclassResponsibility
+
+ "Modified (format): / 11-06-2018 / 14:53:22 / Stefan Vogel"
+! !
+
!ZipArchive::AbstractZipStream methodsFor:'misc'!
binary
@@ -5120,32 +5152,38 @@
"Created: / 30-05-2017 / 20:19:18 / mawalch"
! !
-!ZipArchive::ZipReadStream methodsFor:'closing'!
-
-close
- "nothing to do here"
-! !
-
!ZipArchive::ZipReadStream methodsFor:'initialization'!
+reset
+ "reset the stream to the initial position"
+
+ readPosition := 0.
+ peek := nil.
+
+ zipEntry compressionMethod == COMPRESSION_DEFLATED ifTrue:[
+ compressingStream notNil ifTrue:[
+ compressingStream close.
+ ].
+ compressingStream := ZipStream readOpenAsZipStreamOn:zipFileStream suppressHeaderAndChecksum:true.
+ ] ifFalse:[
+ compressingStream := zipFileStream.
+ compressingStream text.
+ ].
+
+ "Created: / 11-06-2018 / 14:03:51 / Stefan Vogel"
+!
+
zipFileStream:something zipEntry:aZipEntry
-
zipEntry := aZipEntry.
zipFileStream := something.
startDataPosition := zipFileStream position.
- crc32 := 0.
uncompressedDataSize := zipEntry uncompressedSize.
- readPosition := 0.
-
- zipEntry compressionMethod == COMPRESSION_DEFLATED ifTrue:[
- compressingStream := ZipStream readOpenAsZipStreamOn:zipFileStream suppressHeaderAndChecksum:true.
- ] ifFalse:[
- compressingStream := zipFileStream.
- compressingStream text.
- ].
+
+ self reset.
"Modified: / 19-11-2010 / 15:47:14 / cg"
"Modified (format): / 30-05-2017 / 20:17:24 / mawalch"
+ "Modified: / 11-06-2018 / 14:06:58 / Stefan Vogel"
! !
!ZipArchive::ZipReadStream methodsFor:'queries'!
@@ -5220,29 +5258,24 @@
close
"finalize the data"
- compressingStream ~~ zipFileStream ifTrue:[
- "close ZipStream"
- compressingStream close.
- ].
- compressingStream := nil.
+ super close.
zipEntry compressedSize:(zipFileStream position) - startDataPosition.
"/ crc32 is always required (not as written in docu to be zero in case of uncompressed mode)
zipEntry crc32:crc32.
zipEntry uncompressedSize:uncompressedDataSize.
-
zipEntry rewriteCrcAndSizeTo:zipFileStream.
zipFileStream setToEnd.
"Modified (comment): / 30-05-2017 / 19:02:28 / mawalch"
+ "Modified (format): / 11-06-2018 / 14:46:37 / Stefan Vogel"
! !
!ZipArchive::ZipWriteStream methodsFor:'initialization'!
zipFileStream:something zipEntry:aZipEntry
-
zipEntry := aZipEntry.
zipFileStream := something.
startDataPosition := zipFileStream position.
@@ -5250,13 +5283,14 @@
uncompressedDataSize := 0.
zipEntry compressionMethod == COMPRESSION_DEFLATED ifTrue:[
- compressingStream := ZipStream writeOpenAsZipStreamOn:zipFileStream suppressHeaderAndChecksum:true.
+ compressingStream := ZipStream writeOpenAsZipStreamOn:zipFileStream suppressHeaderAndChecksum:true.
] ifFalse:[
- compressingStream := zipFileStream.
+ compressingStream := zipFileStream.
].
"Modified: / 19-11-2010 / 15:46:57 / cg"
"Modified (format): / 30-05-2017 / 20:20:41 / mawalch"
+ "Modified (format): / 11-06-2018 / 14:45:55 / Stefan Vogel"
! !
!ZipArchive::ZipWriteStream methodsFor:'queries'!
@@ -5280,24 +5314,27 @@
contents
"return the entire contents of the stream.
For a readStream, that is the rest (i.e. upToEnd),
- for a writeStream, that is the collected data. As we do not know here,
- what we are, this is the responsibility of a subclass..."
+ for a writeStream, that is the collected data."
self shouldNotImplement
+
+ "Modified (comment): / 11-06-2018 / 14:47:59 / Stefan Vogel"
!
next
- "return the next element of the stream
- - we do not know here how to do it, it must be redefined in subclass"
+ "return the next element of the stream"
self shouldNotImplement
+
+ "Modified (comment): / 11-06-2018 / 14:48:24 / Stefan Vogel"
!
peek
- "return the next element of the stream
- - we do not know here how to do it, it must be redefined in subclass"
+ "return the next element of the stream"
self shouldNotImplement
+
+ "Modified (comment): / 11-06-2018 / 14:48:32 / Stefan Vogel"
! !
!ZipArchive::ZipWriteStream methodsFor:'writing'!