--- a/ZipStream.st Mon Mar 23 18:27:33 2015 +0100
+++ b/ZipStream.st Fri Mar 27 10:21:44 2015 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
"
COPYRIGHT (c) 2002 by eXept Software AG
All Rights Reserved
@@ -11,6 +13,8 @@
"
"{ Package: 'stx:libbasic2' }"
+"{ NameSpace: Smalltalk }"
+
CompressionStream subclass:#ZipStream
instanceVariableNames:''
classVariableNames:'Z_DEFLATED HEAD_OS_CODE HEAD_RESERVED HEAD_EXTRA_FIELD
@@ -172,6 +176,16 @@
suppressHeaderAndChecksum:(self defaultSuppressHeaderAndChecksum)
!
+readOpenAsZipStreamOn:aStream suppressFileHeader:suppressFileHeader suppressZipHeaderAndChecksum:suppressZipHeaderAndChecksum
+ "open to read data compressed from stream,
+ the default readOpenOn: will open ZipStream as gzip stream"
+
+ ^ self basicNew
+ streamOpenWithMode:#readonly
+ on:aStream
+ suppressFileHeader:suppressFileHeader suppressZipHeaderAndChecksum:suppressZipHeaderAndChecksum
+!
+
readOpenAsZipStreamOn:aStream suppressHeaderAndChecksum:aBoolean
"open to read data compressed from stream,
the default readOpenOn: will open ZipStream as gzip stream"
@@ -191,6 +205,16 @@
suppressHeaderAndChecksum:(self defaultSuppressHeaderAndChecksum)
!
+writeOpenAsZipStreamOn:aStream suppressFileHeader:suppressFileHeader suppressZipHeaderAndChecksum:suppressZipHeaderAndChecksum
+ "open to write data compressed to stream,
+ the default writeOpenOn: will open ZipStream as gzip stream"
+
+ ^ self basicNew
+ streamOpenWithMode:#writeonly
+ on:aStream
+ suppressFileHeader:suppressFileHeader suppressZipHeaderAndChecksum:suppressZipHeaderAndChecksum
+!
+
writeOpenAsZipStreamOn:aStream suppressHeaderAndChecksum:aBoolean
"open to write data compressed to stream,
the default writeOpenOn: will open ZipStream as gzip stream"
@@ -782,23 +806,42 @@
!ZipStream methodsFor:'startup & release'!
-openWithMode:aMode on:aStream suppressHeaderAndChecksum:aBoolean
- "open stream and write or check gzip header"
+openWithMode:aMode on:aStream suppressFileHeader:suppressFileHeader suppressZipHeaderAndChecksum:suppressZipHeaderAndChecksum
+ "open stream and write or check gzip header
+ suppressFileHeader:
+ if true, the gzip header (magic number and a few extra fields) is not written/read
+ suppressZipHeaderAndChecksum
+ controls if the gzip checksum and 2 header bytes should be written/checked"
super
openWithMode:aMode
on:aStream
- suppressHeaderAndChecksum:aBoolean.
+ suppressHeaderAndChecksum:suppressZipHeaderAndChecksum.
- self isReadable ifTrue:[
- "Check for the gzip magic id"
- self readHeader
- ] ifFalse:[
- "write the gzip magic id"
- self writeHeader
+ suppressFileHeader ifFalse:[
+ self isReadable ifTrue:[
+ "Check for the gzip magic id"
+ self readHeader
+ ] ifFalse:[
+ "write the gzip magic id"
+ self writeHeader
+ ].
].
!
+openWithMode:aMode on:aStream suppressHeaderAndChecksum:aBoolean
+ "open stream and write or check gzip header.
+ Caveat:
+ Backward compatibility: aBoolean controls if the gzip checksum and 2 header bytes should be written/checked
+ (i.e. NOT the file header with the zip magic)"
+
+ self
+ openWithMode:aMode
+ on:aStream
+ suppressFileHeader:false
+ suppressZipHeaderAndChecksum:aBoolean
+!
+
readHeader
"Check for the gzip magic id"
|flags|
@@ -819,15 +862,18 @@
"discard time, xflags and OS code"
onStream skip:6.
- (flags bitAnd:HEAD_EXTRA_FIELD) ~~ 0 ifTrue:[|len|
+ (flags bitAnd:HEAD_EXTRA_FIELD) ~~ 0 ifTrue:[
+ |len|
"skip the extra field"
len := onStream nextByte + (onStream nextByte bitShift:8).
- len timesRepeat:[ onStream nextByte ].
+ "/ len timesRepeat:[ onStream nextByte ].
+ "/ faster:
+ onStream skip:len.
].
(flags bitAnd:HEAD_ORIG_NAME) ~~ 0 ifTrue:[
|b|
- "skip the original file name"
+ "skip the original file name (up to zero byte)"
[ (b := onStream nextByte) ~~ 0 ] whileTrue.
].
@@ -858,11 +904,11 @@
!ZipStream class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic2/ZipStream.st,v 1.41 2014-05-19 14:41:09 stefan Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic2/ZipStream.st,v 1.42 2015-03-27 09:21:44 cg Exp $'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libbasic2/ZipStream.st,v 1.41 2014-05-19 14:41:09 stefan Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic2/ZipStream.st,v 1.42 2015-03-27 09:21:44 cg Exp $'
! !