diff -r d714931725e1 -r d62d6f27f07c ZipStream.st --- 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 $' ! !