--- a/ZipStream.st Tue Jun 24 15:32:55 2008 +0200
+++ b/ZipStream.st Mon Jun 30 11:07:57 2008 +0200
@@ -679,68 +679,80 @@
openWithMode:aMode on:aStream
"open stream and write or check gzip header"
+
super openWithMode:aMode on:aStream.
+
self isReadable ifTrue:[
"Check for the gzip magic id"
- |flags|
+ self readHeader
+ ] ifFalse:[
+ "write the gzip magic id"
+ self writeHeader
+ ].
+!
- GZ_MAGIC_ID do:[:b|
- onStream nextByte ~~ b ifTrue:[ self zerror:'version error' ]
- ].
-
- onStream nextByte ~~ Z_DEFLATED ifTrue:[
- self zerror:'invalid method (not deflated)'
- ].
+readHeader
+ "Check for the gzip magic id"
+ |flags|
- flags := onStream nextByte.
- (flags bitAnd:HEAD_RESERVED) ~~ 0 ifTrue:[
- self zerror:'wrong data format'
- ].
+ GZ_MAGIC_ID do:[:b|
+ onStream nextByte ~~ b ifTrue:[ self zerror:'version error' ]
+ ].
+
+ onStream nextByte ~~ Z_DEFLATED ifTrue:[
+ self zerror:'invalid method (not deflated)'
+ ].
- "discard time, xflags and OS code"
- onStream skip:6.
+ flags := onStream nextByte.
+ (flags bitAnd:HEAD_RESERVED) ~~ 0 ifTrue:[
+ self zerror:'wrong data format'
+ ].
- (flags bitAnd:HEAD_EXTRA_FIELD) ~~ 0 ifTrue:[|len|
- "skip the extra field"
- len := onStream nextByte + (onStream nextByte bitShift:8).
- len timesRepeat:[ onStream nextByte ].
- ].
+ "discard time, xflags and OS code"
+ onStream skip:6.
- (flags bitAnd:HEAD_ORIG_NAME) ~~ 0 ifTrue:[|b|
- "skip the original file name"
- [ (b := onStream nextByte) ~~ 0 ] whileTrue.
- ].
+ (flags bitAnd:HEAD_EXTRA_FIELD) ~~ 0 ifTrue:[|len|
+ "skip the extra field"
+ len := onStream nextByte + (onStream nextByte bitShift:8).
+ len timesRepeat:[ onStream nextByte ].
+ ].
- (flags bitAnd:HEAD_CRC) ~~ 0 ifTrue:[
- "skip the header crc"
- onStream skip:2.
- ].
- ] ifFalse:[
- "write the gzip magic id
- "
- GZ_MAGIC_ID do:[:b| onStream nextPutByte:b ].
+ (flags bitAnd:HEAD_ORIG_NAME) ~~ 0 ifTrue:[|b|
+ "skip the original file name"
+ [ (b := onStream nextByte) ~~ 0 ] whileTrue.
+ ].
+
+ (flags bitAnd:HEAD_CRC) ~~ 0 ifTrue:[
+ "skip the header crc"
+ onStream skip:2.
+ ].
+!
- "write the method"
- onStream nextPutByte:Z_DEFLATED.
+writeHeader
+ "write the gzip magic id"
- "write the flags"
- onStream nextPutByte:0.
+ GZ_MAGIC_ID do:[:b| onStream nextPutByte:b ].
+
+ "write the method"
+ onStream nextPutByte:Z_DEFLATED.
- "write time"
- 4 timesRepeat:[ onStream nextPutByte:0 ].
+ "write the flags"
+ onStream nextPutByte:0.
+
+ "write time"
+ 4 timesRepeat:[ onStream nextPutByte:0 ].
- "write xflags"
- onStream nextPutByte:0.
+ "write xflags"
+ onStream nextPutByte:0.
- "write OS code"
- onStream nextPutByte:HEAD_OS_CODE.
- ].
+ "write OS code"
+ onStream nextPutByte:HEAD_OS_CODE.
! !
!ZipStream class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic2/ZipStream.st,v 1.29 2008-06-05 09:16:16 ab Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic2/ZipStream.st,v 1.30 2008-06-30 09:07:57 cg Exp $'
! !
ZipStream initialize!