changed:5 methods
authorStefan Vogel <sv@exept.de>
Tue, 31 Aug 2010 19:54:11 +0200
changeset 2491 256c6ff1616a
parent 2490 cdc1bcf9cb50
child 2492 128237b8b7b6
changed:5 methods check for non-existing file and directories on open
ZipArchive.st
--- a/ZipArchive.st	Tue Aug 31 12:44:03 2010 +0200
+++ b/ZipArchive.st	Tue Aug 31 19:54:11 2010 +0200
@@ -1,6 +1,6 @@
 "
  COPYRIGHT (c) 1998 by eXept Software AG
-	      All Rights Reserved
+              All Rights Reserved
 
  This software is furnished under a license and may be used
  only in accordance with the terms of that license and with the
@@ -12,65 +12,65 @@
 "{ Package: 'stx:libbasic2' }"
 
 Object subclass:#ZipArchive
-	instanceVariableNames:'file mode archiveName firstEntry lastEntry centralDirectory
-		startOfArchive endOfArchive'
-	classVariableNames:'Lobby RecentlyUsedZipArchives FlushBlock ECREC_SIZE LREC_SIZE
-		CREC_SIZE SIZE_CENTRAL_DIRECTORY TOTAL_ENTRIES_CENTRAL_DIR
-		C_COMPRESSED_SIZE C_RELATIVE_OFFSET_LOCAL_HEADER
-		C_FILENAME_LENGTH C_UNCOMPRESSED_SIZE C_CENTRALHEADERSIGNATURE
-		C_LOCALHEADERSIGNATURE C_CENTRALENDSIGNATURE
-		ZipFileFormatErrorSignal UnsupportedZipFileFormatErrorSignal
-		COMPR_STORED COMPR_SHRUNK COMPR_REDUCED1 COMPR_REDUCED2
-		COMPR_REDUCED3 COMPR_REDUCED4 COMPR_IMPLODED COMPR_TOKENIZED
-		COMPR_DEFLATED EXTERNALFILEATTRIBUTES_ISFILE
-		EXTERNALFILEATTRIBUTES_ISDIRECTORY'
-	poolDictionaries:''
-	category:'System-Support-FileFormats'
+        instanceVariableNames:'file mode archiveName firstEntry lastEntry centralDirectory
+                startOfArchive endOfArchive'
+        classVariableNames:'Lobby RecentlyUsedZipArchives FlushBlock ECREC_SIZE LREC_SIZE
+                CREC_SIZE SIZE_CENTRAL_DIRECTORY TOTAL_ENTRIES_CENTRAL_DIR
+                C_COMPRESSED_SIZE C_RELATIVE_OFFSET_LOCAL_HEADER
+                C_FILENAME_LENGTH C_UNCOMPRESSED_SIZE C_CENTRALHEADERSIGNATURE
+                C_LOCALHEADERSIGNATURE C_CENTRALENDSIGNATURE
+                ZipFileFormatErrorSignal UnsupportedZipFileFormatErrorSignal
+                COMPR_STORED COMPR_SHRUNK COMPR_REDUCED1 COMPR_REDUCED2
+                COMPR_REDUCED3 COMPR_REDUCED4 COMPR_IMPLODED COMPR_TOKENIZED
+                COMPR_DEFLATED EXTERNALFILEATTRIBUTES_ISFILE
+                EXTERNALFILEATTRIBUTES_ISDIRECTORY'
+        poolDictionaries:''
+        category:'System-Support-FileFormats'
 !
 
 PeekableStream subclass:#AbstractZipStream
-	instanceVariableNames:'zipArchive zipEntry zipFileStream compressingStream crc32
-		uncompressedDataSize startDataPosition'
-	classVariableNames:''
-	poolDictionaries:''
-	privateIn:ZipArchive
+        instanceVariableNames:'zipArchive zipEntry zipFileStream compressingStream crc32
+                uncompressedDataSize startDataPosition'
+        classVariableNames:''
+        poolDictionaries:''
+        privateIn:ZipArchive
 !
 
 Object subclass:#ZipCentralDirectory
-	instanceVariableNames:'numberOfThisDisk centralDirectoryStartDiskNumber
-		centralDirectoryTotalNoOfEntriesOnThisDisk
-		centralDirectoryTotalNoOfEntries centralDirectorySize
-		centralDirectoryStartOffset zipCommentLength zipComment
-		digitalSignatureDataSize digitalSignatureData'
-	classVariableNames:''
-	poolDictionaries:''
-	privateIn:ZipArchive
+        instanceVariableNames:'numberOfThisDisk centralDirectoryStartDiskNumber
+                centralDirectoryTotalNoOfEntriesOnThisDisk
+                centralDirectoryTotalNoOfEntries centralDirectorySize
+                centralDirectoryStartOffset zipCommentLength zipComment
+                digitalSignatureDataSize digitalSignatureData'
+        classVariableNames:''
+        poolDictionaries:''
+        privateIn:ZipArchive
 !
 
 Object subclass:#ZipMember
-	instanceVariableNames:'next versionMadeBy versionNeedToExtract generalPurposBitFlag
-		compressionMethod lastModFileTime lastModFileDate crc32
-		compressedSize uncompressedSize fileNameLength extraFieldLength
-		fileCommentLength diskNumberStart internalFileAttributes
-		externalFileAttributes relativeLocalHeaderOffset fileName
-		extraField fileComment dataStart data'
-	classVariableNames:''
-	poolDictionaries:''
-	privateIn:ZipArchive
+        instanceVariableNames:'next versionMadeBy versionNeedToExtract generalPurposBitFlag
+                compressionMethod lastModFileTime lastModFileDate crc32
+                compressedSize uncompressedSize fileNameLength extraFieldLength
+                fileCommentLength diskNumberStart internalFileAttributes
+                externalFileAttributes relativeLocalHeaderOffset fileName
+                extraField fileComment dataStart data'
+        classVariableNames:''
+        poolDictionaries:''
+        privateIn:ZipArchive
 !
 
 ZipArchive::AbstractZipStream subclass:#ZipReadStream
-	instanceVariableNames:'readPosition peek'
-	classVariableNames:''
-	poolDictionaries:''
-	privateIn:ZipArchive
+        instanceVariableNames:'readPosition peek'
+        classVariableNames:''
+        poolDictionaries:''
+        privateIn:ZipArchive
 !
 
 ZipArchive::AbstractZipStream subclass:#ZipWriteStream
-	instanceVariableNames:''
-	classVariableNames:''
-	poolDictionaries:''
-	privateIn:ZipArchive
+        instanceVariableNames:''
+        classVariableNames:''
+        poolDictionaries:''
+        privateIn:ZipArchive
 !
 
 !ZipArchive primitiveDefinitions!
@@ -148,25 +148,25 @@
 
 /* Tables for deflate from PKZIP's appnote.txt. */
 static unsigned border[] = {    /* Order of the bit length code lengths */
-	16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
+        16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
 
 static ushort cplens[] = {         /* Copy lengths for literal codes 257..285 */
-	3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
-	35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
-	/* note: see note #13 above about the 258 in this list. */
+        3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
+        35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
+        /* note: see note #13 above about the 258 in this list. */
 
 static ushort cplext[] = {         /* Extra bits for literal codes 257..285 */
-	0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,
-	3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 99, 99}; /* 99==invalid */
+        0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,
+        3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 99, 99}; /* 99==invalid */
 
 static ushort cpdist[] = {         /* Copy offsets for distance codes 0..29 */
-	1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
-	257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
-	8193, 12289, 16385, 24577};
+        1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
+        257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
+        8193, 12289, 16385, 24577};
 static ushort cpdext[] = {         /* Extra bits for distance codes */
-	0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,
-	7, 7, 8, 8, 9, 9, 10, 10, 11, 11,
-	12, 12, 13, 13};
+        0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,
+        7, 7, 8, 8, 9, 9, 10, 10, 11, 11,
+        12, 12, 13, 13};
 
 /* And'ing with mask[n] masks the lower n bits */
 static ushort mask[] = {
@@ -179,9 +179,9 @@
 /* Macros for inflate() bit peeking and grabbing.
    The usage is:
 
-	NEEDBITS(j)
-	x = b & mask[j];
-	DUMPBITS(j)
+        NEEDBITS(j)
+        x = b & mask[j];
+        DUMPBITS(j)
 
    where NEEDBITS makes sure that b has at least j bits in it, and
    DUMPBITS removes the bits from b.  The macros use the variable k
@@ -396,79 +396,79 @@
       /* make tables up to required level */
       while (k > w + l[h])
       {
-	w += l[h++];            /* add bits already decoded */
-
-	/* compute minimum size table less than or equal to *m bits */
-	z = (z = g - w) > (unsigned)*m ? *m : z;        /* upper limit */
-	if ((f = 1 << (j = k - w)) > a + 1)     /* try a k-w bit table */
-	{                       /* too few codes for k-w bit table */
-	  f -= a + 1;           /* deduct codes from patterns left */
-	  xp = c + k;
-	  while (++j < z)       /* try smaller tables up to z bits */
-	  {
-	    if ((f <<= 1) <= *++xp)
-	      break;            /* enough codes to use up j bits */
-	    f -= *xp;           /* else deduct codes from patterns */
-	  }
-	}
-	if ((unsigned)w + j > el && (unsigned)w < el)
-	  j = el - w;           /* make EOB code end at table */
-	z = 1 << j;             /* table entries for j-bit table */
-	l[h] = j;               /* set table size in stack */
-
-	/* allocate and link in new table */
-	if ((q = (struct huft *)malloc((z + 1)*sizeof(struct huft))) ==
-	    (struct huft *)NULL)
-	{
-	  if (h)
-	    huft_free(u[0]);
-	  return 3;             /* not enough memory */
-	}
-	hufts += z + 1;         /* track memory usage */
-	*t = q + 1;             /* link to list for huft_free() */
-	*(t = &(q->v.t)) = (struct huft *)NULL;
-	u[h] = ++q;             /* table starts after link */
-
-	/* connect to last table, if there is one */
-	if (h)
-	{
-	  x[h] = i;             /* save pattern for backing up */
-	  r.b = (uchar)l[h-1];    /* bits to dump before this table */
-	  r.e = (uchar)(16 + j);  /* bits in this table */
-	  r.v.t = q;            /* pointer to this table */
-	  j = (i & ((1 << w) - 1)) >> (w - l[h-1]);
-	  u[h-1][j] = r;        /* connect to last table */
-	}
+        w += l[h++];            /* add bits already decoded */
+
+        /* compute minimum size table less than or equal to *m bits */
+        z = (z = g - w) > (unsigned)*m ? *m : z;        /* upper limit */
+        if ((f = 1 << (j = k - w)) > a + 1)     /* try a k-w bit table */
+        {                       /* too few codes for k-w bit table */
+          f -= a + 1;           /* deduct codes from patterns left */
+          xp = c + k;
+          while (++j < z)       /* try smaller tables up to z bits */
+          {
+            if ((f <<= 1) <= *++xp)
+              break;            /* enough codes to use up j bits */
+            f -= *xp;           /* else deduct codes from patterns */
+          }
+        }
+        if ((unsigned)w + j > el && (unsigned)w < el)
+          j = el - w;           /* make EOB code end at table */
+        z = 1 << j;             /* table entries for j-bit table */
+        l[h] = j;               /* set table size in stack */
+
+        /* allocate and link in new table */
+        if ((q = (struct huft *)malloc((z + 1)*sizeof(struct huft))) ==
+            (struct huft *)NULL)
+        {
+          if (h)
+            huft_free(u[0]);
+          return 3;             /* not enough memory */
+        }
+        hufts += z + 1;         /* track memory usage */
+        *t = q + 1;             /* link to list for huft_free() */
+        *(t = &(q->v.t)) = (struct huft *)NULL;
+        u[h] = ++q;             /* table starts after link */
+
+        /* connect to last table, if there is one */
+        if (h)
+        {
+          x[h] = i;             /* save pattern for backing up */
+          r.b = (uchar)l[h-1];    /* bits to dump before this table */
+          r.e = (uchar)(16 + j);  /* bits in this table */
+          r.v.t = q;            /* pointer to this table */
+          j = (i & ((1 << w) - 1)) >> (w - l[h-1]);
+          u[h-1][j] = r;        /* connect to last table */
+        }
       }
 
       /* set up table entry in r */
       r.b = (uchar)(k - w);
       if (p >= v + n)
-	r.e = 99;               /* out of values--invalid code */
+        r.e = 99;               /* out of values--invalid code */
       else if (*p < s)
       {
-	r.e = (uchar)(*p < 256 ? 16 : 15);    /* 256 is end-of-block code */
-	r.v.n = *p++;           /* simple code is just the value */
+        r.e = (uchar)(*p < 256 ? 16 : 15);    /* 256 is end-of-block code */
+        r.v.n = *p++;           /* simple code is just the value */
       }
       else
       {
-	r.e = (uchar)e[*p - s];   /* non-simple--look up in lists */
-	r.v.n = d[*p++ - s];
+        r.e = (uchar)e[*p - s];   /* non-simple--look up in lists */
+        r.v.n = d[*p++ - s];
       }
 
       /* fill code-like entries with r */
       f = 1 << (k - w);
       for (j = i >> w; j < z; j += f)
-	q[j] = r;
+        q[j] = r;
 
       /* backwards increment the k-bit code i */
       for (j = 1 << (k - 1); i & j; j >>= 1)
-	i ^= j;
+        i ^= j;
       i ^= j;
 
       /* backup over finished tables */
       while ((i & ((1 << w) - 1)) != x[h])
-	w -= l[--h];            /* don't need to update q */
+        w -= l[--h];            /* don't need to update q */
     }
   }
 
@@ -519,11 +519,11 @@
     NEEDBITS((unsigned)bl)
     if ((e = (t = tl + ((unsigned)b & ml))->e) > 16)
       do {
-	if (e == 99)
-	  return 1;
-	DUMPBITS(t->b)
-	e -= 16;
-	NEEDBITS(e)
+        if (e == 99)
+          return 1;
+        DUMPBITS(t->b)
+        e -= 16;
+        NEEDBITS(e)
       } while ((e = (t = t->v.t + ((unsigned)b & mask[e]))->e) > 16);
     DUMPBITS(t->b)
     if (e == 16)                /* then it's a literal */
@@ -531,15 +531,15 @@
       slide[w++] = (uchar)t->v.n;
       if (w == WSIZE)
       {
-	FLUSH(w);
-	w = 0;
+        FLUSH(w);
+        w = 0;
       }
     }
     else                        /* it's an EOB or a length */
     {
       /* exit if end of block */
       if (e == 15)
-	break;
+        break;
 
       /* get length of block to copy */
       NEEDBITS(e)
@@ -549,13 +549,13 @@
       /* decode distance of block to copy */
       NEEDBITS((unsigned)bd)
       if ((e = (t = td + ((unsigned)b & md))->e) > 16)
-	do {
-	  if (e == 99)
-	    return 1;
-	  DUMPBITS(t->b)
-	  e -= 16;
-	  NEEDBITS(e)
-	} while ((e = (t = t->v.t + ((unsigned)b & mask[e]))->e) > 16);
+        do {
+          if (e == 99)
+            return 1;
+          DUMPBITS(t->b)
+          e -= 16;
+          NEEDBITS(e)
+        } while ((e = (t = t->v.t + ((unsigned)b & mask[e]))->e) > 16);
       DUMPBITS(t->b)
       NEEDBITS(e)
       d = w - t->v.n - ((unsigned)b & mask[e]);
@@ -563,28 +563,28 @@
 
       /* do the copy */
       do {
-	n -= (e = (e = WSIZE - ((d &= WSIZE-1) > w ? d : w)) > n ? n : e);
+        n -= (e = (e = WSIZE - ((d &= WSIZE-1) > w ? d : w)) > n ? n : e);
 #ifndef NOMEMCPY
-	if (w - d >= e)         /* (this test assumes unsigned comparison) */
-	{
+        if (w - d >= e)         /* (this test assumes unsigned comparison) */
+        {
 # ifdef USE_MEMCPY
-	  memcpy(slide + w, slide + d, e);
+          memcpy(slide + w, slide + d, e);
 # else
-	  bcopy(slide + d, slide + w, e);
+          bcopy(slide + d, slide + w, e);
 # endif
-	  w += e;
-	  d += e;
-	}
-	else                      /* do it slow to avoid memcpy() overlap */
+          w += e;
+          d += e;
+        }
+        else                      /* do it slow to avoid memcpy() overlap */
 #endif /* !NOMEMCPY */
-	  do {
-	    slide[w++] = slide[d++];
-	  } while (--e);
-	if (w == WSIZE)
-	{
-	  FLUSH(w);
-	  w = 0;
-	}
+          do {
+            slide[w++] = slide[d++];
+          } while (--e);
+        if (w == WSIZE)
+        {
+          FLUSH(w);
+          w = 0;
+        }
       } while (n);
     }
   }
@@ -687,7 +687,7 @@
       l[i] = 8;
     fixed_bl = 7;
     if ((i = huft_build(l, 288, 257, cplens, cplext,
-			&fixed_tl, &fixed_bl)) != 0)
+                        &fixed_tl, &fixed_bl)) != 0)
     {
       Trace((stderr, "incomplete code set 1\n"));
       fixed_tl = (struct huft *)NULL;
@@ -806,9 +806,9 @@
       j = 3 + ((unsigned)b & 3);
       DUMPBITS(2)
       if ((unsigned)i + j > n)
-	return 1;
+        return 1;
       while (j--)
-	ll[i++] = l;
+        ll[i++] = l;
     }
     else if (j == 17)           /* 3 to 10 zero length codes */
     {
@@ -816,9 +816,9 @@
       j = 3 + ((unsigned)b & 7);
       DUMPBITS(3)
       if ((unsigned)i + j > n)
-	return 1;
+        return 1;
       while (j--)
-	ll[i++] = 0;
+        ll[i++] = 0;
       l = 0;
     }
     else                        /* j == 18: 11 to 138 zero length codes */
@@ -827,9 +827,9 @@
       j = 11 + ((unsigned)b & 0x7f);
       DUMPBITS(7)
       if ((unsigned)i + j > n)
-	return 1;
+        return 1;
       while (j--)
-	ll[i++] = 0;
+        ll[i++] = 0;
       l = 0;
     }
   }
@@ -978,7 +978,7 @@
 
   /* return success */
   Trace((stderr, "%u bytes in Huffman tables (%d/entry)\n",
-	 h * sizeof(struct huft), sizeof(struct huft)));
+         h * sizeof(struct huft), sizeof(struct huft)));
   return 0;
 }
 
@@ -1028,7 +1028,7 @@
 copyright
 "
  COPYRIGHT (c) 1998 by eXept Software AG
-	      All Rights Reserved
+              All Rights Reserved
 
  This software is furnished under a license and may be used
  only in accordance with the terms of that license and with the
@@ -1046,7 +1046,7 @@
     Caveat: the only compression method (for now) is deflate.
 
     [author:]
-	Claus Gittinger
+        Claus Gittinger
 "
 !
 
@@ -2907,32 +2907,19 @@
 !
 
 oldFileNamed:name
-    |f|
-
-    f := name asFilename.
-    f exists ifFalse:[
-        ^ OpenError raiseRequestWith:name
-.    ].
-
-    ^ self new name:f mode:#read.
+    ^ self new name:name mode:#read.
 !
 
 oldFileNamed:name startOfArchive: startOfArchive endOfArchive: endOfArchive
-    |zar f|
-
-    f := name asFilename.
-    f exists ifFalse:[^ nil].
-
-    zar := self new.
-    zar setArchiveStartPosition: startOfArchive endPosition: endOfArchive.
-    zar name:f mode:#read.
-    ^ zar
+    ^ self new
+        setArchiveStartPosition:startOfArchive endPosition:endOfArchive;
+        name:name mode:#read.
 !
 
 readingFrom:aPositionableStream
     "open an existing Zip archive - read data from aPositionableStream"
 
-    ^ self new readFrom:aPositionableStream.    
+    ^ self new readingFrom:aPositionableStream.    
 !
 
 writingTo:aPositionableStream
@@ -3021,9 +3008,9 @@
     "forget about cached zipArchives"
 
     FlushBlock isNil ifTrue:[
-	FlushBlock := [ RecentlyUsedZipArchives := nil. FlushBlock := nil. ].
+        FlushBlock := [ RecentlyUsedZipArchives := nil. FlushBlock := nil. ].
     ] ifFalse:[
-	Processor removeTimedBlock:FlushBlock.
+        Processor removeTimedBlock:FlushBlock.
     ].
     Processor addTimedBlock:FlushBlock for:nil afterSeconds:60.
 
@@ -3096,9 +3083,9 @@
 debugTrace:aBoolean
 %{
     if (aBoolean == true) {
-	debugTrace = 1;
+        debugTrace = 1;
     } else {
-	debugTrace = 0;
+        debugTrace = 0;
     }
 %}
 ! !
@@ -3201,15 +3188,24 @@
      self closeFile
 !
 
-name:archiveFileName mode:readOrWriteMode
+name:name mode:readOrWriteMode
     "open read or writestream on archiveFileName"
-    |members maxStartPosition lastMember|
+
+    |filename members maxStartPosition lastMember|
+
+    filename := name asFilename.
+    filename exists ifFalse:[
+        ^ OpenError raiseRequestWith:filename errorString:' - file does not exist'.
+    ].
+    filename isDirectory ifTrue:[
+        ^ OpenError raiseRequestWith:filename errorString:' - file is a directory'.
+    ].
 
     file notNil ifTrue: [
         self closeFile.
     ].
 
-    archiveName := archiveFileName asFilename name.
+    archiveName := filename name.
     mode := readOrWriteMode.
 
     mode ~~ #write ifTrue:[
@@ -3243,6 +3239,14 @@
 !
 
 readFrom:aPositionableStream
+    <resource: #obsolete>
+    "initialize the archive to read from aPositionableStream.
+     Obsolete - backward compatibility."
+
+    ^ self readingFrom:aPositionableStream
+!
+
+readingFrom:aPositionableStream
     "initialize the archive to read from aPositionableStream"
 
     file notNil ifTrue: [
@@ -3254,19 +3258,15 @@
     file := aPositionableStream.
     aPositionableStream isFileStream ifTrue:[
         archiveName := aPositionableStream pathName.
+        aPositionableStream isDirectory ifTrue:[
+            OpenError raiseWith:self errorString:' - is a directory'.
+        ].        
     ] ifFalse:[
         archiveName := 'internal stream'.
     ].
     self readDirectory.
 !
 
-readingFrom:aPositionableStream
-    "initialize the archive to read from aPositionableStream"
-
-    "/ renamed to readFrom: for squeak compat.
-    ^ self readFrom:aPositionableStream
-!
-
 writingTo:aPositionableStream
     "initialize the archive to read from aPositionableStream"
 
@@ -3400,50 +3400,50 @@
     |outBytes|
 
     compressionMethod == COMPR_STORED ifTrue:[
-	"/
-	"/ uncompressed
-	"/
-	^ rawBytes
+        "/
+        "/ uncompressed
+        "/
+        ^ rawBytes
     ].
 
     compressionMethod == COMPR_DEFLATED ifTrue:[
-	"/
-	"/ deflate/inflate algorithm
-	"/
-	outBytes := ByteArray new:uncompressedSize.
-	^ self inflate:rawBytes to:outBytes
+        "/
+        "/ deflate/inflate algorithm
+        "/
+        outBytes := ByteArray new:uncompressedSize.
+        ^ self inflate:rawBytes to:outBytes
     ].
 
     "/
     "/ the other algorithms are not (yet) supported
     "/
     compressionMethod == COMPR_SHRUNK ifTrue:[
-	self error:'unsupported compression method: SHRUNK'.
-	^ nil
+        self error:'unsupported compression method: SHRUNK'.
+        ^ nil
     ].
     compressionMethod == COMPR_REDUCED1 ifTrue:[
-	self error:'unsupported compression method: REDUCED1'.
-	^ nil
+        self error:'unsupported compression method: REDUCED1'.
+        ^ nil
     ].
     compressionMethod == COMPR_REDUCED2 ifTrue:[
-	self error:'unsupported compression method: REDUCED2'.
-	^ nil
+        self error:'unsupported compression method: REDUCED2'.
+        ^ nil
     ].
     compressionMethod == COMPR_REDUCED3 ifTrue:[
-	self error:'unsupported compression method: REDUCED3'.
-	^ nil
+        self error:'unsupported compression method: REDUCED3'.
+        ^ nil
     ].
     compressionMethod == COMPR_REDUCED4 ifTrue:[
-	self error:'unsupported compression method: REDUCED4'.
-	^ nil
+        self error:'unsupported compression method: REDUCED4'.
+        ^ nil
     ].
     compressionMethod == COMPR_IMPLODED ifTrue:[
-	self error:'unsupported compression method: IMPLODED'.
-	^ nil
+        self error:'unsupported compression method: IMPLODED'.
+        ^ nil
     ].
     compressionMethod == COMPR_TOKENIZED ifTrue:[
-	self error:'unsupported compression method: TOKENIZED'.
-	^ nil
+        self error:'unsupported compression method: TOKENIZED'.
+        ^ nil
     ].
 
     self error:'unsupported compression method'.
@@ -3564,9 +3564,9 @@
     "add a zipMember"
 
     (firstEntry == nil) ifTrue:[
-	firstEntry := zmemb
+        firstEntry := zmemb
     ] ifFalse:[
-	lastEntry next:zmemb.
+        lastEntry next:zmemb.
     ].
     lastEntry := zmemb.
     ^ zmemb.
@@ -3747,8 +3747,8 @@
 
     zipd := firstEntry.
     [zipd notNil] whileTrue:[
-	aBlock value:zipd.
-	zipd := zipd next
+        aBlock value:zipd.
+        zipd := zipd next
     ].
 
     "Created: / 29.3.1998 / 19:15:15 / cg"
@@ -4969,11 +4969,11 @@
 !ZipArchive class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic2/ZipArchive.st,v 1.83 2010-08-31 10:44:03 sr Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic2/ZipArchive.st,v 1.84 2010-08-31 17:54:11 stefan Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic2/ZipArchive.st,v 1.83 2010-08-31 10:44:03 sr Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic2/ZipArchive.st,v 1.84 2010-08-31 17:54:11 stefan Exp $'
 ! !
 
 ZipArchive initialize!