ZipArchive.st
author Claus Gittinger <cg@exept.de>
Sat, 02 May 2020 21:40:13 +0200
changeset 5476 7355a4b11cb6
parent 5470 416a04cb68ba
permissions -rw-r--r--
#FEATURE by cg class: Socket class added: #newTCPclientToHost:port:domain:domainOrder:withTimeout: changed: #newTCPclientToHost:port:domain:withTimeout:
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
     1
"
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
     2
 COPYRIGHT (c) 1998 by eXept Software AG
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
     3
	      All Rights Reserved
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
     4
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
     5
 This software is furnished under a license and may be used
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
     6
 only in accordance with the terms of that license and with the
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
     8
 be provided or otherwise made available to, or used by, any
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
     9
 other person.  No title to or ownership of the software is
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
    10
 hereby transferred.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
    11
"
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
    12
"{ Package: 'stx:libbasic2' }"
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
    13
3527
6d61656dca46 class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3268
diff changeset
    14
"{ NameSpace: Smalltalk }"
6d61656dca46 class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3268
diff changeset
    15
622
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
Object subclass:#ZipArchive
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
    17
	instanceVariableNames:'stream mode archiveName firstEntry lastEntry centralDirectory
2855
568bf375326c Addec trailing slash behavior (enabled by default)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2832
diff changeset
    18
		startOfArchive endOfArchive zipMembersByName appendTrailingSlash'
4174
49c5d5174724 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4171
diff changeset
    19
	classVariableNames:'RecentlyUsedZipArchives FlushBlock ZipFileFormatErrorSignal
4200
089df8914384 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4178
diff changeset
    20
		UnsupportedZipFileFormatErrorSignal DefaultAppendTrailingSlash
089df8914384 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4178
diff changeset
    21
		ZipFileCachingTime'
2511
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
    22
	poolDictionaries:'ZipArchiveConstants'
2492
128237b8b7b6 changed: #name:mode:
Stefan Vogel <sv@exept.de>
parents: 2491
diff changeset
    23
	category:'System-Support-FileFormats'
622
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
!
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
    26
PeekableStream subclass:#AbstractZipStream
4677
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
    27
	instanceVariableNames:'zipArchive zipEntry zipFileStream compressingStream
2492
128237b8b7b6 changed: #name:mode:
Stefan Vogel <sv@exept.de>
parents: 2491
diff changeset
    28
		uncompressedDataSize startDataPosition'
128237b8b7b6 changed: #name:mode:
Stefan Vogel <sv@exept.de>
parents: 2491
diff changeset
    29
	classVariableNames:''
128237b8b7b6 changed: #name:mode:
Stefan Vogel <sv@exept.de>
parents: 2491
diff changeset
    30
	poolDictionaries:''
128237b8b7b6 changed: #name:mode:
Stefan Vogel <sv@exept.de>
parents: 2491
diff changeset
    31
	privateIn:ZipArchive
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
    32
!
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
    33
1979
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
    34
Object subclass:#ZipCentralDirectory
2492
128237b8b7b6 changed: #name:mode:
Stefan Vogel <sv@exept.de>
parents: 2491
diff changeset
    35
	instanceVariableNames:'numberOfThisDisk centralDirectoryStartDiskNumber
128237b8b7b6 changed: #name:mode:
Stefan Vogel <sv@exept.de>
parents: 2491
diff changeset
    36
		centralDirectoryTotalNoOfEntriesOnThisDisk
128237b8b7b6 changed: #name:mode:
Stefan Vogel <sv@exept.de>
parents: 2491
diff changeset
    37
		centralDirectoryTotalNoOfEntries centralDirectorySize
128237b8b7b6 changed: #name:mode:
Stefan Vogel <sv@exept.de>
parents: 2491
diff changeset
    38
		centralDirectoryStartOffset zipCommentLength zipComment
128237b8b7b6 changed: #name:mode:
Stefan Vogel <sv@exept.de>
parents: 2491
diff changeset
    39
		digitalSignatureDataSize digitalSignatureData'
128237b8b7b6 changed: #name:mode:
Stefan Vogel <sv@exept.de>
parents: 2491
diff changeset
    40
	classVariableNames:''
128237b8b7b6 changed: #name:mode:
Stefan Vogel <sv@exept.de>
parents: 2491
diff changeset
    41
	poolDictionaries:''
128237b8b7b6 changed: #name:mode:
Stefan Vogel <sv@exept.de>
parents: 2491
diff changeset
    42
	privateIn:ZipArchive
1979
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
    43
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
    44
622
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
Object subclass:#ZipMember
2492
128237b8b7b6 changed: #name:mode:
Stefan Vogel <sv@exept.de>
parents: 2491
diff changeset
    46
	instanceVariableNames:'next versionMadeBy versionNeedToExtract generalPurposBitFlag
128237b8b7b6 changed: #name:mode:
Stefan Vogel <sv@exept.de>
parents: 2491
diff changeset
    47
		compressionMethod lastModFileTime lastModFileDate crc32
128237b8b7b6 changed: #name:mode:
Stefan Vogel <sv@exept.de>
parents: 2491
diff changeset
    48
		compressedSize uncompressedSize fileNameLength extraFieldLength
128237b8b7b6 changed: #name:mode:
Stefan Vogel <sv@exept.de>
parents: 2491
diff changeset
    49
		fileCommentLength diskNumberStart internalFileAttributes
5263
350d509151c9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5238
diff changeset
    50
		externalFileAttributes relativeLocalHeaderOffset
350d509151c9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5238
diff changeset
    51
		absoluteLocalHeaderOffset fileName extraField fileComment
350d509151c9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5238
diff changeset
    52
		dataStart data'
2492
128237b8b7b6 changed: #name:mode:
Stefan Vogel <sv@exept.de>
parents: 2491
diff changeset
    53
	classVariableNames:''
2511
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
    54
	poolDictionaries:'ZipArchiveConstants'
2492
128237b8b7b6 changed: #name:mode:
Stefan Vogel <sv@exept.de>
parents: 2491
diff changeset
    55
	privateIn:ZipArchive
622
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
!
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
    58
ZipArchive::AbstractZipStream subclass:#ZipReadStream
2492
128237b8b7b6 changed: #name:mode:
Stefan Vogel <sv@exept.de>
parents: 2491
diff changeset
    59
	instanceVariableNames:'readPosition peek'
128237b8b7b6 changed: #name:mode:
Stefan Vogel <sv@exept.de>
parents: 2491
diff changeset
    60
	classVariableNames:''
2511
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
    61
	poolDictionaries:'ZipArchiveConstants'
2492
128237b8b7b6 changed: #name:mode:
Stefan Vogel <sv@exept.de>
parents: 2491
diff changeset
    62
	privateIn:ZipArchive
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
    63
!
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
    64
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
    65
ZipArchive::AbstractZipStream subclass:#ZipWriteStream
4677
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
    66
	instanceVariableNames:'crc32'
2492
128237b8b7b6 changed: #name:mode:
Stefan Vogel <sv@exept.de>
parents: 2491
diff changeset
    67
	classVariableNames:''
2511
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
    68
	poolDictionaries:'ZipArchiveConstants'
2492
128237b8b7b6 changed: #name:mode:
Stefan Vogel <sv@exept.de>
parents: 2491
diff changeset
    69
	privateIn:ZipArchive
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
    70
!
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
    71
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
    72
!ZipArchive primitiveDefinitions!
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
    73
%{
2896
1ce4144962d8 #include stdlib.h for definition of free()
Stefan Vogel <sv@exept.de>
parents: 2895
diff changeset
    74
#include <stdlib.h>
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
    75
#include <stdio.h>
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
    76
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
    77
#define uchar     unsigned char
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
    78
#define ushort    unsigned short
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
    79
#define ulong     unsigned long
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
    80
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
    81
/*
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
    82
 * inflate definitions
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
    83
 */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
    84
#define PKZIP_BUG_WORKAROUND    /* PKZIP 1.93a problem--live with it */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
    85
#ifndef WSIZE           /* default is 32K */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
    86
# define WSIZE 0x8000   /* window size--must be a power of two, and at least */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
    87
#endif                  /* 32K for zip's deflate method */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
    88
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
    89
#define NEXTBYTE        (*inPtr++)
637
fff0267c8e11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 636
diff changeset
    90
#define XXXFLUSH(n)        slide += (n)
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
    91
#define FLUSH(n)        { memcpy(outPtr, slide, (n)); outPtr += (n); }
723
04567da3394f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 720
diff changeset
    92
04567da3394f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 720
diff changeset
    93
#ifdef DEBUG
1839
c10cd58ec334 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1820
diff changeset
    94
# define Trace(x)       if (debugTrace) { console_fprintf x ; }
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
    95
#else
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
    96
# define Trace(x)       /* nothing */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
    97
#endif
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
    98
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
    99
/* Huffman code lookup table entry--this entry is four bytes for machines
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   100
   that have 16-bit pointers (e.g. PC's in the small or medium model).
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   101
   Valid extra bits are 0..13.  e == 15 is EOB (end of block), e == 16
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   102
   means that v is a literal, 16 < e < 32 means that v is a pointer to
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   103
   the next table, which codes e - 16 bits, and lastly e == 99 indicates
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   104
   an unused code.  If a code with e == 99 is looked up, this implies an
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   105
   error in the data. */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   106
struct huft {
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   107
  uchar e;                /* number of extra bits or operation */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   108
  uchar b;                /* number of bits in this code or subcode */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   109
  union {
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   110
    ushort n;             /* literal, length base, or distance base */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   111
    struct huft *t;       /* pointer to next level of table */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   112
  } v;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   113
};
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   114
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   115
%}
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   116
! !
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   117
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   118
!ZipArchive primitiveVariables!
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   119
%{
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   120
723
04567da3394f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 720
diff changeset
   121
static int debugTrace = 0;
04567da3394f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 720
diff changeset
   122
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   123
/*
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   124
 * inflate variables
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   125
 */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   126
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   127
static unsigned char *inPtr;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   128
static unsigned char *outPtr;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   129
static unsigned char *slide;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   130
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   131
static int qflag = 0;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   132
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   133
/* The inflate algorithm uses a sliding 32K byte window on the uncompressed
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   134
   stream to find repeated byte strings.  This is implemented here as a
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   135
   circular buffer.  The index is updated simply by incrementing and then
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   136
   and'ing with 0x7fff (32K-1). */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   137
/* It is left to other modules to supply the 32K area.  It is assumed
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   138
   to be usable as if it were declared "uchar slide[32768];" or as just
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   139
   "uchar *slide;" and then malloc'ed in the latter case.  The definition
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   140
   must be in unzip.h, included above. */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   141
static unsigned wp;            /* current position in slide */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   142
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   143
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   144
/* Tables for deflate from PKZIP's appnote.txt. */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   145
static unsigned border[] = {    /* Order of the bit length code lengths */
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   146
	16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   147
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   148
static ushort cplens[] = {         /* Copy lengths for literal codes 257..285 */
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   149
	3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   150
	35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   151
	/* note: see note #13 above about the 258 in this list. */
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   152
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   153
static ushort cplext[] = {         /* Extra bits for literal codes 257..285 */
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   154
	0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   155
	3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 99, 99}; /* 99==invalid */
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   156
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   157
static ushort cpdist[] = {         /* Copy offsets for distance codes 0..29 */
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   158
	1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   159
	257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   160
	8193, 12289, 16385, 24577};
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   161
static ushort cpdext[] = {         /* Extra bits for distance codes */
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   162
	0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   163
	7, 7, 8, 8, 9, 9, 10, 10, 11, 11,
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   164
	12, 12, 13, 13};
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   165
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   166
/* And'ing with mask[n] masks the lower n bits */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   167
static ushort mask[] = {
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   168
    0x0000,
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   169
    0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff,
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   170
    0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   171
};
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   172
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   173
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   174
/* Macros for inflate() bit peeking and grabbing.
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   175
   The usage is:
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   176
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   177
	NEEDBITS(j)
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   178
	x = b & mask[j];
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   179
	DUMPBITS(j)
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   180
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   181
   where NEEDBITS makes sure that b has at least j bits in it, and
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   182
   DUMPBITS removes the bits from b.  The macros use the variable k
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   183
   for the number of bits in b.  Normally, b and k are register
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   184
   variables for speed, and are initialized at the begining of a
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   185
   routine that uses these macros from a global bit buffer and count.
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   186
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   187
   In order to not ask for more bits than there are in the compressed
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   188
   stream, the Huffman tables are constructed to only ask for just
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   189
   enough bits to make up the end-of-block code (value 256).  Then no
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   190
   bytes need to be "returned" to the buffer at the end of the last
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   191
   block.  See the huft_build() routine.
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   192
 */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   193
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   194
static ulong bb;                       /* bit buffer */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   195
static unsigned bk;                    /* bits in bit buffer */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   196
637
fff0267c8e11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 636
diff changeset
   197
#define NEEDBITS(n) { while(k<(n)){ b |= ((ulong)NEXTBYTE)<<k; k+=8; } }
fff0267c8e11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 636
diff changeset
   198
#define DUMPBITS(n) { b>>=(n); k-=(n); }
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   199
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   200
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   201
/*
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   202
   Huffman code decoding is performed using a multi-level table lookup.
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   203
   The fastest way to decode is to simply build a lookup table whose
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   204
   size is determined by the longest code.  However, the time it takes
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   205
   to build this table can also be a factor if the data being decoded
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   206
   is not very long.  The most common codes are necessarily the
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   207
   shortest codes, so those codes dominate the decoding time, and hence
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   208
   the speed.  The idea is you can have a shorter table that decodes the
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   209
   shorter, more probable codes, and then point to subsidiary tables for
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   210
   the longer codes.  The time it costs to decode the longer codes is
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   211
   then traded against the time it takes to make longer tables.
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   212
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   213
   This results of this trade are in the variables lbits and dbits
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   214
   below.  lbits is the number of bits the first level table for literal/
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   215
   length codes can decode in one step, and dbits is the same thing for
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   216
   the distance codes.  Subsequent tables are also less than or equal to
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   217
   those sizes.  These values may be adjusted either when all of the
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   218
   codes are shorter than that, in which case the longest code length in
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   219
   bits is used, or when the shortest code is *longer* than the requested
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   220
   table size, in which case the length of the shortest code in bits is
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   221
   used.
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   222
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   223
   There are two different values for the two tables, since they code a
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   224
   different number of possibilities each.  The literal/length table
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   225
   codes 286 possible values, or in a flat code, a little over eight
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   226
   bits.  The distance table codes 30 possible values, or a little less
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   227
   than five bits, flat.  The optimum values for speed end up being
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   228
   about one bit more than those, so lbits is 8+1 and dbits is 5+1.
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   229
   The optimum values may differ though from machine to machine, and
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   230
   possibly even between compilers.  Your mileage may vary.
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   231
 */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   232
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   233
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   234
static int lbits = 9;          /* bits in base literal/length lookup table */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   235
static int dbits = 6;          /* bits in base distance lookup table */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   236
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   237
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   238
/* If BMAX needs to be larger than 16, then h and x[] should be ulong. */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   239
#define BMAX 16         /* maximum bit length of any code (16 for explode) */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   240
#define N_MAX 288       /* maximum number of codes in any set */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   241
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   242
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   243
static unsigned hufts;         /* track memory usage */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   244
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   245
%}
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   246
! !
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   247
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   248
!ZipArchive primitiveFunctions!
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   249
%{
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   250
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   251
/*
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   252
 * inflate algorithm
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   253
 */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   254
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   255
/* Free the malloc'ed tables built by huft_build(), which makes a linked
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   256
   list of the tables it made, with the links in a dummy first entry of
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   257
   each table. */
1839
c10cd58ec334 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1820
diff changeset
   258
static int
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   259
huft_free(t)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   260
    struct huft *t;         /* table to free */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   261
{
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   262
  register struct huft *p, *q;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   263
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   264
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   265
  /* Go through linked list, freeing from the malloced (t[-1]) address. */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   266
  p = t;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   267
  while (p != (struct huft *)NULL)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   268
  {
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   269
    q = (--p)->v.t;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   270
    free(p);
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   271
    p = q;
1839
c10cd58ec334 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1820
diff changeset
   272
  }
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   273
  return 0;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   274
}
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   275
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   276
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   277
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   278
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   279
/* Given a list of code lengths and a maximum table size, make a set of
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   280
   tables to decode that set of codes.  Return zero on success, one if
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   281
   the given code set is incomplete (the tables are still built in this
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   282
   case), two if the input is invalid (all zero length codes or an
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   283
   oversubscribed set of lengths), and three if not enough memory.
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   284
   The code with value 256 is special, and the tables are constructed
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   285
   so that no bits beyond that code are fetched when that code is
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   286
   decoded. */
1839
c10cd58ec334 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1820
diff changeset
   287
static int
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   288
huft_build(b, n, s, d, e, t, m)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   289
    unsigned *b;            /* code lengths in bits (all assumed <= BMAX) */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   290
    unsigned n;             /* number of codes (assumed <= N_MAX) */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   291
    unsigned s;             /* number of simple-valued codes (0..s-1) */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   292
    ushort *d;              /* list of base values for non-simple codes */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   293
    ushort *e;              /* list of extra bits for non-simple codes */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   294
    struct huft **t;        /* result: starting table */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   295
    int *m;                 /* maximum lookup bits, returns actual */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   296
{
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   297
  unsigned a;                   /* counter for codes of length k */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   298
  unsigned c[BMAX+1];           /* bit length count table */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   299
  unsigned el;                  /* length of EOB code (value 256) */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   300
  unsigned f;                   /* i repeats in table every f entries */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   301
  int g;                        /* maximum code length */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   302
  int h;                        /* table level */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   303
  register unsigned i;          /* counter, current code */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   304
  register unsigned j;          /* counter */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   305
  register int k;               /* number of bits in current code */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   306
  int lx[BMAX+1];               /* memory for l[-1..BMAX-1] */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   307
  int *l = lx+1;                /* stack of bits per table */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   308
  register unsigned *p;         /* pointer into c[], b[], or v[] */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   309
  register struct huft *q;      /* points to current table */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   310
  struct huft r;                /* table entry for structure assignment */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   311
  struct huft *u[BMAX];         /* table stack */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   312
  static unsigned v[N_MAX];     /* values in order of bit length */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   313
  register int w;               /* bits before this table == (l * h) */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   314
  unsigned x[BMAX+1];           /* bit offsets, then code stack */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   315
  unsigned *xp;                 /* pointer into x */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   316
  int y;                        /* number of dummy codes added */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   317
  unsigned z;                   /* number of entries in current table */
1749
b1c85d37d318 malloc fix
Stefan Vogel <sv@exept.de>
parents: 1579
diff changeset
   318
  extern void *malloc();
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   319
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   320
  /* Generate counts for each bit length */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   321
  el = n > 256 ? b[256] : BMAX; /* set length of EOB code, if any */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   322
  bzero((char *)c, sizeof(c));
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   323
  p = b;  i = n;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   324
  do {
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   325
    c[*p]++; p++;               /* assume all entries <= BMAX */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   326
  } while (--i);
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   327
  if (c[0] == n)                /* null input--all zero length codes */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   328
  {
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   329
    *t = (struct huft *)NULL;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   330
    *m = 0;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   331
    return 0;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   332
  }
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   333
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   334
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   335
  /* Find minimum and maximum length, bound *m by those */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   336
  for (j = 1; j <= BMAX; j++)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   337
    if (c[j])
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   338
      break;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   339
  k = j;                        /* minimum code length */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   340
  if ((unsigned)*m < j)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   341
    *m = j;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   342
  for (i = BMAX; i; i--)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   343
    if (c[i])
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   344
      break;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   345
  g = i;                        /* maximum code length */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   346
  if ((unsigned)*m > i)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   347
    *m = i;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   348
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   349
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   350
  /* Adjust last length count to fill out codes, if needed */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   351
  for (y = 1 << j; j < i; j++, y <<= 1)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   352
    if ((y -= c[j]) < 0)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   353
      return 2;                 /* bad input: more codes than bits */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   354
  if ((y -= c[i]) < 0)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   355
    return 2;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   356
  c[i] += y;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   357
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   358
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   359
  /* Generate starting offsets into the value table for each length */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   360
  x[1] = j = 0;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   361
  p = c + 1;  xp = x + 2;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   362
  while (--i) {                 /* note that i == g from above */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   363
    *xp++ = (j += *p++);
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   364
  }
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   365
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   366
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   367
  /* Make a table of values in order of bit lengths */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   368
  p = b;  i = 0;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   369
  do {
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   370
    if ((j = *p++) != 0)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   371
      v[x[j]++] = i;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   372
  } while (++i < n);
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   373
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   374
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   375
  /* Generate the Huffman codes and for each, make the table entries */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   376
  x[0] = i = 0;                 /* first Huffman code is zero */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   377
  p = v;                        /* grab values in bit order */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   378
  h = -1;                       /* no tables yet--level -1 */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   379
  w = l[-1] = 0;                /* no bits decoded yet */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   380
  u[0] = (struct huft *)NULL;   /* just to keep compilers happy */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   381
  q = (struct huft *)NULL;      /* ditto */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   382
  z = 0;                        /* ditto */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   383
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   384
  /* go through the bit lengths (k already is bits in shortest code) */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   385
  for (; k <= g; k++)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   386
  {
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   387
    a = c[k];
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   388
    while (a--)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   389
    {
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   390
      /* here i is the Huffman code of length k bits for value *p */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   391
      /* make tables up to required level */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   392
      while (k > w + l[h])
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   393
      {
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   394
	w += l[h++];            /* add bits already decoded */
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   395
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   396
	/* compute minimum size table less than or equal to *m bits */
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   397
	z = (z = g - w) > (unsigned)*m ? *m : z;        /* upper limit */
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   398
	if ((f = 1 << (j = k - w)) > a + 1)     /* try a k-w bit table */
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   399
	{                       /* too few codes for k-w bit table */
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   400
	  f -= a + 1;           /* deduct codes from patterns left */
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   401
	  xp = c + k;
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   402
	  while (++j < z)       /* try smaller tables up to z bits */
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   403
	  {
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   404
	    if ((f <<= 1) <= *++xp)
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   405
	      break;            /* enough codes to use up j bits */
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   406
	    f -= *xp;           /* else deduct codes from patterns */
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   407
	  }
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   408
	}
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   409
	if ((unsigned)w + j > el && (unsigned)w < el)
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   410
	  j = el - w;           /* make EOB code end at table */
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   411
	z = 1 << j;             /* table entries for j-bit table */
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   412
	l[h] = j;               /* set table size in stack */
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   413
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   414
	/* allocate and link in new table */
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   415
	if ((q = (struct huft *)malloc((z + 1)*sizeof(struct huft))) ==
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   416
	    (struct huft *)NULL)
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   417
	{
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   418
	  if (h)
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   419
	    huft_free(u[0]);
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   420
	  return 3;             /* not enough memory */
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   421
	}
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   422
	hufts += z + 1;         /* track memory usage */
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   423
	*t = q + 1;             /* link to list for huft_free() */
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   424
	*(t = &(q->v.t)) = (struct huft *)NULL;
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   425
	u[h] = ++q;             /* table starts after link */
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   426
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   427
	/* connect to last table, if there is one */
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   428
	if (h)
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   429
	{
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   430
	  x[h] = i;             /* save pattern for backing up */
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   431
	  r.b = (uchar)l[h-1];    /* bits to dump before this table */
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   432
	  r.e = (uchar)(16 + j);  /* bits in this table */
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   433
	  r.v.t = q;            /* pointer to this table */
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   434
	  j = (i & ((1 << w) - 1)) >> (w - l[h-1]);
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   435
	  u[h-1][j] = r;        /* connect to last table */
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   436
	}
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   437
      }
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   438
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   439
      /* set up table entry in r */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   440
      r.b = (uchar)(k - w);
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   441
      if (p >= v + n)
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   442
	r.e = 99;               /* out of values--invalid code */
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   443
      else if (*p < s)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   444
      {
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   445
	r.e = (uchar)(*p < 256 ? 16 : 15);    /* 256 is end-of-block code */
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   446
	r.v.n = *p++;           /* simple code is just the value */
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   447
      }
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   448
      else
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   449
      {
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   450
	r.e = (uchar)e[*p - s];   /* non-simple--look up in lists */
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   451
	r.v.n = d[*p++ - s];
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   452
      }
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   453
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   454
      /* fill code-like entries with r */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   455
      f = 1 << (k - w);
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   456
      for (j = i >> w; j < z; j += f)
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   457
	q[j] = r;
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   458
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   459
      /* backwards increment the k-bit code i */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   460
      for (j = 1 << (k - 1); i & j; j >>= 1)
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   461
	i ^= j;
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   462
      i ^= j;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   463
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   464
      /* backup over finished tables */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   465
      while ((i & ((1 << w) - 1)) != x[h])
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   466
	w -= l[--h];            /* don't need to update q */
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   467
    }
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   468
  }
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   469
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   470
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   471
  /* return actual size of base table */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   472
  *m = l[0];
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   473
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   474
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   475
  /* Return true (1) if we were given an incomplete table */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   476
  return y != 0 && g != 1;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   477
}
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   478
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   479
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   480
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   481
#ifdef ASM_INFLATECODES
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   482
#  define inflate_codes(tl,td,bl,bd)  flate_codes(tl,td,bl,bd,(uchar *)slide)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   483
   int flate_codes OF((struct huft *, struct huft *, int, int, uchar *));
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   484
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   485
#else
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   486
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   487
/* inflate (decompress) the codes in a deflated (compressed) block.
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   488
   Return an error code or zero if it all goes ok. */
1839
c10cd58ec334 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1820
diff changeset
   489
static int
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   490
inflate_codes(tl, td, bl, bd)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   491
    struct huft *tl, *td;   /* literal/length and distance decoder tables */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   492
    int bl, bd;             /* number of bits decoded by tl[] and td[] */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   493
{
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   494
  register unsigned e;  /* table entry flag/number of extra bits */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   495
  unsigned n, d;        /* length and index for copy */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   496
  unsigned w;           /* current window position */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   497
  struct huft *t;       /* pointer to table entry */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   498
  unsigned ml, md;      /* masks for bl and bd bits */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   499
  register ulong b;       /* bit buffer */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   500
  register unsigned k;  /* number of bits in bit buffer */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   501
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   502
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   503
  /* make local copies of globals */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   504
  b = bb;                       /* initialize bit buffer */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   505
  k = bk;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   506
  w = wp;                       /* initialize window position */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   507
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   508
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   509
  /* inflate the coded data */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   510
  ml = mask[bl];           /* precompute masks for speed */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   511
  md = mask[bd];
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   512
  while (1)                     /* do until end of block */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   513
  {
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   514
    NEEDBITS((unsigned)bl)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   515
    if ((e = (t = tl + ((unsigned)b & ml))->e) > 16)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   516
      do {
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   517
	if (e == 99)
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   518
	  return 1;
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   519
	DUMPBITS(t->b)
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   520
	e -= 16;
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   521
	NEEDBITS(e)
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   522
      } while ((e = (t = t->v.t + ((unsigned)b & mask[e]))->e) > 16);
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   523
    DUMPBITS(t->b)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   524
    if (e == 16)                /* then it's a literal */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   525
    {
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   526
      slide[w++] = (uchar)t->v.n;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   527
      if (w == WSIZE)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   528
      {
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   529
	FLUSH(w);
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   530
	w = 0;
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   531
      }
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   532
    }
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   533
    else                        /* it's an EOB or a length */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   534
    {
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   535
      /* exit if end of block */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   536
      if (e == 15)
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   537
	break;
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   538
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   539
      /* get length of block to copy */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   540
      NEEDBITS(e)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   541
      n = t->v.n + ((unsigned)b & mask[e]);
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   542
      DUMPBITS(e);
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   543
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   544
      /* decode distance of block to copy */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   545
      NEEDBITS((unsigned)bd)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   546
      if ((e = (t = td + ((unsigned)b & md))->e) > 16)
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   547
	do {
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   548
	  if (e == 99)
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   549
	    return 1;
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   550
	  DUMPBITS(t->b)
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   551
	  e -= 16;
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   552
	  NEEDBITS(e)
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   553
	} while ((e = (t = t->v.t + ((unsigned)b & mask[e]))->e) > 16);
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   554
      DUMPBITS(t->b)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   555
      NEEDBITS(e)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   556
      d = w - t->v.n - ((unsigned)b & mask[e]);
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   557
      DUMPBITS(e)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   558
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   559
      /* do the copy */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   560
      do {
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   561
	n -= (e = (e = WSIZE - ((d &= WSIZE-1) > w ? d : w)) > n ? n : e);
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   562
#ifndef NOMEMCPY
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   563
	if (w - d >= e)         /* (this test assumes unsigned comparison) */
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   564
	{
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   565
	  memcpy(slide + w, slide + d, e);
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   566
	  w += e;
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   567
	  d += e;
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   568
	}
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   569
	else                      /* do it slow to avoid memcpy() overlap */
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   570
#endif /* !NOMEMCPY */
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   571
	  do {
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   572
	    slide[w++] = slide[d++];
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   573
	  } while (--e);
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   574
	if (w == WSIZE)
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   575
	{
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   576
	  FLUSH(w);
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   577
	  w = 0;
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   578
	}
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   579
      } while (n);
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   580
    }
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   581
  }
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   582
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   583
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   584
  /* restore the globals from the locals */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   585
  wp = w;                       /* restore global window pointer */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   586
  bb = b;                       /* restore global bit buffer */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   587
  bk = k;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   588
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   589
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   590
  /* done */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   591
  return 0;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   592
}
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   593
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   594
#endif /* ASM_INFLATECODES */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   595
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   596
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   597
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   598
/* "decompress" an inflated type 0 (stored) block. */
1839
c10cd58ec334 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1820
diff changeset
   599
static int
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   600
inflate_stored()
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   601
{
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   602
  unsigned n;           /* number of bytes in block */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   603
  unsigned w;           /* current window position */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   604
  register ulong b;       /* bit buffer */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   605
  register unsigned k;  /* number of bits in bit buffer */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   606
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   607
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   608
  /* make local copies of globals */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   609
  Trace((stderr, "stored block\n"));
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   610
  b = bb;                       /* initialize bit buffer */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   611
  k = bk;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   612
  w = wp;                       /* initialize window position */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   613
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   614
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   615
  /* go to byte boundary */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   616
  n = k & 7;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   617
  DUMPBITS(n);
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   618
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   619
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   620
  /* get the length and its complement */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   621
  NEEDBITS(16)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   622
  n = ((unsigned)b & 0xffff);
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   623
  DUMPBITS(16)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   624
  NEEDBITS(16)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   625
  if (n != (unsigned)((~b) & 0xffff))
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   626
    return 1;                   /* error in compressed data */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   627
  DUMPBITS(16)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   628
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   629
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   630
  /* read and output the compressed data */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   631
  while (n--)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   632
  {
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   633
    NEEDBITS(8)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   634
    slide[w++] = (uchar)b;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   635
    if (w == WSIZE)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   636
    {
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   637
      FLUSH(w);
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   638
      w = 0;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   639
    }
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   640
    DUMPBITS(8)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   641
  }
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   642
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   643
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   644
  /* restore the globals from the locals */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   645
  wp = w;                       /* restore global window pointer */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   646
  bb = b;                       /* restore global bit buffer */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   647
  bk = k;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   648
  return 0;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   649
}
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   650
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   651
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   652
/* Globals for literal tables (built once) */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   653
static struct huft *fixed_tl = (struct huft *)NULL;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   654
static struct huft *fixed_td = (struct huft *)NULL;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   655
static int fixed_bl, fixed_bd;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   656
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   657
/* decompress an inflated type 1 (fixed Huffman codes) block.  We should
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   658
   either replace this with a custom decoder, or at least precompute the
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   659
   Huffman tables. */
1839
c10cd58ec334 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1820
diff changeset
   660
static int
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   661
inflate_fixed()
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   662
{
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   663
  /* if first time, set up tables for fixed blocks */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   664
  Trace((stderr, "fixed block\n"));
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   665
  if (fixed_tl == (struct huft *)NULL)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   666
  {
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   667
    int i;                /* temporary variable */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   668
    static unsigned l[288]; /* length list for huft_build */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   669
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   670
    /* literal table */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   671
    for (i = 0; i < 144; i++)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   672
      l[i] = 8;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   673
    for (; i < 256; i++)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   674
      l[i] = 9;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   675
    for (; i < 280; i++)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   676
      l[i] = 7;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   677
    for (; i < 288; i++)          /* make a complete, but wrong code set */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   678
      l[i] = 8;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   679
    fixed_bl = 7;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   680
    if ((i = huft_build(l, 288, 257, cplens, cplext,
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   681
			&fixed_tl, &fixed_bl)) != 0)
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   682
    {
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   683
      Trace((stderr, "incomplete code set 1\n"));
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   684
      fixed_tl = (struct huft *)NULL;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   685
      return i;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   686
    }
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   687
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   688
    /* distance table */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   689
    for (i = 0; i < 30; i++)      /* make an incomplete code set */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   690
      l[i] = 5;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   691
    fixed_bd = 5;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   692
    if ((i = huft_build(l, 30, 0, cpdist, cpdext, &fixed_td, &fixed_bd)) > 1)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   693
    {
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   694
      Trace((stderr, "incomplete code set 2\n"));
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   695
      huft_free(fixed_tl);
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   696
      fixed_tl = (struct huft *)NULL;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   697
      return i;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   698
    }
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   699
  }
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   700
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   701
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   702
  /* decompress until an end-of-block code */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   703
  return inflate_codes(fixed_tl, fixed_td, fixed_bl, fixed_bd) != 0;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   704
}
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   705
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   706
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   707
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   708
/* decompress an inflated type 2 (dynamic Huffman codes) block. */
1839
c10cd58ec334 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1820
diff changeset
   709
static int
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   710
inflate_dynamic()
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   711
{
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   712
  int i;                /* temporary variables */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   713
  unsigned j;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   714
  unsigned l;           /* last length */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   715
  unsigned m;           /* mask for bit lengths table */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   716
  unsigned n;           /* number of lengths to get */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   717
  struct huft *tl;      /* literal/length code table */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   718
  struct huft *td;      /* distance code table */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   719
  int bl;               /* lookup bits for tl */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   720
  int bd;               /* lookup bits for td */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   721
  unsigned nb;          /* number of bit length codes */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   722
  unsigned nl;          /* number of literal/length codes */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   723
  unsigned nd;          /* number of distance codes */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   724
#ifdef PKZIP_BUG_WORKAROUND
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   725
  static unsigned ll[288+32]; /* literal/length and distance code lengths */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   726
#else
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   727
  static unsigned ll[286+30]; /* literal/length and distance code lengths */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   728
#endif
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   729
  register ulong b;       /* bit buffer */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   730
  register unsigned k;  /* number of bits in bit buffer */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   731
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   732
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   733
  /* make local bit buffer */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   734
  Trace((stderr, "dynamic block\n"));
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   735
  b = bb;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   736
  k = bk;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   737
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   738
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   739
  /* read in table lengths */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   740
  NEEDBITS(5)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   741
  nl = 257 + ((unsigned)b & 0x1f);      /* number of literal/length codes */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   742
  DUMPBITS(5)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   743
  NEEDBITS(5)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   744
  nd = 1 + ((unsigned)b & 0x1f);        /* number of distance codes */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   745
  DUMPBITS(5)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   746
  NEEDBITS(4)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   747
  nb = 4 + ((unsigned)b & 0xf);         /* number of bit length codes */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   748
  DUMPBITS(4)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   749
#ifdef PKZIP_BUG_WORKAROUND
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   750
  if (nl > 288 || nd > 32)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   751
#else
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   752
  if (nl > 286 || nd > 30)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   753
#endif
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   754
  {
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   755
    Trace((stderr, "bad length\n"));
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   756
    return 1;                   /* bad lengths */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   757
  }
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   758
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   759
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   760
  /* read in bit-length-code lengths */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   761
  for (j = 0; j < nb; j++)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   762
  {
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   763
    NEEDBITS(3)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   764
    ll[border[j]] = (unsigned)b & 7;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   765
    DUMPBITS(3)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   766
  }
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   767
  for (; j < 19; j++)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   768
    ll[border[j]] = 0;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   769
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   770
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   771
  /* build decoding table for trees--single level, 7 bit lookup */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   772
  bl = 7;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   773
  if ((i = huft_build(ll, 19, 19, NULL, NULL, &tl, &bl)) != 0)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   774
  {
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   775
    if (i == 1)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   776
      huft_free(tl);
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   777
    Trace((stderr, "incomplete code set 3\n"));
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   778
    return i;                   /* incomplete code set */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   779
  }
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   780
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   781
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   782
  /* read in literal and distance code lengths */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   783
  n = nl + nd;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   784
  m = mask[bl];
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   785
  i = l = 0;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   786
  while ((unsigned)i < n)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   787
  {
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   788
    NEEDBITS((unsigned)bl)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   789
    j = (td = tl + ((unsigned)b & m))->b;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   790
    DUMPBITS(j)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   791
    j = td->v.n;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   792
    if (j < 16)                 /* length of code in bits (0..15) */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   793
      ll[i++] = l = j;          /* save last length in l */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   794
    else if (j == 16)           /* repeat last length 3 to 6 times */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   795
    {
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   796
      NEEDBITS(2)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   797
      j = 3 + ((unsigned)b & 3);
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   798
      DUMPBITS(2)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   799
      if ((unsigned)i + j > n)
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   800
	return 1;
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   801
      while (j--)
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   802
	ll[i++] = l;
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   803
    }
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   804
    else if (j == 17)           /* 3 to 10 zero length codes */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   805
    {
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   806
      NEEDBITS(3)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   807
      j = 3 + ((unsigned)b & 7);
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   808
      DUMPBITS(3)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   809
      if ((unsigned)i + j > n)
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   810
	return 1;
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   811
      while (j--)
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   812
	ll[i++] = 0;
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   813
      l = 0;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   814
    }
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   815
    else                        /* j == 18: 11 to 138 zero length codes */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   816
    {
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   817
      NEEDBITS(7)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   818
      j = 11 + ((unsigned)b & 0x7f);
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   819
      DUMPBITS(7)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   820
      if ((unsigned)i + j > n)
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   821
	return 1;
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   822
      while (j--)
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
   823
	ll[i++] = 0;
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   824
      l = 0;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   825
    }
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   826
  }
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   827
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   828
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   829
  /* free decoding table for trees */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   830
  huft_free(tl);
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   831
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   832
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   833
  /* restore the global bit buffer */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   834
  bb = b;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   835
  bk = k;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   836
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   837
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   838
  /* build the decoding tables for literal/length and distance codes */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   839
  bl = lbits;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   840
  if ((i = huft_build(ll, nl, 257, cplens, cplext, &tl, &bl)) != 0)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   841
  {
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   842
    Trace((stderr, "incomplete code set 4\n"));
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   843
    if (i == 1 && !qflag) {
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   844
      Trace((stderr, "incomplete l-tree\n"));
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   845
      huft_free(tl);
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   846
    }
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   847
    return i;                   /* incomplete code set */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   848
  }
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   849
  bd = dbits;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   850
  if ((i = huft_build(ll + nl, nd, 0, cpdist, cpdext, &td, &bd)) != 0)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   851
  {
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   852
    Trace((stderr, "huft_build err\n"));
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   853
    if (i == 1 && !qflag) {
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   854
      Trace((stderr, "incomplete d-tree\n"));
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   855
#ifdef PKZIP_BUG_WORKAROUND
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   856
      i = 0;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   857
    }
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   858
#else
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   859
      huft_free(td);
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   860
    }
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   861
    huft_free(tl);
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   862
    return i;                   /* incomplete code set */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   863
#endif
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   864
  }
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   865
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   866
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   867
  /* decompress until an end-of-block code */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   868
  if (inflate_codes(tl, td, bl, bd)) {
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   869
    Trace((stderr, "inflate_codes error\n"));
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   870
    return 1;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   871
  }
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   872
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   873
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   874
  /* free the decoding tables, return */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   875
  huft_free(tl);
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   876
  huft_free(td);
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   877
  Trace((stderr, "block ok\n"));
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   878
  return 0;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   879
}
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   880
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   881
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   882
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   883
/* decompress an inflated block */
1839
c10cd58ec334 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1820
diff changeset
   884
static int
637
fff0267c8e11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 636
diff changeset
   885
inflate_block(endPtr)
fff0267c8e11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 636
diff changeset
   886
    int *endPtr;                 /* last block flag */
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   887
{
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   888
  unsigned t;           /* block type */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   889
  register ulong b;       /* bit buffer */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   890
  register unsigned k;  /* number of bits in bit buffer */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   891
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   892
637
fff0267c8e11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 636
diff changeset
   893
  Trace((stderr, "inflate_block\n"));
fff0267c8e11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 636
diff changeset
   894
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   895
  /* make local bit buffer */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   896
  b = bb;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   897
  k = bk;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   898
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   899
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   900
  /* read in last block bit */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   901
  NEEDBITS(1)
637
fff0267c8e11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 636
diff changeset
   902
  *endPtr = (int)b & 1;
fff0267c8e11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 636
diff changeset
   903
  Trace((stderr, "  end = %d\n", (int)b & 1));
fff0267c8e11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 636
diff changeset
   904
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   905
  DUMPBITS(1)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   906
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   907
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   908
  /* read in block type */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   909
  NEEDBITS(2)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   910
  t = (unsigned)b & 3;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   911
  DUMPBITS(2)
637
fff0267c8e11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 636
diff changeset
   912
  Trace((stderr, "  type = %d\n", t));
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   913
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   914
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   915
  /* restore the global bit buffer */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   916
  bb = b;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   917
  bk = k;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   918
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   919
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   920
  /* inflate that block type */
637
fff0267c8e11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 636
diff changeset
   921
  if (t == 2) {
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   922
    return inflate_dynamic();
637
fff0267c8e11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 636
diff changeset
   923
  }
fff0267c8e11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 636
diff changeset
   924
  if (t == 0) {
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   925
    return inflate_stored();
637
fff0267c8e11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 636
diff changeset
   926
  }
fff0267c8e11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 636
diff changeset
   927
  if (t == 1) {
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   928
    return inflate_fixed();
637
fff0267c8e11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 636
diff changeset
   929
  }
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   930
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   931
  Trace((stderr, "bad block type\n"));
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   932
  /* bad block type */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   933
  return 2;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   934
}
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   935
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   936
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   937
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   938
/* decompress an inflated entry */
1839
c10cd58ec334 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1820
diff changeset
   939
static int
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   940
inflate()
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   941
{
637
fff0267c8e11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 636
diff changeset
   942
  int endFlag;                /* last block flag */
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   943
  int r;                /* result code */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   944
  unsigned h;           /* maximum struct huft's malloc'ed */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   945
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   946
  /* initialize window, bit buffer */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   947
  wp = 0;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   948
  bk = 0;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   949
  bb = 0;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   950
637
fff0267c8e11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 636
diff changeset
   951
  endFlag = 0;
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   952
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   953
  /* decompress until the last block */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   954
  h = 0;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   955
  do {
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   956
    hufts = 0;
637
fff0267c8e11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 636
diff changeset
   957
    if ((r = inflate_block(&endFlag)) != 0) {
fff0267c8e11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 636
diff changeset
   958
      Trace((stderr, "inflate_block -> %d\n", r));
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   959
      return r;
637
fff0267c8e11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 636
diff changeset
   960
    }
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   961
    if (hufts > h)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   962
      h = hufts;
637
fff0267c8e11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 636
diff changeset
   963
  } while (!endFlag);
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   964
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   965
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   966
  /* flush out slide */
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   967
  FLUSH(wp);
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   968
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   969
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   970
  /* return success */
2893
08c695e14c86 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2861
diff changeset
   971
  Trace((stderr, "%u bytes in Huffman tables (%d/entry)\n", (unsigned)(h * sizeof(struct huft)), (int)(sizeof(struct huft))));
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   972
  return 0;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   973
}
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   974
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   975
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   976
1839
c10cd58ec334 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1820
diff changeset
   977
static int
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   978
inflate_free()
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   979
{
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   980
  if (fixed_td != (struct huft *)NULL)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   981
  {
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   982
    huft_free(fixed_td);
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   983
    fixed_td = (struct huft *)NULL;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   984
  }
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   985
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   986
  if (fixed_tl != (struct huft *)NULL)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   987
  {
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   988
    huft_free(fixed_tl);
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   989
    fixed_tl = (struct huft *)NULL;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   990
  }
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   991
  return 0;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   992
}
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   993
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   994
1839
c10cd58ec334 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1820
diff changeset
   995
static int
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   996
stx_inflate(in, out)
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   997
    char *in, *out;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   998
{
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
   999
    int rslt;
1749
b1c85d37d318 malloc fix
Stefan Vogel <sv@exept.de>
parents: 1579
diff changeset
  1000
    extern void *malloc();
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
  1001
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
  1002
    inPtr = in;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
  1003
    outPtr = out;
1564
Claus Gittinger <cg@exept.de>
parents: 1528
diff changeset
  1004
    slide = malloc(WSIZE+2);
637
fff0267c8e11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 636
diff changeset
  1005
    if (! slide) return 1;
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
  1006
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
  1007
    rslt = inflate();
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
  1008
    inflate_free();
637
fff0267c8e11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 636
diff changeset
  1009
    free(slide);
636
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
  1010
    return rslt;
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
  1011
}
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
  1012
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
  1013
%}
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
  1014
! !
bcf673eb43aa *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 635
diff changeset
  1015
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1016
!ZipArchive class methodsFor:'documentation'!
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1017
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1018
copyright
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1019
"
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1020
 COPYRIGHT (c) 1998 by eXept Software AG
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1021
	      All Rights Reserved
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1022
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1023
 This software is furnished under a license and may be used
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1024
 only in accordance with the terms of that license and with the
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1025
 inclusion of the above copyright notice.   This software may not
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1026
 be provided or otherwise made available to, or used by, any
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1027
 other person.  No title to or ownership of the software is
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1028
 hereby transferred.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1029
"
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1030
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1031
!
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1032
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1033
documentation
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1034
"
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1035
    provides access to a zip archive.
2855
568bf375326c Addec trailing slash behavior (enabled by default)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2832
diff changeset
  1036
568bf375326c Addec trailing slash behavior (enabled by default)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2832
diff changeset
  1037
568bf375326c Addec trailing slash behavior (enabled by default)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2832
diff changeset
  1038
    Trailing slash.
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1039
	Some implementations require a trailing slash in directory
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1040
	names (such as the OpenOffice zip implementation). Others just
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1041
	ignore external file attributes and indicate a directory entry
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1042
	by adding a trailing slash (such as the Java zip implementation).
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1043
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1044
	Since ZipArchive 1.98 a trailing slash is added for all directory
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1045
	entries iff appendTrailingSlash instvar is set to true. By default
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1046
	it is set to the value of DefaultAppendTrailingSlash which defaults
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1047
	to true.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1048
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1049
	Setting appendTrailingSlash to false inhibits trailing slash
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1050
	behavior.
4372
071c7186de7b #DOCUMENTATION by mawalch
mawalch
parents: 4335
diff changeset
  1051
071c7186de7b #DOCUMENTATION by mawalch
mawalch
parents: 4335
diff changeset
  1052
071c7186de7b #DOCUMENTATION by mawalch
mawalch
parents: 4335
diff changeset
  1053
    Caveat:
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1054
	the only compression methods (for now) are store and deflate.
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1055
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1056
    [author:]
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1057
	Claus Gittinger
2855
568bf375326c Addec trailing slash behavior (enabled by default)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2832
diff changeset
  1058
568bf375326c Addec trailing slash behavior (enabled by default)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2832
diff changeset
  1059
    [classvars:]
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1060
	DefaultAppendTrailingSlash...a default value for appendTralingSlash instvar.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1061
				     For details, see above
2855
568bf375326c Addec trailing slash behavior (enabled by default)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2832
diff changeset
  1062
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1063
"
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1064
!
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1065
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1066
examples
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1067
"
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1068
							[exBegin]
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1069
    |zip bytes|
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1070
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1071
    zip := ZipArchive oldFileNamed:'foo.zip'.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1072
    bytes := zip extract:'bar'.
4373
b6af52242a52 #OTHER by mawalch
mawalch
parents: 4372
diff changeset
  1073
    zip close.
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1074
							[exEnd]
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1075
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1076
							[exBegin]
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1077
    |zip bytes|
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1078
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1079
    zip := ZipArchive oldFileNamed:'source/stx/libbasic2.zip'.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1080
    zip entries do:[:entry |
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1081
	Transcript showCR:entry
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1082
    ].
4373
b6af52242a52 #OTHER by mawalch
mawalch
parents: 4372
diff changeset
  1083
    zip close.
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1084
							[exEnd]
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1085
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1086
							[exBegin]
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1087
    |zip bytes|
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1088
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1089
    zip := ZipArchive oldFileNamed:'source/stx/libbasic2.zip'.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1090
    bytes := zip extract:'TwoByteStr.st'.
4373
b6af52242a52 #OTHER by mawalch
mawalch
parents: 4372
diff changeset
  1091
    zip close.
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1092
    Transcript showCR:(bytes asString).
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1093
							[exEnd]
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1094
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1095
1993
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1096
    compatibility write check with winzip (compressed with deflate)
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1097
							[exBegin]
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1098
    |zipwr testDirectory testFileWr|
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1099
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1100
    testDirectory := 'C:\Dokumente und Einstellungen\stefan\Eigene Dateien\tmp\'.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1101
    testFileWr := 'crcTest_resume_compressed.zip'.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1102
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1103
    zipwr := ZipArchive newFileNamed:(testDirectory, testFileWr).
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1104
    zipwr addFile:'crcTest_resume_compressed.txt' withContents: 'resume'.
4373
b6af52242a52 #OTHER by mawalch
mawalch
parents: 4372
diff changeset
  1105
    zipwr close.
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1106
							[exEnd]
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1107
1993
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1108
    compatibility read check with winzip (compressed with deflate)
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1109
							[exBegin]
1993
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1110
    |ziprd testDirectory testFileRd contents|
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1111
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1112
    testDirectory := 'C:\Dokumente und Einstellungen\stefan\Eigene Dateien\tmp\'.
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1113
    testFileRd := 'crcTest_resume_compressed.zip'.
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1114
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1115
    ziprd := ZipArchive oldFileNamed:(testDirectory, testFileRd).
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1116
    contents := ziprd extract: ziprd entries first.
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1117
    contents inspect.
4373
b6af52242a52 #OTHER by mawalch
mawalch
parents: 4372
diff changeset
  1118
    ziprd close.
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1119
							[exEnd]
1993
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1120
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1121
    compatibility write check with winzip (uncompressed)
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1122
							[exBegin]
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1123
    |zipwr testDirectory testFileWr|
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1124
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1125
    testDirectory := 'C:\Dokumente und Einstellungen\stefan\Eigene Dateien\tmp\'.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1126
    testFileWr := 'crcTest_resume_uncompressed.zip'.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1127
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1128
    zipwr := ZipArchive newFileNamed:(testDirectory, testFileWr).
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1129
4373
b6af52242a52 #OTHER by mawalch
mawalch
parents: 4372
diff changeset
  1130
    zipwr addFile:'crcTest_resume_uncompressed.txt'
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1131
	withContents:'resume'
4373
b6af52242a52 #OTHER by mawalch
mawalch
parents: 4372
diff changeset
  1132
       compressMethod:0
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1133
	  asDirectory:false.
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1134
4373
b6af52242a52 #OTHER by mawalch
mawalch
parents: 4372
diff changeset
  1135
    zipwr close.
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1136
							[exEnd]
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1137
1993
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1138
    compatibility read check with winzip (uncompressed)
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1139
							[exBegin]
1993
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1140
    |ziprd testDirectory testFileRd contents|
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1141
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1142
    testDirectory := 'C:\Dokumente und Einstellungen\stefan\Eigene Dateien\tmp\'.
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1143
    testFileRd := 'crcTest_resume_uncompressed.zip'.
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1144
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1145
    ziprd := ZipArchive oldFileNamed:(testDirectory, testFileRd).
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1146
    contents := ziprd extract: ziprd entries first.
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1147
    contents inspect.
4373
b6af52242a52 #OTHER by mawalch
mawalch
parents: 4372
diff changeset
  1148
    ziprd close.
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1149
							[exEnd]
1993
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1150
4373
b6af52242a52 #OTHER by mawalch
mawalch
parents: 4372
diff changeset
  1151
    read an archive with files and/or directories, fetch the entries
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1152
    and create a new archive with the same content
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1153
							[exBegin]
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1154
    |ziprd zipwr entryDict testDirectory testFileRd testFileWr|
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1155
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1156
    testDirectory := 'C:\Dokumente und Einstellungen\stefan\Eigene Dateien\tmp\'.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1157
    testFileRd := 'projects.zip'.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1158
    testFileWr := 'projects_expecco_test.zip'.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1159
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1160
    ziprd := ZipArchive oldFileNamed:(testDirectory, testFileRd).
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1161
    entryDict := Dictionary new.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1162
    ziprd entries do: [:aFileName|
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1163
	entryDict at:aFileName put:(ziprd extract: aFileName) asString.
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1164
    ].
4373
b6af52242a52 #OTHER by mawalch
mawalch
parents: 4372
diff changeset
  1165
    ziprd close.
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1166
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1167
    zipwr := ZipArchive newFileNamed:(testDirectory, testFileWr).
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1168
    entryDict keysAndValuesDo: [:key :value|
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1169
	(value size == 0) ifTrue: [
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1170
	    zipwr addDirectory:key.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1171
	] ifFalse: [
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1172
	    zipwr addFile:key withContents:value
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1173
	].
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1174
    ].
4373
b6af52242a52 #OTHER by mawalch
mawalch
parents: 4372
diff changeset
  1175
    zipwr close.
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1176
							[exEnd]
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1177
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1178
							[exBegin]
1993
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1179
    |zipwr ziprd testDirectory testFileWr testFileRd zs|
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1180
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1181
    testDirectory := 'C:\Dokumente und Einstellungen\stefan\Eigene Dateien\tmp\'.
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1182
    testFileWr := 'crcTest_resume_compressed.zip'.
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1183
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1184
    zipwr := ZipArchive newFileNamed:(testDirectory, testFileWr).
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1185
    zipwr addFile:'crcTest_resume_compressed.txt' withContents: 'Das ist ein test, das ist ein test, das ist ein test'.
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1186
    zipwr close.
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1187
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1188
    testFileRd := 'crcTest_resume_compressed.zip'.
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1189
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1190
    ziprd := ZipArchive oldFileNamed:(testDirectory, testFileRd).
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1191
    zs := ziprd readStreamFor: 'crcTest_resume_compressed.txt'.
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1192
    zs inspect.
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1193
    ziprd close.
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1194
							[exEnd]
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1195
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1196
							[exBegin]
1993
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1197
    |zipwr ziprd testDirectory testFileWr testFileRd rs result|
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1198
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1199
    testDirectory := 'C:\Dokumente und Einstellungen\stefan\Eigene Dateien\tmp\'.
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1200
    testFileWr := 'readStreamTest_HelloWorld.zip'.
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1201
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1202
    zipwr := ZipArchive newFileNamed:(testDirectory, testFileWr).
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1203
    zipwr addFile:'readStreamTest_HelloWorld.txt' withContents: 'Hello World!!' compressed: false.
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1204
    zipwr close.
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1205
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1206
    testFileRd := 'readStreamTest_HelloWorld.zip'.
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1207
    ziprd := ZipArchive oldFileNamed:(testDirectory, testFileRd).
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1208
    rs := ziprd readStreamFor: 'readStreamTest_HelloWorld.txt'.
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1209
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1210
    result := ''.
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1211
    [ rs atEnd ] whileFalse: [
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1212
	result := result, (rs nextAvailable:5).
1993
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1213
    ].
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1214
    result inspect.
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1215
    rs close.
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  1216
    ziprd close.
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1217
							[exEnd]
1994
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  1218
4373
b6af52242a52 #OTHER by mawalch
mawalch
parents: 4372
diff changeset
  1219
    read an archive with files and/or directories and/or zipArchives,
b6af52242a52 #OTHER by mawalch
mawalch
parents: 4372
diff changeset
  1220
    fetch the entries (also from the include zip archives)
1994
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  1221
    and create a new archive
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1222
							[exBegin]
1994
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  1223
    |ziprd zipwr entryDict testDirectory testFileRd testFileWr zipRdSub1 zipRdSub2|
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  1224
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  1225
    testDirectory := 'C:\Dokumente und Einstellungen\stefan\Eigene Dateien\tmp\'.
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  1226
    testFileRd := 'ZipInZipFileTest.zip'.
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  1227
    testFileWr := 'ZipInZipFileTest_generated.zip'.
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  1228
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  1229
    ziprd := ZipArchive oldFileNamed:(testDirectory, testFileRd).
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  1230
    entryDict := Dictionary new.
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  1231
    ziprd entries do: [:aFileName|
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1232
	Transcript showCR: 'processing in top: ', aFileName.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1233
	(aFileName endsWith:'.zip') ifTrue: [
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1234
	    zipRdSub1 := ziprd extractArchive: aFileName.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1235
	    zipRdSub1 entries do: [:aFileName1|
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1236
		Transcript showCR: 'processing in sub 1: ', aFileName1.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1237
		(aFileName1 endsWith:'.zip') ifTrue: [
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1238
		    zipRdSub2 := zipRdSub1 extractArchive: aFileName1.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1239
		    zipRdSub2 entries do: [:aFileName2|
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1240
			Transcript showCR: 'processing in sub 2: ', aFileName2.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1241
			(aFileName2 endsWith:'.zip') ifTrue: [
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1242
			    self halt.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1243
			] ifFalse: [
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1244
			    entryDict at:aFileName2 put:(zipRdSub2 extract: aFileName2) asString.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1245
			].
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1246
		    ].
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1247
		    zipRdSub2 close.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1248
		] ifFalse: [
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1249
		    entryDict at:aFileName1 put:(zipRdSub1 extract: aFileName1) asString.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1250
		].
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1251
	    ].
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1252
	    zipRdSub1 close.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1253
	] ifFalse: [
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1254
	    entryDict at:aFileName put:(ziprd extract: aFileName) asString.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1255
	].
1994
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  1256
    ].
4373
b6af52242a52 #OTHER by mawalch
mawalch
parents: 4372
diff changeset
  1257
    ziprd close.
1994
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  1258
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  1259
    zipwr := ZipArchive newFileNamed:(testDirectory, testFileWr).
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  1260
    entryDict keysAndValuesDo: [:key :value|
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1261
	(value size == 0) ifTrue: [
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1262
	    zipwr addDirectory:key.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1263
	] ifFalse: [
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1264
	    zipwr addFile:key withContents:value
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1265
	].
1994
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  1266
    ].
4373
b6af52242a52 #OTHER by mawalch
mawalch
parents: 4372
diff changeset
  1267
    zipwr close.
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1268
							[exEnd]
1994
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  1269
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1270
"
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1271
!
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1272
1995
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  1273
examples2
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  1274
"
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  1275
    add to new zip archive a entry which is located in memory using selector
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1276
	addFile:'crcTest_resume_compressed.txt' withContents:
2007
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1277
    and real file contents from disk (uncompressed) identified by a readStream using selector
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1278
	addFile:rdStreamFile fromStream:
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1279
							[exBegin]
1995
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  1280
    |zipwr testDirectory testFileWr rdStreamFile rdFileStream |
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  1281
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  1282
    testDirectory := 'C:\Dokumente und Einstellungen\stefan\Eigene Dateien\tmp\'.
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  1283
    testFileWr := 'streamtest_uncompressed.zip'.
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  1284
    rdStreamFile := 'projects.zip'.
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  1285
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  1286
    rdFileStream := ('C:\Dokumente und Einstellungen\stefan\Eigene Dateien\tmp\', rdStreamFile) asFilename readStream.
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  1287
    zipwr := ZipArchive newFileNamed:(testDirectory, testFileWr).
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  1288
    zipwr addFile:'crcTest_resume_compressed.txt' withContents: 'resume'.
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  1289
    zipwr addFile:rdStreamFile fromStream: rdFileStream.
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  1290
4373
b6af52242a52 #OTHER by mawalch
mawalch
parents: 4372
diff changeset
  1291
    zipwr close.
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1292
							[exEnd]
1995
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  1293
2007
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1294
    read from zip archive a entry into memory using selector
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1295
	extract:'crcTest_resume_compressed.txt'
2007
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1296
    and store an uncompressed archive entry to disk using a writeStream
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1297
	extract: intoStream:
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1298
							[exBegin]
2007
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1299
    |ziprd testDirectory testFileRd wrStreamFile wrFileStream data1|
1995
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  1300
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  1301
    testDirectory := 'C:\Dokumente und Einstellungen\stefan\Eigene Dateien\tmp\'.
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  1302
    testFileRd := 'streamtest_uncompressed.zip'.
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  1303
    wrStreamFile := 'test_projects.zip'.
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  1304
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  1305
    ziprd := ZipArchive oldFileNamed:(testDirectory, testFileRd).
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  1306
    data1 := ziprd extract:'crcTest_resume_compressed.txt'.
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  1307
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  1308
    wrFileStream := ('C:\Dokumente und Einstellungen\stefan\Eigene Dateien\tmp\', wrStreamFile) asFilename writeStream.
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  1309
    (ziprd extract:'projects.zip' intoStream: wrFileStream) ifFalse: [
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1310
	self halt.
1995
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  1311
    ].
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  1312
4373
b6af52242a52 #OTHER by mawalch
mawalch
parents: 4372
diff changeset
  1313
    ziprd close.
2007
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1314
    wrFileStream close.
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1315
							[exEnd]
2007
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1316
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1317
    add (compressed) to new zip archive a real file contents from disk e.g. a pdf
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1318
    identified by a readStream
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1319
    using selector
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1320
	addFile:  fromStream:  compressMethod:
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1321
							[exBegin]
2007
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1322
    |zipwr testDirectory testFileWr rdStreamFile rdFileStream|
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1323
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1324
    testDirectory := 'C:\Dokumente und Einstellungen\stefan\Eigene Dateien\tmp\'.
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1325
    testFileWr := 'streamtest_compressed.zip'.
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1326
    rdStreamFile := 'test.pdf'.
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1327
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1328
    rdFileStream := ('C:\Dokumente und Einstellungen\stefan\Eigene Dateien\tmp\', rdStreamFile) asFilename readStream.
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1329
    zipwr := ZipArchive newFileNamed:(testDirectory, testFileWr).
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1330
    zipwr addFileCompressed:rdStreamFile fromStream: rdFileStream.
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1331
4373
b6af52242a52 #OTHER by mawalch
mawalch
parents: 4372
diff changeset
  1332
    zipwr close.
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1333
							[exEnd]
2007
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1334
4373
b6af52242a52 #OTHER by mawalch
mawalch
parents: 4372
diff changeset
  1335
    read from zip archive a compressed entry e.g. a pdf and store the contents
2007
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1336
    to disk using a readStream
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1337
    using selector
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1338
	readStreamFor: rdStreamFile
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1339
							[exBegin]
2007
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1340
    |ziprd testDirectory testFileRd wrStreamFile wrFileStream|
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1341
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1342
    testDirectory := 'C:\Dokumente und Einstellungen\stefan\Eigene Dateien\tmp\'.
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1343
    testFileRd := 'streamtest_compressed.zip'.
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1344
    wrStreamFile := 'test_expecco.pdf'.
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1345
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1346
    ziprd := ZipArchive oldFileNamed:(testDirectory, testFileRd).
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1347
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1348
    wrFileStream := ('C:\Dokumente und Einstellungen\stefan\Eigene Dateien\tmp\', wrStreamFile) asFilename writeStream.
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1349
    (ziprd extract:'test.pdf' intoStream: wrFileStream) ifFalse: [
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1350
	self halt.
2007
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1351
    ].
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1352
4373
b6af52242a52 #OTHER by mawalch
mawalch
parents: 4372
diff changeset
  1353
    ziprd close.
2007
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1354
    wrFileStream close.
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1355
							[exEnd]
1995
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  1356
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  1357
"
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  1358
!
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  1359
2003
051486962c69 *** empty log message ***
ab
parents: 1995
diff changeset
  1360
examples3
051486962c69 *** empty log message ***
ab
parents: 1995
diff changeset
  1361
"
2007
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1362
    add to new zip archive recursive the contents of a directory (uncompressed)
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1363
	addArchiveDirectory:  fromOsDirectory:
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1364
							[exBegin]
2003
051486962c69 *** empty log message ***
ab
parents: 1995
diff changeset
  1365
    |zipwr testDirectory testFileWr zipDirectory |
051486962c69 *** empty log message ***
ab
parents: 1995
diff changeset
  1366
051486962c69 *** empty log message ***
ab
parents: 1995
diff changeset
  1367
    testDirectory := 'C:\Dokumente und Einstellungen\stefan\Eigene Dateien\tmp\'.
051486962c69 *** empty log message ***
ab
parents: 1995
diff changeset
  1368
    testFileWr := 'zipDirectoryTest.zip'.
051486962c69 *** empty log message ***
ab
parents: 1995
diff changeset
  1369
    zipDirectory := 'abc'.
051486962c69 *** empty log message ***
ab
parents: 1995
diff changeset
  1370
051486962c69 *** empty log message ***
ab
parents: 1995
diff changeset
  1371
    zipwr := ZipArchive newFileNamed:(testDirectory, testFileWr).
051486962c69 *** empty log message ***
ab
parents: 1995
diff changeset
  1372
051486962c69 *** empty log message ***
ab
parents: 1995
diff changeset
  1373
    zipwr addArchiveDirectory: 'attachments' fromOsDirectory: (testDirectory,zipDirectory).
051486962c69 *** empty log message ***
ab
parents: 1995
diff changeset
  1374
4373
b6af52242a52 #OTHER by mawalch
mawalch
parents: 4372
diff changeset
  1375
    zipwr close.
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1376
							[exEnd]
2003
051486962c69 *** empty log message ***
ab
parents: 1995
diff changeset
  1377
2007
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1378
    read from zip archive all entries which are stored in an archive directory (uncompressed)
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1379
    and store all those entries in a directory on the file system
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1380
	restoreOsDirectory:  fromArchiveDirectory:
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1381
							[exBegin]
2003
051486962c69 *** empty log message ***
ab
parents: 1995
diff changeset
  1382
    |ziprd testDirectory testFileRd zipDirectory|
051486962c69 *** empty log message ***
ab
parents: 1995
diff changeset
  1383
051486962c69 *** empty log message ***
ab
parents: 1995
diff changeset
  1384
    testDirectory := 'C:\Dokumente und Einstellungen\stefan\Eigene Dateien\tmp\'.
051486962c69 *** empty log message ***
ab
parents: 1995
diff changeset
  1385
    testFileRd := 'zipDirectoryTest.zip'.
051486962c69 *** empty log message ***
ab
parents: 1995
diff changeset
  1386
    zipDirectory := 'xxx'.
051486962c69 *** empty log message ***
ab
parents: 1995
diff changeset
  1387
051486962c69 *** empty log message ***
ab
parents: 1995
diff changeset
  1388
    ziprd := ZipArchive oldFileNamed:(testDirectory, testFileRd).
051486962c69 *** empty log message ***
ab
parents: 1995
diff changeset
  1389
    ziprd restoreOsDirectory: (testDirectory,zipDirectory) fromArchiveDirectory: 'attachments'.
4373
b6af52242a52 #OTHER by mawalch
mawalch
parents: 4372
diff changeset
  1390
    ziprd close.
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1391
							[exEnd]
2003
051486962c69 *** empty log message ***
ab
parents: 1995
diff changeset
  1392
2007
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1393
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1394
    add to new zip archive recursive the contents of a directory (compressed)
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1395
	addArchiveDirectoryCompressed:  fromOsDirectory:
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1396
							[exBegin]
2007
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1397
    |zipwr testDirectory testFileWr zipDirectory |
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1398
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1399
    testDirectory := 'C:\Dokumente und Einstellungen\stefan\Eigene Dateien\tmp\'.
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1400
    testFileWr := 'zipDirectoryTestCompressed.zip'.
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1401
    zipDirectory := 'abc'.
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1402
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1403
    zipwr := ZipArchive newFileNamed:(testDirectory, testFileWr).
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1404
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1405
    zipwr addArchiveDirectoryCompressed: 'attachments' fromOsDirectory: (testDirectory,zipDirectory).
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1406
4373
b6af52242a52 #OTHER by mawalch
mawalch
parents: 4372
diff changeset
  1407
    zipwr close.
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1408
							[exEnd]
2007
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1409
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1410
    read from zip archive all entries which are stored in an archive directory (compressed)
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1411
    and store all those entries in a directory on the file system
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1412
	restoreOsDirectory:  fromArchiveDirectory:
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1413
							[exBegin]
2007
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1414
    |ziprd testDirectory testFileRd zipDirectory|
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1415
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1416
    testDirectory := 'C:\Dokumente und Einstellungen\stefan\Eigene Dateien\tmp\'.
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1417
    testFileRd := 'zipDirectoryTestCompressed.zip'.
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1418
    zipDirectory := 'xxx-compressed'.
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1419
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1420
    ziprd := ZipArchive oldFileNamed:(testDirectory, testFileRd).
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1421
    ziprd restoreOsDirectory: (testDirectory,zipDirectory) fromArchiveDirectory: 'attachments'.
4373
b6af52242a52 #OTHER by mawalch
mawalch
parents: 4372
diff changeset
  1422
    ziprd close.
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1423
							[exEnd]
2007
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  1424
2003
051486962c69 *** empty log message ***
ab
parents: 1995
diff changeset
  1425
"
051486962c69 *** empty log message ***
ab
parents: 1995
diff changeset
  1426
!
051486962c69 *** empty log message ***
ab
parents: 1995
diff changeset
  1427
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1428
fileFormatDescription
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1429
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1430
"/File:    APPNOTE.TXT - .ZIP File Format Specification
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1431
"/Version: 6.3.2
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1432
"/Revised: September 28, 2007
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1433
"/Copyright (c) 1989 - 2007 PKWARE Inc., All Rights Reserved.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1434
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1435
"/The use of certain technological aspects disclosed in the current
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1436
"/APPNOTE is available pursuant to the below section entitled
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1437
"/"Incorporating PKWARE Proprietary Technology into Your Product".
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1438
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1439
"/I. Purpose
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1440
"/----------
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1441
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1442
"/This specification is intended to define a cross-platform,
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1443
"/interoperable file storage and transfer format.  Since its
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1444
"/first publication in 1989, PKWARE has remained committed to
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1445
"/ensuring the interoperability of the .ZIP file format through
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1446
"/publication and maintenance of this specification.  We trust that
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1447
"/all .ZIP compatible vendors and application developers that have
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1448
"/adopted and benefited from this format will share and support
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1449
"/this commitment to interoperability.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1450
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1451
"/II. Contacting PKWARE
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1452
"/---------------------
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1453
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1454
"/     PKWARE, Inc.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1455
"/     648 N. Plankinton Avenue, Suite 220
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1456
"/     Milwaukee, WI 53203
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1457
"/     +1-414-289-9788
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1458
"/     +1-414-289-9789 FAX
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1459
"/     zipformat@pkware.com
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1460
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1461
"/III. Disclaimer
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1462
"/---------------
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1463
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1464
"/Although PKWARE will attempt to supply current and accurate
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1465
"/information relating to its file formats, algorithms, and the
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1466
"/subject programs, the possibility of error or omission cannot
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1467
"/be eliminated. PKWARE therefore expressly disclaims any warranty
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1468
"/that the information contained in the associated materials relating
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1469
"/to the subject programs and/or the format of the files created or
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1470
"/accessed by the subject programs and/or the algorithms used by
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1471
"/the subject programs, or any other matter, is current, correct or
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1472
"/accurate as delivered.  Any risk of damage due to any possible
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1473
"/inaccurate information is assumed by the user of the information.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1474
"/Furthermore, the information relating to the subject programs
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1475
"/and/or the file formats created or accessed by the subject
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1476
"/programs and/or the algorithms used by the subject programs is
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1477
"/subject to change without notice.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1478
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1479
"/If the version of this file is marked as a NOTIFICATION OF CHANGE,
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1480
"/the content defines an Early Feature Specification (EFS) change
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1481
"/to the .ZIP file format that may be subject to modification prior
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1482
"/to publication of the Final Feature Specification (FFS).  This
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1483
"/document may also contain information on Planned Feature
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1484
"/Specifications (PFS) defining recognized future extensions.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1485
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1486
"/IV. Change Log
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1487
"/--------------
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1488
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1489
"/Version       Change Description                        Date
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1490
"/-------       ------------------                       ----------
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1491
"/5.2           -Single Password Symmetric Encryption    06/02/2003
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1492
"/               storage
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1493
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1494
"/6.1.0         -Smartcard compatibility                 01/20/2004
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1495
"/              -Documentation on certificate storage
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1496
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1497
"/6.2.0         -Introduction of Central Directory       04/26/2004
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1498
"/               Encryption for encrypting metadata
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1499
"/              -Added OS/X to Version Made By values
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1500
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1501
"/6.2.1         -Added Extra Field placeholder for       04/01/2005
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1502
"/               POSZIP using ID 0x4690
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1503
"/
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1504
"/              -Clarified size field on
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1505
"/               "zip64 end of central directory record"
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1506
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1507
"/6.2.2         -Documented Final Feature Specification  01/06/2006
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1508
"/               for Strong Encryption
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1509
"/
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1510
"/              -Clarifications and typographical
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1511
"/               corrections
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1512
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1513
"/6.3.0         -Added tape positioning storage          09/29/2006
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1514
"/               parameters
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1515
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1516
"/              -Expanded list of supported hash algorithms
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1517
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1518
"/              -Expanded list of supported compression
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1519
"/               algorithms
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1520
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1521
"/              -Expanded list of supported encryption
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1522
"/               algorithms
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1523
"/
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1524
"/              -Added option for Unicode filename
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1525
"/               storage
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1526
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1527
"/              -Clarifications for consistent use
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1528
"/               of Data Descriptor records
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1529
"/
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1530
"/              -Added additional "Extra Field"
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1531
"/               definitions
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1532
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1533
"/6.3.1         -Corrected standard hash values for      04/11/2007
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1534
"/               SHA-256/384/512
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1535
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1536
"/6.3.2         -Added compression method 97             09/28/2007
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1537
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1538
"/              -Documented InfoZIP "Extra Field"
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1539
"/               values for UTF-8 file name and
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1540
"/               file comment storage
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1541
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1542
"/V. General Format of a .ZIP file
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1543
"/--------------------------------
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1544
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1545
"/  Files stored in arbitrary order.  Large .ZIP files can span multiple
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1546
"/  volumes or be split into user-defined segment sizes. All values
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1547
"/  are stored in little-endian byte order unless otherwise specified.
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1548
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1549
"/  Overall .ZIP file format:
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1550
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1551
"/    [local file header 1]
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1552
"/    [file data 1]
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1553
"/    [data descriptor 1]
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1554
"/    .
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1555
"/    .
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1556
"/    .
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1557
"/    [local file header n]
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1558
"/    [file data n]
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1559
"/    [data descriptor n]
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1560
"/    [archive decryption header]
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1561
"/    [archive extra data record]
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1562
"/    [central directory]
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1563
"/    [zip64 end of central directory record]
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1564
"/    [zip64 end of central directory locator]
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1565
"/    [end of central directory record]
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1566
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1567
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1568
"/  A.  Local file header:
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1569
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1570
"/        local file header signature     4 bytes  (0x04034b50)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1571
"/        version needed to extract       2 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1572
"/        general purpose bit flag        2 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1573
"/        compression method              2 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1574
"/        last mod file time              2 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1575
"/        last mod file date              2 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1576
"/        crc-32                          4 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1577
"/        compressed size                 4 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1578
"/        uncompressed size               4 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1579
"/        file name length                2 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1580
"/        extra field length              2 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1581
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1582
"/        file name (variable size)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1583
"/        extra field (variable size)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1584
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1585
"/  B.  File data
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1586
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1587
"/      Immediately following the local header for a file
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1588
"/      is the compressed or stored data for the file.
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1589
"/      The series of [local file header][file data][data
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1590
"/      descriptor] repeats for each file in the .ZIP archive.
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1591
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1592
"/  C.  Data descriptor:
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1593
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1594
"/        crc-32                          4 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1595
"/        compressed size                 4 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1596
"/        uncompressed size               4 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1597
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1598
"/      This descriptor exists only if bit 3 of the general
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1599
"/      purpose bit flag is set (see below).  It is byte aligned
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1600
"/      and immediately follows the last byte of compressed data.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1601
"/      This descriptor is used only when it was not possible to
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1602
"/      seek in the output .ZIP file, e.g., when the output .ZIP file
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1603
"/      was standard output or a non-seekable device.  For ZIP64(tm) format
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1604
"/      archives, the compressed and uncompressed sizes are 8 bytes each.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1605
"/
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1606
"/      When compressing files, compressed and uncompressed sizes
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1607
"/      should be stored in ZIP64 format (as 8 byte values) when a
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1608
"/      files size exceeds 0xFFFFFFFF.   However ZIP64 format may be
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1609
"/      used regardless of the size of a file.  When extracting, if
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1610
"/      the zip64 extended information extra field is present for
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1611
"/      the file the compressed and uncompressed sizes will be 8
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1612
"/      byte values.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1613
"/
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1614
"/      Although not originally assigned a signature, the value
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1615
"/      0x08074b50 has commonly been adopted as a signature value
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1616
"/      for the data descriptor record.  Implementers should be
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1617
"/      aware that ZIP files may be encountered with or without this
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1618
"/      signature marking data descriptors and should account for
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1619
"/      either case when reading ZIP files to ensure compatibility.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1620
"/      When writing ZIP files, it is recommended to include the
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1621
"/      signature value marking the data descriptor record.  When
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1622
"/      the signature is used, the fields currently defined for
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1623
"/      the data descriptor record will immediately follow the
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1624
"/      signature.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1625
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1626
"/      An extensible data descriptor will be released in a future
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1627
"/      version of this APPNOTE.  This new record is intended to
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1628
"/      resolve conflicts with the use of this record going forward,
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1629
"/      and to provide better support for streamed file processing.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1630
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1631
"/      When the Central Directory Encryption method is used, the data
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1632
"/      descriptor record is not required, but may be used.  If present,
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1633
"/      and bit 3 of the general purpose bit field is set to indicate
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1634
"/      its presence, the values in fields of the data descriptor
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1635
"/      record should be set to binary zeros.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1636
"/
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1637
"/  D.  Archive decryption header:
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1638
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1639
"/      The Archive Decryption Header is introduced in version 6.2
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1640
"/      of the ZIP format specification.  This record exists in support
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1641
"/      of the Central Directory Encryption Feature implemented as part of
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1642
"/      the Strong Encryption Specification as described in this document.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1643
"/      When the Central Directory Structure is encrypted, this decryption
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1644
"/      header will precede the encrypted data segment.  The encrypted
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1645
"/      data segment will consist of the Archive extra data record (if
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1646
"/      present) and the encrypted Central Directory Structure data.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1647
"/      The format of this data record is identical to the Decryption
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1648
"/      header record preceding compressed file data.  If the central
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1649
"/      directory structure is encrypted, the location of the start of
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1650
"/      this data record is determined using the Start of Central Directory
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1651
"/      field in the Zip64 End of Central Directory record.  Refer to the
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1652
"/      section on the Strong Encryption Specification for information
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1653
"/      on the fields used in the Archive Decryption Header record.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1654
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1655
"/
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1656
"/  E.  Archive extra data record:
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1657
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1658
"/        archive extra data signature    4 bytes  (0x08064b50)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1659
"/        extra field length              4 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1660
"/        extra field data                (variable size)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1661
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1662
"/      The Archive Extra Data Record is introduced in version 6.2
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1663
"/      of the ZIP format specification.  This record exists in support
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1664
"/      of the Central Directory Encryption Feature implemented as part of
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1665
"/      the Strong Encryption Specification as described in this document.
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1666
"/      When present, this record immediately precedes the central
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1667
"/      directory data structure.  The size of this data record will be
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1668
"/      included in the Size of the Central Directory field in the
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1669
"/      End of Central Directory record.  If the central directory structure
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1670
"/      is compressed, but not encrypted, the location of the start of
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1671
"/      this data record is determined using the Start of Central Directory
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1672
"/      field in the Zip64 End of Central Directory record.
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1673
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1674
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1675
"/  F.  Central directory structure:
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1676
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1677
"/      [file header 1]
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1678
"/      .
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1679
"/      .
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1680
"/      .
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1681
"/      [file header n]
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1682
"/      [digital signature]
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1683
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1684
"/      File header:
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1685
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1686
"/        central file header signature   4 bytes  (0x02014b50)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1687
"/        version made by                 2 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1688
"/        version needed to extract       2 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1689
"/        general purpose bit flag        2 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1690
"/        compression method              2 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1691
"/        last mod file time              2 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1692
"/        last mod file date              2 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1693
"/        crc-32                          4 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1694
"/        compressed size                 4 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1695
"/        uncompressed size               4 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1696
"/        file name length                2 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1697
"/        extra field length              2 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1698
"/        file comment length             2 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1699
"/        disk number start               2 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1700
"/        internal file attributes        2 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1701
"/        external file attributes        4 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1702
"/        relative offset of local header 4 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1703
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1704
"/        file name (variable size)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1705
"/        extra field (variable size)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1706
"/        file comment (variable size)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1707
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1708
"/      Digital signature:
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1709
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1710
"/        header signature                4 bytes  (0x05054b50)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1711
"/        size of data                    2 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1712
"/        signature data (variable size)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1713
"/
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1714
"/      With the introduction of the Central Directory Encryption
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1715
"/      feature in version 6.2 of this specification, the Central
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1716
"/      Directory Structure may be stored both compressed and encrypted.
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1717
"/      Although not required, it is assumed when encrypting the
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1718
"/      Central Directory Structure, that it will be compressed
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1719
"/      for greater storage efficiency.  Information on the
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1720
"/      Central Directory Encryption feature can be found in the section
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1721
"/      describing the Strong Encryption Specification. The Digital
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1722
"/      Signature record will be neither compressed nor encrypted.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1723
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1724
"/  G.  Zip64 end of central directory record
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1725
"/
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1726
"/        zip64 end of central dir
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1727
"/        signature                       4 bytes  (0x06064b50)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1728
"/        size of zip64 end of central
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1729
"/        directory record                8 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1730
"/        version made by                 2 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1731
"/        version needed to extract       2 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1732
"/        number of this disk             4 bytes
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1733
"/        number of the disk with the
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1734
"/        start of the central directory  4 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1735
"/        total number of entries in the
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1736
"/        central directory on this disk  8 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1737
"/        total number of entries in the
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1738
"/        central directory               8 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1739
"/        size of the central directory   8 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1740
"/        offset of start of central
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1741
"/        directory with respect to
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1742
"/        the starting disk number        8 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1743
"/        zip64 extensible data sector    (variable size)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1744
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1745
"/        The value stored into the "size of zip64 end of central
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1746
"/        directory record" should be the size of the remaining
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1747
"/        record and should not include the leading 12 bytes.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1748
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1749
"/        Size = SizeOfFixedFields + SizeOfVariableData - 12.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1750
"/
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1751
"/        The above record structure defines Version 1 of the
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1752
"/        zip64 end of central directory record. Version 1 was
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1753
"/        implemented in versions of this specification preceding
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1754
"/        6.2 in support of the ZIP64 large file feature. The
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1755
"/        introduction of the Central Directory Encryption feature
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1756
"/        implemented in version 6.2 as part of the Strong Encryption
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1757
"/        Specification defines Version 2 of this record structure.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1758
"/        Refer to the section describing the Strong Encryption
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1759
"/        Specification for details on the version 2 format for
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1760
"/        this record.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1761
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1762
"/        Special purpose data may reside in the zip64 extensible data
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1763
"/        sector field following either a V1 or V2 version of this
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1764
"/        record.  To ensure identification of this special purpose data
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1765
"/        it must include an identifying header block consisting of the
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1766
"/        following:
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1767
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1768
"/           Header ID  -  2 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1769
"/           Data Size  -  4 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1770
"/
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1771
"/        The Header ID field indicates the type of data that is in the
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1772
"/        data block that follows.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1773
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1774
"/        Data Size identifies the number of bytes that follow for this
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1775
"/        data block type.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1776
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1777
"/        Multiple special purpose data blocks may be present, but each
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1778
"/        must be preceded by a Header ID and Data Size field.  Current
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1779
"/        mappings of Header ID values supported in this field are as
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1780
"/        defined in APPENDIX C.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1781
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1782
"/  H.  Zip64 end of central directory locator
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1783
"/
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1784
"/        zip64 end of central dir locator
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1785
"/        signature                       4 bytes  (0x07064b50)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1786
"/        number of the disk with the
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1787
"/        start of the zip64 end of
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1788
"/        central directory               4 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1789
"/        relative offset of the zip64
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1790
"/        end of central directory record 8 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1791
"/        total number of disks           4 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1792
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1793
"/  I.  End of central directory record:
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1794
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1795
"/        end of central dir signature    4 bytes  (0x06054b50)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1796
"/        number of this disk             2 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1797
"/        number of the disk with the
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1798
"/        start of the central directory  2 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1799
"/        total number of entries in the
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1800
"/        central directory on this disk  2 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1801
"/        total number of entries in
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1802
"/        the central directory           2 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1803
"/        size of the central directory   4 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1804
"/        offset of start of central
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1805
"/        directory with respect to
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1806
"/        the starting disk number        4 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1807
"/        .ZIP file comment length        2 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1808
"/        .ZIP file comment       (variable size)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1809
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1810
"/  J.  Explanation of fields:
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1811
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1812
"/      version made by (2 bytes)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1813
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1814
"/          The upper byte indicates the compatibility of the file
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1815
"/          attribute information.  If the external file attributes
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1816
"/          are compatible with MS-DOS and can be read by PKZIP for
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1817
"/          DOS version 2.04g then this value will be zero.  If these
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1818
"/          attributes are not compatible, then this value will
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1819
"/          identify the host system on which the attributes are
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1820
"/          compatible.  Software can use this information to determine
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1821
"/          the line record format for text files etc.  The current
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1822
"/          mappings are:
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1823
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1824
"/          0 - MS-DOS and OS/2 (FAT / VFAT / FAT32 file systems)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1825
"/          1 - Amiga                     2 - OpenVMS
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1826
"/          3 - UNIX                      4 - VM/CMS
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1827
"/          5 - Atari ST                  6 - OS/2 H.P.F.S.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1828
"/          7 - Macintosh                 8 - Z-System
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1829
"/          9 - CP/M                     10 - Windows NTFS
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1830
"/         11 - MVS (OS/390 - Z/OS)      12 - VSE
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1831
"/         13 - Acorn Risc               14 - VFAT
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1832
"/         15 - alternate MVS            16 - BeOS
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1833
"/         17 - Tandem                   18 - OS/400
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1834
"/         19 - OS/X (Darwin)            20 thru 255 - unused
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1835
"/
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1836
"/          The lower byte indicates the ZIP specification version
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1837
"/          (the version of this document) supported by the software
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1838
"/          used to encode the file.  The value/10 indicates the major
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1839
"/          version number, and the value mod 10 is the minor version
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1840
"/          number.
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1841
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1842
"/      version needed to extract (2 bytes)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1843
"/
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1844
"/          The minimum supported ZIP specification version needed to
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1845
"/          extract the file, mapped as above.  This value is based on
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1846
"/          the specific format features a ZIP program must support to
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1847
"/          be able to extract the file.  If multiple features are
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1848
"/          applied to a file, the minimum version should be set to the
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1849
"/          feature having the highest value. New features or feature
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1850
"/          changes affecting the published format specification will be
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1851
"/          implemented using higher version numbers than the last
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1852
"/          published value to avoid conflict.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1853
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1854
"/          Current minimum feature versions are as defined below:
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1855
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1856
"/          1.0 - Default value
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1857
"/          1.1 - File is a volume label
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1858
"/          2.0 - File is a folder (directory)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1859
"/          2.0 - File is compressed using Deflate compression
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1860
"/          2.0 - File is encrypted using traditional PKWARE encryption
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1861
"/          2.1 - File is compressed using Deflate64(tm)
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1862
"/          2.5 - File is compressed using PKWARE DCL Implode
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1863
"/          2.7 - File is a patch data set
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1864
"/          4.5 - File uses ZIP64 format extensions
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1865
"/          4.6 - File is compressed using BZIP2 compression*
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1866
"/          5.0 - File is encrypted using DES
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1867
"/          5.0 - File is encrypted using 3DES
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1868
"/          5.0 - File is encrypted using original RC2 encryption
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1869
"/          5.0 - File is encrypted using RC4 encryption
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1870
"/          5.1 - File is encrypted using AES encryption
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1871
"/          5.1 - File is encrypted using corrected RC2 encryption**
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1872
"/          5.2 - File is encrypted using corrected RC2-64 encryption**
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1873
"/          6.1 - File is encrypted using non-OAEP key wrapping***
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1874
"/          6.2 - Central directory encryption
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1875
"/          6.3 - File is compressed using LZMA
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1876
"/          6.3 - File is compressed using PPMd+
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1877
"/          6.3 - File is encrypted using Blowfish
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1878
"/          6.3 - File is encrypted using Twofish
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1879
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1880
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1881
"/          * Early 7.x (pre-7.2) versions of PKZIP incorrectly set the
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1882
"/          version needed to extract for BZIP2 compression to be 50
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1883
"/          when it should have been 46.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1884
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1885
"/          ** Refer to the section on Strong Encryption Specification
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1886
"/          for additional information regarding RC2 corrections.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1887
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1888
"/          *** Certificate encryption using non-OAEP key wrapping is the
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1889
"/          intended mode of operation for all versions beginning with 6.1.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1890
"/          Support for OAEP key wrapping should only be used for
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1891
"/          backward compatibility when sending ZIP files to be opened by
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1892
"/          versions of PKZIP older than 6.1 (5.0 or 6.0).
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1893
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1894
"/          + Files compressed using PPMd should set the version
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1895
"/          needed to extract field to 6.3, however, not all ZIP
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1896
"/          programs enforce this and may be unable to decompress
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1897
"/          data files compressed using PPMd if this value is set.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1898
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1899
"/          When using ZIP64 extensions, the corresponding value in the
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1900
"/          zip64 end of central directory record should also be set.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1901
"/          This field should be set appropriately to indicate whether
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1902
"/          Version 1 or Version 2 format is in use.
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1903
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1904
"/      general purpose bit flag: (2 bytes)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1905
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1906
"/          Bit 0: If set, indicates that the file is encrypted.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1907
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1908
"/          (For Method 6 - Imploding)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1909
"/          Bit 1: If the compression method used was type 6,
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1910
"/                 Imploding, then this bit, if set, indicates
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1911
"/                 an 8K sliding dictionary was used.  If clear,
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1912
"/                 then a 4K sliding dictionary was used.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1913
"/          Bit 2: If the compression method used was type 6,
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1914
"/                 Imploding, then this bit, if set, indicates
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1915
"/                 3 Shannon-Fano trees were used to encode the
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1916
"/                 sliding dictionary output.  If clear, then 2
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1917
"/                 Shannon-Fano trees were used.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1918
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1919
"/          (For Methods 8 and 9 - Deflating)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1920
"/          Bit 2  Bit 1
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1921
"/            0      0    Normal (-en) compression option was used.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1922
"/            0      1    Maximum (-exx/-ex) compression option was used.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1923
"/            1      0    Fast (-ef) compression option was used.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1924
"/            1      1    Super Fast (-es) compression option was used.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1925
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1926
"/          (For Method 14 - LZMA)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1927
"/          Bit 1: If the compression method used was type 14,
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1928
"/                 LZMA, then this bit, if set, indicates
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1929
"/                 an end-of-stream (EOS) marker is used to
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1930
"/                 mark the end of the compressed data stream.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1931
"/                 If clear, then an EOS marker is not present
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1932
"/                 and the compressed data size must be known
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1933
"/                 to extract.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1934
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1935
"/          Note:  Bits 1 and 2 are undefined if the compression
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1936
"/                 method is any other.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1937
"/
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1938
"/          Bit 3: If this bit is set, the fields crc-32, compressed
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1939
"/                 size and uncompressed size are set to zero in the
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1940
"/                 local header.  The correct values are put in the
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1941
"/                 data descriptor immediately following the compressed
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1942
"/                 data.  (Note: PKZIP version 2.04g for DOS only
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1943
"/                 recognizes this bit for method 8 compression, newer
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1944
"/                 versions of PKZIP recognize this bit for any
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1945
"/                 compression method.)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1946
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1947
"/          Bit 4: Reserved for use with method 8, for enhanced
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1948
"/                 deflating.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1949
"/
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1950
"/          Bit 5: If this bit is set, this indicates that the file is
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1951
"/                 compressed patched data.  (Note: Requires PKZIP
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1952
"/                 version 2.70 or greater)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1953
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1954
"/          Bit 6: Strong encryption.  If this bit is set, you should
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1955
"/                 set the version needed to extract value to at least
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1956
"/                 50 and you must also set bit 0.  If AES encryption
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1957
"/                 is used, the version needed to extract value must
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1958
"/                 be at least 51.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1959
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1960
"/          Bit 7: Currently unused.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1961
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1962
"/          Bit 8: Currently unused.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1963
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1964
"/          Bit 9: Currently unused.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1965
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1966
"/          Bit 10: Currently unused.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1967
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1968
"/          Bit 11: Language encoding flag (EFS).  If this bit is set,
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1969
"/                  the filename and comment fields for this file
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1970
"/                  must be encoded using UTF-8. (see APPENDIX D)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1971
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1972
"/          Bit 12: Reserved by PKWARE for enhanced compression.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1973
"/
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1974
"/          Bit 13: Used when encrypting the Central Directory to indicate
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1975
"/                  selected data values in the Local Header are masked to
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  1976
"/                  hide their actual values.  See the section describing
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1977
"/                  the Strong Encryption Specification for details.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1978
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1979
"/          Bit 14: Reserved by PKWARE.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1980
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1981
"/          Bit 15: Reserved by PKWARE.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1982
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1983
"/      compression method: (2 bytes)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1984
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1985
"/          (see accompanying documentation for algorithm
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1986
"/          descriptions)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1987
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1988
"/          0 - The file is stored (no compression)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1989
"/          1 - The file is Shrunk
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1990
"/          2 - The file is Reduced with compression factor 1
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1991
"/          3 - The file is Reduced with compression factor 2
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1992
"/          4 - The file is Reduced with compression factor 3
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1993
"/          5 - The file is Reduced with compression factor 4
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1994
"/          6 - The file is Imploded
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1995
"/          7 - Reserved for Tokenizing compression algorithm
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1996
"/          8 - The file is Deflated
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1997
"/          9 - Enhanced Deflating using Deflate64(tm)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1998
"/         10 - PKWARE Data Compression Library Imploding (old IBM TERSE)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  1999
"/         11 - Reserved by PKWARE
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2000
"/         12 - File is compressed using BZIP2 algorithm
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2001
"/         13 - Reserved by PKWARE
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2002
"/         14 - LZMA (EFS)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2003
"/         15 - Reserved by PKWARE
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2004
"/         16 - Reserved by PKWARE
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2005
"/         17 - Reserved by PKWARE
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2006
"/         18 - File is compressed using IBM TERSE (new)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2007
"/         19 - IBM LZ77 z Architecture (PFS)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2008
"/         97 - WavPack compressed data
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2009
"/         98 - PPMd version I, Rev 1
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2010
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2011
"/      date and time fields: (2 bytes each)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2012
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2013
"/          The date and time are encoded in standard MS-DOS format.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2014
"/          If input came from standard input, the date and time are
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2015
"/          those at which compression was started for this data.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2016
"/          If encrypting the central directory and general purpose bit
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2017
"/          flag 13 is set indicating masking, the value stored in the
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2018
"/          Local Header will be zero.
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2019
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2020
"/      CRC-32: (4 bytes)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2021
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2022
"/          The CRC-32 algorithm was generously contributed by
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2023
"/          David Schwaderer and can be found in his excellent
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2024
"/          book "C Programmers Guide to NetBIOS" published by
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2025
"/          Howard W. Sams & Co. Inc.  The 'magic number' for
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2026
"/          the CRC is 0xdebb20e3.  The proper CRC pre and post
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2027
"/          conditioning is used, meaning that the CRC register
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2028
"/          is pre-conditioned with all ones (a starting value
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2029
"/          of 0xffffffff) and the value is post-conditioned by
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2030
"/          taking the one's complement of the CRC residual.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2031
"/          If bit 3 of the general purpose flag is set, this
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2032
"/          field is set to zero in the local header and the correct
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2033
"/          value is put in the data descriptor and in the central
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2034
"/          directory. When encrypting the central directory, if the
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2035
"/          local header is not in ZIP64 format and general purpose
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2036
"/          bit flag 13 is set indicating masking, the value stored
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2037
"/          in the Local Header will be zero.
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2038
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2039
"/      compressed size: (4 bytes)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2040
"/      uncompressed size: (4 bytes)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2041
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2042
"/          The size of the file compressed and uncompressed,
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2043
"/          respectively.  When a decryption header is present it will
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2044
"/          be placed in front of the file data and the value of the
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2045
"/          compressed file size will include the bytes of the decryption
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2046
"/          header.  If bit 3 of the general purpose bit flag is set,
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2047
"/          these fields are set to zero in the local header and the
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2048
"/          correct values are put in the data descriptor and
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2049
"/          in the central directory.  If an archive is in ZIP64 format
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2050
"/          and the value in this field is 0xFFFFFFFF, the size will be
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2051
"/          in the corresponding 8 byte ZIP64 extended information
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2052
"/          extra field.  When encrypting the central directory, if the
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2053
"/          local header is not in ZIP64 format and general purpose bit
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2054
"/          flag 13 is set indicating masking, the value stored for the
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2055
"/          uncompressed size in the Local Header will be zero.
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2056
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2057
"/      file name length: (2 bytes)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2058
"/      extra field length: (2 bytes)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2059
"/      file comment length: (2 bytes)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2060
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2061
"/          The length of the file name, extra field, and comment
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2062
"/          fields respectively.  The combined length of any
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2063
"/          directory record and these three fields should not
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2064
"/          generally exceed 65,535 bytes.  If input came from standard
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2065
"/          input, the file name length is set to zero.
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2066
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2067
"/      disk number start: (2 bytes)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2068
"/
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2069
"/          The number of the disk on which this file begins.  If an
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2070
"/          archive is in ZIP64 format and the value in this field is
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2071
"/          0xFFFF, the size will be in the corresponding 4 byte zip64
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2072
"/          extended information extra field.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2073
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2074
"/      internal file attributes: (2 bytes)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2075
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2076
"/          Bits 1 and 2 are reserved for use by PKWARE.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2077
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2078
"/          The lowest bit of this field indicates, if set, that
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2079
"/          the file is apparently an ASCII or text file.  If not
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2080
"/          set, that the file apparently contains binary data.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2081
"/          The remaining bits are unused in version 1.0.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2082
"/
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2083
"/          The 0x0002 bit of this field indicates, if set, that a
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2084
"/          4 byte variable record length control field precedes each
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2085
"/          logical record indicating the length of the record. The
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2086
"/          record length control field is stored in little-endian byte
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2087
"/          order.  This flag is independent of text control characters,
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2088
"/          and if used in conjunction with text data, includes any
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2089
"/          control characters in the total length of the record. This
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2090
"/          value is provided for mainframe data transfer support.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2091
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2092
"/      external file attributes: (4 bytes)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2093
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2094
"/          The mapping of the external attributes is
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2095
"/          host-system dependent (see 'version made by').  For
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2096
"/          MS-DOS, the low order byte is the MS-DOS directory
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2097
"/          attribute byte.  If input came from standard input, this
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2098
"/          field is set to zero.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2099
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2100
"/      relative offset of local header: (4 bytes)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2101
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2102
"/          This is the offset from the start of the first disk on
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2103
"/          which this file appears, to where the local header should
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2104
"/          be found.  If an archive is in ZIP64 format and the value
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2105
"/          in this field is 0xFFFFFFFF, the size will be in the
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2106
"/          corresponding 8 byte zip64 extended information extra field.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2107
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2108
"/      file name: (Variable)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2109
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2110
"/          The name of the file, with optional relative path.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2111
"/          The path stored should not contain a drive or
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2112
"/          device letter, or a leading slash.  All slashes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2113
"/          should be forward slashes '/' as opposed to
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2114
"/          backwards slashes '\' for compatibility with Amiga
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2115
"/          and UNIX file systems etc.  If input came from standard
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2116
"/          input, there is no file name field.  If encrypting
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2117
"/          the central directory and general purpose bit flag 13 is set
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2118
"/          indicating masking, the file name stored in the Local Header
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2119
"/          will not be the actual file name.  A masking value consisting
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2120
"/          of a unique hexadecimal value will be stored.  This value will
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2121
"/          be sequentially incremented for each file in the archive. See
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2122
"/          the section on the Strong Encryption Specification for details
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2123
"/          on retrieving the encrypted file name.
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2124
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2125
"/      extra field: (Variable)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2126
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2127
"/          This is for expansion.  If additional information
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2128
"/          needs to be stored for special needs or for specific
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2129
"/          platforms, it should be stored here.  Earlier versions
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2130
"/          of the software can then safely skip this file, and
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2131
"/          find the next file or header.  This field will be 0
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2132
"/          length in version 1.0.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2133
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2134
"/          In order to allow different programs and different types
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2135
"/          of information to be stored in the 'extra' field in .ZIP
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2136
"/          files, the following structure should be used for all
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2137
"/          programs storing data in this field:
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2138
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2139
"/          header1+data1 + header2+data2 . . .
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2140
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2141
"/          Each header should consist of:
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2142
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2143
"/            Header ID - 2 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2144
"/            Data Size - 2 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2145
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2146
"/          Note: all fields stored in Intel low-byte/high-byte order.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2147
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2148
"/          The Header ID field indicates the type of data that is in
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2149
"/          the following data block.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2150
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2151
"/          Header ID's of 0 thru 31 are reserved for use by PKWARE.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2152
"/          The remaining ID's can be used by third party vendors for
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2153
"/          proprietary usage.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2154
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2155
"/          The current Header ID mappings defined by PKWARE are:
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2156
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2157
"/          0x0001        Zip64 extended information extra field
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2158
"/          0x0007        AV Info
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2159
"/          0x0008        Reserved for extended language encoding data (PFS)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2160
"/                        (see APPENDIX D)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2161
"/          0x0009        OS/2
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2162
"/          0x000a        NTFS
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2163
"/          0x000c        OpenVMS
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2164
"/          0x000d        UNIX
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2165
"/          0x000e        Reserved for file stream and fork descriptors
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2166
"/          0x000f        Patch Descriptor
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2167
"/          0x0014        PKCS#7 Store for X.509 Certificates
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2168
"/          0x0015        X.509 Certificate ID and Signature for
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2169
"/                        individual file
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2170
"/          0x0016        X.509 Certificate ID for Central Directory
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2171
"/          0x0017        Strong Encryption Header
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2172
"/          0x0018        Record Management Controls
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2173
"/          0x0019        PKCS#7 Encryption Recipient Certificate List
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2174
"/          0x0065        IBM S/390 (Z390), AS/400 (I400) attributes
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2175
"/                        - uncompressed
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2176
"/          0x0066        Reserved for IBM S/390 (Z390), AS/400 (I400)
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2177
"/                        attributes - compressed
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2178
"/          0x4690        POSZIP 4690 (reserved)
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2179
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2180
"/          Third party mappings commonly used are:
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2181
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2182
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2183
"/          0x07c8        Macintosh
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2184
"/          0x2605        ZipIt Macintosh
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2185
"/          0x2705        ZipIt Macintosh 1.3.5+
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2186
"/          0x2805        ZipIt Macintosh 1.3.5+
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2187
"/          0x334d        Info-ZIP Macintosh
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2188
"/          0x4341        Acorn/SparkFS
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2189
"/          0x4453        Windows NT security descriptor (binary ACL)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2190
"/          0x4704        VM/CMS
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2191
"/          0x470f        MVS
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2192
"/          0x4b46        FWKCS MD5 (see below)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2193
"/          0x4c41        OS/2 access control list (text ACL)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2194
"/          0x4d49        Info-ZIP OpenVMS
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2195
"/          0x4f4c        Xceed original location extra field
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2196
"/          0x5356        AOS/VS (ACL)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2197
"/          0x5455        extended timestamp
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2198
"/          0x554e        Xceed unicode extra field
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2199
"/          0x5855        Info-ZIP UNIX (original, also OS/2, NT, etc)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2200
"/          0x6375        Info-ZIP Unicode Comment Extra Field
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2201
"/          0x6542        BeOS/BeBox
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2202
"/          0x7075        Info-ZIP Unicode Path Extra Field
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2203
"/          0x756e        ASi UNIX
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2204
"/          0x7855        Info-ZIP UNIX (new)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2205
"/          0xa220        Microsoft Open Packaging Growth Hint
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2206
"/          0xfd4a        SMS/QDOS
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2207
"/
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2208
"/          Detailed descriptions of Extra Fields defined by third
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2209
"/          party mappings will be documented as information on
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2210
"/          these data structures is made available to PKWARE.
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2211
"/          PKWARE does not guarantee the accuracy of any published
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2212
"/          third party data.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2213
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2214
"/          The Data Size field indicates the size of the following
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2215
"/          data block. Programs can use this value to skip to the
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2216
"/          next header block, passing over any data blocks that are
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2217
"/          not of interest.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2218
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2219
"/          Note: As stated above, the size of the entire .ZIP file
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2220
"/                header, including the file name, comment, and extra
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2221
"/                field should not exceed 64K in size.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2222
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2223
"/          In case two different programs should appropriate the same
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2224
"/          Header ID value, it is strongly recommended that each
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2225
"/          program place a unique signature of at least two bytes in
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2226
"/          size (and preferably 4 bytes or bigger) at the start of
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2227
"/          each data area.  Every program should verify that its
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2228
"/          unique signature is present, in addition to the Header ID
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2229
"/          value being correct, before assuming that it is a block of
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2230
"/          known type.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2231
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2232
"/         -Zip64 Extended Information Extra Field (0x0001):
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2233
"/
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2234
"/          The following is the layout of the zip64 extended
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2235
"/          information "extra" block. If one of the size or
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2236
"/          offset fields in the Local or Central directory
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2237
"/          record is too small to hold the required data,
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2238
"/          a Zip64 extended information record is created.
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2239
"/          The order of the fields in the zip64 extended
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2240
"/          information record is fixed, but the fields will
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2241
"/          only appear if the corresponding Local or Central
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2242
"/          directory record field is set to 0xFFFF or 0xFFFFFFFF.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2243
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2244
"/          Note: all fields stored in Intel low-byte/high-byte order.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2245
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2246
"/          Value      Size       Description
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2247
"/          -----      ----       -----------
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2248
"/  (ZIP64) 0x0001     2 bytes    Tag for this "extra" block type
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2249
"/          Size       2 bytes    Size of this "extra" block
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2250
"/          Original
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2251
"/          Size       8 bytes    Original uncompressed file size
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2252
"/          Compressed
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2253
"/          Size       8 bytes    Size of compressed data
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2254
"/          Relative Header
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2255
"/          Offset     8 bytes    Offset of local header record
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2256
"/          Disk Start
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2257
"/          Number     4 bytes    Number of the disk on which
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2258
"/                                this file starts
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2259
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2260
"/          This entry in the Local header must include BOTH original
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2261
"/          and compressed file size fields. If encrypting the
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2262
"/          central directory and bit 13 of the general purpose bit
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2263
"/          flag is set indicating masking, the value stored in the
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2264
"/          Local Header for the original file size will be zero.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2265
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2266
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2267
"/         -OS/2 Extra Field (0x0009):
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2268
"/
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2269
"/          The following is the layout of the OS/2 attributes "extra"
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2270
"/          block.  (Last Revision  09/05/95)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2271
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2272
"/          Note: all fields stored in Intel low-byte/high-byte order.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2273
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2274
"/          Value       Size          Description
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2275
"/          -----       ----          -----------
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2276
"/  (OS/2)  0x0009      2 bytes       Tag for this "extra" block type
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2277
"/          TSize       2 bytes       Size for the following data block
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2278
"/          BSize       4 bytes       Uncompressed Block Size
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2279
"/          CType       2 bytes       Compression type
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2280
"/          EACRC       4 bytes       CRC value for uncompress block
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2281
"/          (var)       variable      Compressed block
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2282
"/
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2283
"/          The OS/2 extended attribute structure (FEA2LIST) is
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2284
"/          compressed and then stored in it's entirety within this
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2285
"/          structure.  There will only ever be one "block" of data in
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2286
"/          VarFields[].
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2287
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2288
"/         -NTFS Extra Field (0x000a):
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2289
"/
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2290
"/          The following is the layout of the NTFS attributes
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2291
"/          "extra" block. (Note: At this time the Mtime, Atime
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2292
"/          and Ctime values may be used on any WIN32 system.)
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2293
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2294
"/          Note: all fields stored in Intel low-byte/high-byte order.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2295
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2296
"/          Value      Size       Description
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2297
"/          -----      ----       -----------
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2298
"/  (NTFS)  0x000a     2 bytes    Tag for this "extra" block type
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2299
"/          TSize      2 bytes    Size of the total "extra" block
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2300
"/          Reserved   4 bytes    Reserved for future use
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2301
"/          Tag1       2 bytes    NTFS attribute tag value #1
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2302
"/          Size1      2 bytes    Size of attribute #1, in bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2303
"/          (var.)     Size1      Attribute #1 data
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2304
"/          .
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2305
"/          .
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2306
"/          .
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2307
"/          TagN       2 bytes    NTFS attribute tag value #N
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2308
"/          SizeN      2 bytes    Size of attribute #N, in bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2309
"/          (var.)     SizeN      Attribute #N data
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2310
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2311
"/          For NTFS, values for Tag1 through TagN are as follows:
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2312
"/          (currently only one set of attributes is defined for NTFS)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2313
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2314
"/          Tag        Size       Description
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2315
"/          -----      ----       -----------
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2316
"/          0x0001     2 bytes    Tag for attribute #1
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2317
"/          Size1      2 bytes    Size of attribute #1, in bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2318
"/          Mtime      8 bytes    File last modification time
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2319
"/          Atime      8 bytes    File last access time
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2320
"/          Ctime      8 bytes    File creation time
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2321
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2322
"/         -OpenVMS Extra Field (0x000c):
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2323
"/
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2324
"/          The following is the layout of the OpenVMS attributes
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2325
"/          "extra" block.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2326
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2327
"/          Note: all fields stored in Intel low-byte/high-byte order.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2328
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2329
"/          Value      Size       Description
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2330
"/          -----      ----       -----------
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2331
"/  (VMS)   0x000c     2 bytes    Tag for this "extra" block type
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2332
"/          TSize      2 bytes    Size of the total "extra" block
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2333
"/          CRC        4 bytes    32-bit CRC for remainder of the block
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2334
"/          Tag1       2 bytes    OpenVMS attribute tag value #1
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2335
"/          Size1      2 bytes    Size of attribute #1, in bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2336
"/          (var.)     Size1      Attribute #1 data
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2337
"/          .
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2338
"/          .
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2339
"/          .
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2340
"/          TagN       2 bytes    OpenVMS attribute tag value #N
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2341
"/          SizeN      2 bytes    Size of attribute #N, in bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2342
"/          (var.)     SizeN      Attribute #N data
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2343
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2344
"/          Rules:
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2345
"/
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2346
"/          1. There will be one or more of attributes present, which
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2347
"/             will each be preceded by the above TagX & SizeX values.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2348
"/             These values are identical to the ATR$C_XXXX and
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2349
"/             ATR$S_XXXX constants which are defined in ATR.H under
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2350
"/             OpenVMS C.  Neither of these values will ever be zero.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2351
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2352
"/          2. No word alignment or padding is performed.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2353
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2354
"/          3. A well-behaved PKZIP/OpenVMS program should never produce
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2355
"/             more than one sub-block with the same TagX value.  Also,
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2356
"/             there will never be more than one "extra" block of type
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2357
"/             0x000c in a particular directory record.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2358
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2359
"/         -UNIX Extra Field (0x000d):
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2360
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2361
"/          The following is the layout of the UNIX "extra" block.
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2362
"/          Note: all fields are stored in Intel low-byte/high-byte
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2363
"/          order.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2364
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2365
"/          Value       Size          Description
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2366
"/          -----       ----          -----------
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2367
"/  (UNIX)  0x000d      2 bytes       Tag for this "extra" block type
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2368
"/          TSize       2 bytes       Size for the following data block
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2369
"/          Atime       4 bytes       File last access time
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2370
"/          Mtime       4 bytes       File last modification time
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2371
"/          Uid         2 bytes       File user ID
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2372
"/          Gid         2 bytes       File group ID
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2373
"/          (var)       variable      Variable length data field
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2374
"/
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2375
"/          The variable length data field will contain file type
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2376
"/          specific data.  Currently the only values allowed are
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2377
"/          the original "linked to" file names for hard or symbolic
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2378
"/          links, and the major and minor device node numbers for
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2379
"/          character and block device nodes.  Since device nodes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2380
"/          cannot be either symbolic or hard links, only one set of
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2381
"/          variable length data is stored.  Link files will have the
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2382
"/          name of the original file stored.  This name is NOT NULL
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2383
"/          terminated.  Its size can be determined by checking TSize -
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2384
"/          12.  Device entries will have eight bytes stored as two 4
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2385
"/          byte entries (in little endian format).  The first entry
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2386
"/          will be the major device number, and the second the minor
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2387
"/          device number.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2388
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2389
"/         -PATCH Descriptor Extra Field (0x000f):
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2390
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2391
"/          The following is the layout of the Patch Descriptor "extra"
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2392
"/          block.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2393
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2394
"/          Note: all fields stored in Intel low-byte/high-byte order.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2395
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2396
"/          Value     Size     Description
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2397
"/          -----     ----     -----------
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2398
"/  (Patch) 0x000f    2 bytes  Tag for this "extra" block type
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2399
"/          TSize     2 bytes  Size of the total "extra" block
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2400
"/          Version   2 bytes  Version of the descriptor
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2401
"/          Flags     4 bytes  Actions and reactions (see below)
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2402
"/          OldSize   4 bytes  Size of the file about to be patched
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2403
"/          OldCRC    4 bytes  32-bit CRC of the file to be patched
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2404
"/          NewSize   4 bytes  Size of the resulting file
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2405
"/          NewCRC    4 bytes  32-bit CRC of the resulting file
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2406
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2407
"/          Actions and reactions
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2408
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2409
"/          Bits          Description
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2410
"/          ----          ----------------
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2411
"/          0             Use for auto detection
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2412
"/          1             Treat as a self-patch
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2413
"/          2-3           RESERVED
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2414
"/          4-5           Action (see below)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2415
"/          6-7           RESERVED
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2416
"/          8-9           Reaction (see below) to absent file
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2417
"/          10-11         Reaction (see below) to newer file
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2418
"/          12-13         Reaction (see below) to unknown file
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2419
"/          14-15         RESERVED
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2420
"/          16-31         RESERVED
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2421
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2422
"/          Actions
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2423
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2424
"/          Action       Value
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2425
"/          ------       -----
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2426
"/          none         0
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2427
"/          add          1
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2428
"/          delete       2
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2429
"/          patch        3
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2430
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2431
"/          Reactions
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2432
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2433
"/          Reaction     Value
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2434
"/          --------     -----
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2435
"/          ask          0
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2436
"/          skip         1
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2437
"/          ignore       2
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2438
"/          fail         3
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2439
"/
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2440
"/          Patch support is provided by PKPatchMaker(tm) technology and is
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2441
"/          covered under U.S. Patents and Patents Pending. The use or
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2442
"/          implementation in a product of certain technological aspects set
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2443
"/          forth in the current APPNOTE, including those with regard to
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2444
"/          strong encryption, patching, or extended tape operations requires
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2445
"/          a license from PKWARE.  Please contact PKWARE with regard to
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2446
"/          acquiring a license.
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2447
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2448
"/         -PKCS#7 Store for X.509 Certificates (0x0014):
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2449
"/
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2450
"/          This field contains information about each of the certificates
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2451
"/          files may be signed with. When the Central Directory Encryption
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2452
"/          feature is enabled for a ZIP file, this record will appear in
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2453
"/          the Archive Extra Data Record, otherwise it will appear in the
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2454
"/          first central directory record and will be ignored in any
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2455
"/          other record.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2456
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2457
"/          Note: all fields stored in Intel low-byte/high-byte order.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2458
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2459
"/          Value     Size     Description
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2460
"/          -----     ----     -----------
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2461
"/  (Store) 0x0014    2 bytes  Tag for this "extra" block type
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2462
"/          TSize     2 bytes  Size of the store data
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2463
"/          TData     TSize    Data about the store
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2464
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2465
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2466
"/         -X.509 Certificate ID and Signature for individual file (0x0015):
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2467
"/
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2468
"/          This field contains the information about which certificate in
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2469
"/          the PKCS#7 store was used to sign a particular file. It also
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2470
"/          contains the signature data. This field can appear multiple
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2471
"/          times, but can only appear once per certificate.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2472
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2473
"/          Note: all fields stored in Intel low-byte/high-byte order.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2474
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2475
"/          Value     Size     Description
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2476
"/          -----     ----     -----------
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2477
"/  (CID)   0x0015    2 bytes  Tag for this "extra" block type
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2478
"/          TSize     2 bytes  Size of data that follows
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2479
"/          TData     TSize    Signature Data
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2480
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2481
"/         -X.509 Certificate ID and Signature for central directory (0x0016):
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2482
"/
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2483
"/          This field contains the information about which certificate in
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2484
"/          the PKCS#7 store was used to sign the central directory structure.
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2485
"/          When the Central Directory Encryption feature is enabled for a
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2486
"/          ZIP file, this record will appear in the Archive Extra Data Record,
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2487
"/          otherwise it will appear in the first central directory record.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2488
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2489
"/          Note: all fields stored in Intel low-byte/high-byte order.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2490
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2491
"/          Value     Size     Description
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2492
"/          -----     ----     -----------
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2493
"/  (CDID)  0x0016    2 bytes  Tag for this "extra" block type
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2494
"/          TSize     2 bytes  Size of data that follows
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2495
"/          TData     TSize    Data
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2496
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2497
"/         -Strong Encryption Header (0x0017):
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2498
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2499
"/          Value     Size     Description
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2500
"/          -----     ----     -----------
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2501
"/          0x0017    2 bytes  Tag for this "extra" block type
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2502
"/          TSize     2 bytes  Size of data that follows
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2503
"/          Format    2 bytes  Format definition for this record
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2504
"/          AlgID     2 bytes  Encryption algorithm identifier
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2505
"/          Bitlen    2 bytes  Bit length of encryption key
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2506
"/          Flags     2 bytes  Processing flags
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2507
"/          CertData  TSize-8  Certificate decryption extra field data
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2508
"/                             (refer to the explanation for CertData
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2509
"/                              in the section describing the
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2510
"/                              Certificate Processing Method under
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2511
"/                              the Strong Encryption Specification)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2512
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2513
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2514
"/         -Record Management Controls (0x0018):
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2515
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2516
"/          Value     Size     Description
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2517
"/          -----     ----     -----------
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2518
"/(Rec-CTL) 0x0018    2 bytes  Tag for this "extra" block type
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2519
"/          CSize     2 bytes  Size of total extra block data
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2520
"/          Tag1      2 bytes  Record control attribute 1
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2521
"/          Size1     2 bytes  Size of attribute 1, in bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2522
"/          Data1     Size1    Attribute 1 data
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2523
"/            .
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2524
"/            .
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2525
"/            .
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2526
"/          TagN      2 bytes  Record control attribute N
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2527
"/          SizeN     2 bytes  Size of attribute N, in bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2528
"/          DataN     SizeN    Attribute N data
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2529
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2530
"/
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2531
"/         -PKCS#7 Encryption Recipient Certificate List (0x0019):
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2532
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2533
"/          This field contains information about each of the certificates
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2534
"/          used in encryption processing and it can be used to identify who is
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2535
"/          allowed to decrypt encrypted files.  This field should only appear
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2536
"/          in the archive extra data record. This field is not required and
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2537
"/          serves only to aide archive modifications by preserving public
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2538
"/          encryption key data. Individual security requirements may dictate
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2539
"/          that this data be omitted to deter information exposure.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2540
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2541
"/          Note: all fields stored in Intel low-byte/high-byte order.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2542
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2543
"/          Value     Size     Description
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2544
"/          -----     ----     -----------
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2545
"/ (CStore) 0x0019    2 bytes  Tag for this "extra" block type
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2546
"/          TSize     2 bytes  Size of the store data
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2547
"/          TData     TSize    Data about the store
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2548
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2549
"/          TData:
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2550
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2551
"/          Value     Size     Description
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2552
"/          -----     ----     -----------
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2553
"/          Version   2 bytes  Format version number - must 0x0001 at this time
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2554
"/          CStore    (var)    PKCS#7 data blob
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2555
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2556
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2557
"/         -MVS Extra Field (0x0065):
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2558
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2559
"/          The following is the layout of the MVS "extra" block.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2560
"/          Note: Some fields are stored in Big Endian format.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2561
"/          All text is in EBCDIC format unless otherwise specified.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2562
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2563
"/          Value       Size          Description
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2564
"/          -----       ----          -----------
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2565
"/  (MVS)   0x0065      2 bytes       Tag for this "extra" block type
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2566
"/          TSize       2 bytes       Size for the following data block
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2567
"/          ID          4 bytes       EBCDIC "Z390" 0xE9F3F9F0 or
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2568
"/                                    "T4MV" for TargetFour
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2569
"/          (var)       TSize-4       Attribute data (see APPENDIX B)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2570
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2571
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2572
"/         -OS/400 Extra Field (0x0065):
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2573
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2574
"/          The following is the layout of the OS/400 "extra" block.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2575
"/          Note: Some fields are stored in Big Endian format.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2576
"/          All text is in EBCDIC format unless otherwise specified.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2577
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2578
"/          Value       Size          Description
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2579
"/          -----       ----          -----------
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2580
"/  (OS400) 0x0065      2 bytes       Tag for this "extra" block type
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2581
"/          TSize       2 bytes       Size for the following data block
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2582
"/          ID          4 bytes       EBCDIC "I400" 0xC9F4F0F0 or
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2583
"/                                    "T4MV" for TargetFour
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2584
"/          (var)       TSize-4       Attribute data (see APPENDIX A)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2585
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2586
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2587
"/          Third-party Mappings:
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2588
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2589
"/         -ZipIt Macintosh Extra Field (long) (0x2605):
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2590
"/
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2591
"/          The following is the layout of the ZipIt extra block
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2592
"/          for Macintosh. The local-header and central-header versions
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2593
"/          are identical. This block must be present if the file is
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2594
"/          stored MacBinary-encoded and it should not be used if the file
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2595
"/          is not stored MacBinary-encoded.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2596
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2597
"/          Value         Size        Description
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2598
"/          -----         ----        -----------
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2599
"/  (Mac2)  0x2605        Short       tag for this extra block type
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2600
"/          TSize         Short       total data size for this block
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2601
"/          "ZPIT"        beLong      extra-field signature
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2602
"/          FnLen         Byte        length of FileName
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2603
"/          FileName      variable    full Macintosh filename
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2604
"/          FileType      Byte[4]     four-byte Mac file type string
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2605
"/          Creator       Byte[4]     four-byte Mac creator string
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2606
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2607
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2608
"/         -ZipIt Macintosh Extra Field (short, for files) (0x2705):
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2609
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2610
"/          The following is the layout of a shortened variant of the
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2611
"/          ZipIt extra block for Macintosh (without "full name" entry).
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2612
"/          This variant is used by ZipIt 1.3.5 and newer for entries of
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2613
"/          files (not directories) that do not have a MacBinary encoded
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2614
"/          file. The local-header and central-header versions are identical.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2615
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2616
"/          Value         Size        Description
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2617
"/          -----         ----        -----------
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2618
"/  (Mac2b) 0x2705        Short       tag for this extra block type
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2619
"/          TSize         Short       total data size for this block (12)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2620
"/          "ZPIT"        beLong      extra-field signature
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2621
"/          FileType      Byte[4]     four-byte Mac file type string
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2622
"/          Creator       Byte[4]     four-byte Mac creator string
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2623
"/          fdFlags       beShort     attributes from FInfo.frFlags,
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2624
"/                                    may be omitted
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2625
"/          0x0000        beShort     reserved, may be omitted
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2626
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2627
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2628
"/         -ZipIt Macintosh Extra Field (short, for directories) (0x2805):
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2629
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2630
"/          The following is the layout of a shortened variant of the
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2631
"/          ZipIt extra block for Macintosh used only for directory
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2632
"/          entries. This variant is used by ZipIt 1.3.5 and newer to
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2633
"/          save some optional Mac-specific information about directories.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2634
"/          The local-header and central-header versions are identical.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2635
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2636
"/          Value         Size        Description
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2637
"/          -----         ----        -----------
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2638
"/  (Mac2c) 0x2805        Short       tag for this extra block type
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2639
"/          TSize         Short       total data size for this block (12)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2640
"/          "ZPIT"        beLong      extra-field signature
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2641
"/          frFlags       beShort     attributes from DInfo.frFlags, may
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2642
"/                                    be omitted
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2643
"/          View          beShort     ZipIt view flag, may be omitted
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2644
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2645
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2646
"/          The View field specifies ZipIt-internal settings as follows:
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2647
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2648
"/          Bits of the Flags:
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2649
"/              bit 0           if set, the folder is shown expanded (open)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2650
"/                              when the archive contents are viewed in ZipIt.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2651
"/              bits 1-15       reserved, zero;
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2652
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2653
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2654
"/         -FWKCS MD5 Extra Field (0x4b46):
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2655
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2656
"/          The FWKCS Contents_Signature System, used in
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2657
"/          automatically identifying files independent of file name,
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2658
"/          optionally adds and uses an extra field to support the
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2659
"/          rapid creation of an enhanced contents_signature:
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2660
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2661
"/              Header ID = 0x4b46
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2662
"/              Data Size = 0x0013
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2663
"/              Preface   = 'M','D','5'
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2664
"/              followed by 16 bytes containing the uncompressed file's
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2665
"/              128_bit MD5 hash(1), low byte first.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2666
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2667
"/          When FWKCS revises a .ZIP file central directory to add
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2668
"/          this extra field for a file, it also replaces the
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2669
"/          central directory entry for that file's uncompressed
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2670
"/          file length with a measured value.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2671
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2672
"/          FWKCS provides an option to strip this extra field, if
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2673
"/          present, from a .ZIP file central directory. In adding
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2674
"/          this extra field, FWKCS preserves .ZIP file Authenticity
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2675
"/          Verification; if stripping this extra field, FWKCS
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2676
"/          preserves all versions of AV through PKZIP version 2.04g.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2677
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2678
"/          FWKCS, and FWKCS Contents_Signature System, are
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2679
"/          trademarks of Frederick W. Kantor.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2680
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2681
"/          (1) R. Rivest, RFC1321.TXT, MIT Laboratory for Computer
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2682
"/              Science and RSA Data Security, Inc., April 1992.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2683
"/              ll.76-77: "The MD5 algorithm is being placed in the
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2684
"/              public domain for review and possible adoption as a
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2685
"/              standard."
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2686
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2687
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2688
"/         -Info-ZIP Unicode Comment Extra Field (0x6375):
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2689
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2690
"/          Stores the UTF-8 version of the file comment as stored in the
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2691
"/          central directory header. (Last Revision 20070912)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2692
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2693
"/          Value         Size        Description
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2694
"/          -----         ----        -----------
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2695
"/   (UCom) 0x6375        Short       tag for this extra block type ("uc")
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2696
"/          TSize         Short       total data size for this block
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2697
"/          Version       1 byte      version of this extra field, currently 1
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2698
"/          ComCRC32      4 bytes     Comment Field CRC32 Checksum
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2699
"/          UnicodeCom    Variable    UTF-8 version of the entry comment
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2700
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2701
"/          Currently Version is set to the number 1.  If there is a need
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2702
"/          to change this field, the version will be incremented.  Changes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2703
"/          may not be backward compatible so this extra field should not be
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2704
"/          used if the version is not recognized.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2705
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2706
"/          The ComCRC32 is the standard zip CRC32 checksum of the File Comment
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2707
"/          field in the central directory header.  This is used to verify that
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2708
"/          the comment field has not changed since the Unicode Comment extra field
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2709
"/          was created.  This can happen if a utility changes the File Comment
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2710
"/          field but does not update the UTF-8 Comment extra field.  If the CRC
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2711
"/          check fails, this Unicode Comment extra field should be ignored and
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2712
"/          the File Comment field in the header should be used instead.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2713
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2714
"/          The UnicodeCom field is the UTF-8 version of the File Comment field
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2715
"/          in the header.  As UnicodeCom is defined to be UTF-8, no UTF-8 byte
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2716
"/          order mark (BOM) is used.  The length of this field is determined by
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2717
"/          subtracting the size of the previous fields from TSize.  If both the
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2718
"/          File Name and Comment fields are UTF-8, the new General Purpose Bit
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2719
"/          Flag, bit 11 (Language encoding flag (EFS)), can be used to indicate
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2720
"/          both the header File Name and Comment fields are UTF-8 and, in this
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2721
"/          case, the Unicode Path and Unicode Comment extra fields are not
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2722
"/          needed and should not be created.  Note that, for backward
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2723
"/          compatibility, bit 11 should only be used if the native character set
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2724
"/          of the paths and comments being zipped up are already in UTF-8. It is
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2725
"/          expected that the same file comment storage method, either general
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2726
"/          purpose bit 11 or extra fields, be used in both the Local and Central
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2727
"/          Directory Header for a file.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2728
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2729
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2730
"/         -Info-ZIP Unicode Path Extra Field (0x7075):
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2731
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2732
"/          Stores the UTF-8 version of the file name field as stored in the
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2733
"/          local header and central directory header. (Last Revision 20070912)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2734
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2735
"/          Value         Size        Description
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2736
"/          -----         ----        -----------
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2737
"/  (UPath) 0x7075        Short       tag for this extra block type ("up")
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2738
"/          TSize         Short       total data size for this block
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2739
"/          Version       1 byte      version of this extra field, currently 1
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2740
"/          NameCRC32     4 bytes     File Name Field CRC32 Checksum
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2741
"/          UnicodeName   Variable    UTF-8 version of the entry File Name
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2742
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2743
"/          Currently Version is set to the number 1.  If there is a need
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2744
"/          to change this field, the version will be incremented.  Changes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2745
"/          may not be backward compatible so this extra field should not be
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2746
"/          used if the version is not recognized.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2747
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2748
"/          The NameCRC32 is the standard zip CRC32 checksum of the File Name
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2749
"/          field in the header.  This is used to verify that the header
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2750
"/          File Name field has not changed since the Unicode Path extra field
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2751
"/          was created.  This can happen if a utility renames the File Name but
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2752
"/          does not update the UTF-8 path extra field.  If the CRC check fails,
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2753
"/          this UTF-8 Path Extra Field should be ignored and the File Name field
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2754
"/          in the header should be used instead.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2755
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2756
"/          The UnicodeName is the UTF-8 version of the contents of the File Name
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2757
"/          field in the header.  As UnicodeName is defined to be UTF-8, no UTF-8
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2758
"/          byte order mark (BOM) is used.  The length of this field is determined
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2759
"/          by subtracting the size of the previous fields from TSize.  If both
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2760
"/          the File Name and Comment fields are UTF-8, the new General Purpose
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2761
"/          Bit Flag, bit 11 (Language encoding flag (EFS)), can be used to
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2762
"/          indicate that both the header File Name and Comment fields are UTF-8
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2763
"/          and, in this case, the Unicode Path and Unicode Comment extra fields
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2764
"/          are not needed and should not be created.  Note that, for backward
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2765
"/          compatibility, bit 11 should only be used if the native character set
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2766
"/          of the paths and comments being zipped up are already in UTF-8. It is
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2767
"/          expected that the same file name storage method, either general
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2768
"/          purpose bit 11 or extra fields, be used in both the Local and Central
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2769
"/          Directory Header for a file.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2770
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2771
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2772
"/        -Microsoft Open Packaging Growth Hint (0xa220):
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2773
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2774
"/          Value         Size        Description
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2775
"/          -----         ----        -----------
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2776
"/          0xa220        Short       tag for this extra block type
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2777
"/          TSize         Short       size of Sig + PadVal + Padding
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2778
"/          Sig           Short       verification signature (A028)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2779
"/          PadVal        Short       Initial padding value
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2780
"/          Padding       variable    filled with NULL characters
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2781
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2782
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2783
"/      file comment: (Variable)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2784
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2785
"/          The comment for this file.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2786
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2787
"/      number of this disk: (2 bytes)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2788
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2789
"/          The number of this disk, which contains central
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2790
"/          directory end record. If an archive is in ZIP64 format
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2791
"/          and the value in this field is 0xFFFF, the size will
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2792
"/          be in the corresponding 4 byte zip64 end of central
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2793
"/          directory field.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2794
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2795
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2796
"/      number of the disk with the start of the central
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2797
"/      directory: (2 bytes)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2798
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2799
"/          The number of the disk on which the central
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2800
"/          directory starts. If an archive is in ZIP64 format
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2801
"/          and the value in this field is 0xFFFF, the size will
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2802
"/          be in the corresponding 4 byte zip64 end of central
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2803
"/          directory field.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2804
"/
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2805
"/      total number of entries in the central dir on
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2806
"/      this disk: (2 bytes)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2807
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2808
"/          The number of central directory entries on this disk.
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2809
"/          If an archive is in ZIP64 format and the value in
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2810
"/          this field is 0xFFFF, the size will be in the
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2811
"/          corresponding 8 byte zip64 end of central
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2812
"/          directory field.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2813
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2814
"/      total number of entries in the central dir: (2 bytes)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2815
"/
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2816
"/          The total number of files in the .ZIP file. If an
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2817
"/          archive is in ZIP64 format and the value in this field
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2818
"/          is 0xFFFF, the size will be in the corresponding 8 byte
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2819
"/          zip64 end of central directory field.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2820
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2821
"/      size of the central directory: (4 bytes)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2822
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2823
"/          The size (in bytes) of the entire central directory.
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2824
"/          If an archive is in ZIP64 format and the value in
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2825
"/          this field is 0xFFFFFFFF, the size will be in the
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2826
"/          corresponding 8 byte zip64 end of central
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2827
"/          directory field.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2828
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2829
"/      offset of start of central directory with respect to
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2830
"/      the starting disk number:  (4 bytes)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2831
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2832
"/          Offset of the start of the central directory on the
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2833
"/          disk on which the central directory starts. If an
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2834
"/          archive is in ZIP64 format and the value in this
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2835
"/          field is 0xFFFFFFFF, the size will be in the
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2836
"/          corresponding 8 byte zip64 end of central
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2837
"/          directory field.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2838
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2839
"/      .ZIP file comment length: (2 bytes)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2840
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2841
"/          The length of the comment for this .ZIP file.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2842
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2843
"/      .ZIP file comment: (Variable)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2844
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2845
"/          The comment for this .ZIP file.  ZIP file comment data
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2846
"/          is stored unsecured.  No encryption or data authentication
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2847
"/          is applied to this area at this time.  Confidential information
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2848
"/          should not be stored in this section.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2849
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2850
"/      zip64 extensible data sector    (variable size)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2851
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2852
"/          (currently reserved for use by PKWARE)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2853
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2854
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2855
"/  K.  Splitting and Spanning ZIP files
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2856
"/
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2857
"/          Spanning is the process of segmenting a ZIP file across
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2858
"/          multiple removable media. This support has typically only
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2859
"/          been provided for DOS formatted floppy diskettes.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2860
"/
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2861
"/          File splitting is a newer derivative of spanning.
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2862
"/          Splitting follows the same segmentation process as
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2863
"/          spanning, however, it does not require writing each
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2864
"/          segment to a unique removable medium and instead supports
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2865
"/          placing all pieces onto local or non-removable locations
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2866
"/          such as file systems, local drives, folders, etc...
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2867
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2868
"/          A key difference between spanned and split ZIP files is
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2869
"/          that all pieces of a spanned ZIP file have the same name.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2870
"/          Since each piece is written to a separate volume, no name
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2871
"/          collisions occur and each segment can reuse the original
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2872
"/          .ZIP file name given to the archive.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2873
"/
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2874
"/          Sequence ordering for DOS spanned archives uses the DOS
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2875
"/          volume label to determine segment numbers.  Volume labels
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2876
"/          for each segment are written using the form PKBACK#xxx,
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2877
"/          where xxx is the segment number written as a decimal
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2878
"/          value from 001 - nnn.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2879
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2880
"/          Split ZIP files are typically written to the same location
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2881
"/          and are subject to name collisions if the spanned name
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2882
"/          format is used since each segment will reside on the same
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2883
"/          drive. To avoid name collisions, split archives are named
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2884
"/          as follows.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2885
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2886
"/          Segment 1   = filename.z01
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2887
"/          Segment n-1 = filename.z(n-1)
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2888
"/          Segment n   = filename.zip
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2889
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2890
"/          The .ZIP extension is used on the last segment to support
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2891
"/          quickly reading the central directory.  The segment number
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2892
"/          n should be a decimal value.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2893
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2894
"/          Spanned ZIP files may be PKSFX Self-extracting ZIP files.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2895
"/          PKSFX files may also be split, however, in this case
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2896
"/          the first segment must be named filename.exe.  The first
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2897
"/          segment of a split PKSFX archive must be large enough to
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2898
"/          include the entire executable program.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2899
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2900
"/          Capacities for split archives are as follows.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2901
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2902
"/          Maximum number of segments = 4,294,967,295 - 1
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2903
"/          Maximum .ZIP segment size = 4,294,967,295 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2904
"/          Minimum segment size = 64K
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2905
"/          Maximum PKSFX segment size = 2,147,483,647 bytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2906
"/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2907
"/          Segment sizes may be
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2908
! !
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2909
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2910
!ZipArchive class methodsFor:'instance creation'!
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2911
2490
cdc1bcf9cb50 changed:
sr
parents: 2420
diff changeset
  2912
appendFileNamed:name
cdc1bcf9cb50 changed:
sr
parents: 2420
diff changeset
  2913
    ^ self new name:name mode:#append
cdc1bcf9cb50 changed:
sr
parents: 2420
diff changeset
  2914
cdc1bcf9cb50 changed:
sr
parents: 2420
diff changeset
  2915
    "Created: / 31-08-2010 / 11:53:01 / sr"
cdc1bcf9cb50 changed:
sr
parents: 2420
diff changeset
  2916
!
cdc1bcf9cb50 changed:
sr
parents: 2420
diff changeset
  2917
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2918
newFileNamed:name
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2919
    ^ self new name:name mode:#write
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2920
!
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2921
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2922
oldFileNamed:name
2491
256c6ff1616a changed:5 methods
Stefan Vogel <sv@exept.de>
parents: 2490
diff changeset
  2923
    ^ self new name:name mode:#read.
1994
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  2924
!
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  2925
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  2926
oldFileNamed:name startOfArchive: startOfArchive endOfArchive: endOfArchive
2491
256c6ff1616a changed:5 methods
Stefan Vogel <sv@exept.de>
parents: 2490
diff changeset
  2927
    ^ self new
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2928
	setArchiveStartPosition:startOfArchive endPosition:endOfArchive;
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2929
	name:name mode:#read;
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2930
	yourself.
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  2931
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  2932
    "Modified: / 17-02-2017 / 22:15:25 / stefan"
2180
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  2933
!
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  2934
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  2935
readingFrom:aPositionableStream
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  2936
    "open an existing Zip archive - read data from aPositionableStream"
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  2937
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2938
    ^ self new readingFrom:aPositionableStream.
2180
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  2939
!
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  2940
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  2941
writingTo:aPositionableStream
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  2942
    "open an new Zip archive - write data to aPositionableStream"
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  2943
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2944
    ^ self new writingTo:aPositionableStream.
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2945
! !
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2946
1985
805f1bfff8b9 accessing signals
ca
parents: 1984
diff changeset
  2947
!ZipArchive class methodsFor:'Signal constants'!
805f1bfff8b9 accessing signals
ca
parents: 1984
diff changeset
  2948
2088
d7197949c371 fixed writing of files with spaces in the name;
sr
parents: 2015
diff changeset
  2949
unsupportedZipFileFormatErrorSignal
d7197949c371 fixed writing of files with spaces in the name;
sr
parents: 2015
diff changeset
  2950
    ^ UnsupportedZipFileFormatErrorSignal
d7197949c371 fixed writing of files with spaces in the name;
sr
parents: 2015
diff changeset
  2951
!
d7197949c371 fixed writing of files with spaces in the name;
sr
parents: 2015
diff changeset
  2952
1985
805f1bfff8b9 accessing signals
ca
parents: 1984
diff changeset
  2953
zipFileFormatErrorSignal
805f1bfff8b9 accessing signals
ca
parents: 1984
diff changeset
  2954
    ^ ZipFileFormatErrorSignal
805f1bfff8b9 accessing signals
ca
parents: 1984
diff changeset
  2955
! !
805f1bfff8b9 accessing signals
ca
parents: 1984
diff changeset
  2956
2856
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  2957
!ZipArchive class methodsFor:'accessing-default'!
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  2958
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  2959
defaultAppendTrailingSlash
4372
071c7186de7b #DOCUMENTATION by mawalch
mawalch
parents: 4335
diff changeset
  2960
    "Returns the default trailing slash behavior. For details
071c7186de7b #DOCUMENTATION by mawalch
mawalch
parents: 4335
diff changeset
  2961
     see the class documentation"
071c7186de7b #DOCUMENTATION by mawalch
mawalch
parents: 4335
diff changeset
  2962
071c7186de7b #DOCUMENTATION by mawalch
mawalch
parents: 4335
diff changeset
  2963
    ^ DefaultAppendTrailingSlash
2856
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  2964
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  2965
    "Created: / 19-11-2012 / 11:53:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
4372
071c7186de7b #DOCUMENTATION by mawalch
mawalch
parents: 4335
diff changeset
  2966
    "Modified (comment): / 30-05-2017 / 17:16:27 / mawalch"
2856
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  2967
!
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  2968
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  2969
defaultAppendTrailingSlash: aBoolean
4372
071c7186de7b #DOCUMENTATION by mawalch
mawalch
parents: 4335
diff changeset
  2970
    "Sets the default trailing slash behavior. For details
071c7186de7b #DOCUMENTATION by mawalch
mawalch
parents: 4335
diff changeset
  2971
     see the class documentation"
071c7186de7b #DOCUMENTATION by mawalch
mawalch
parents: 4335
diff changeset
  2972
2856
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  2973
    DefaultAppendTrailingSlash := aBoolean
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  2974
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  2975
    "Created: / 19-11-2012 / 11:53:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
4372
071c7186de7b #DOCUMENTATION by mawalch
mawalch
parents: 4335
diff changeset
  2976
    "Modified (format): / 30-05-2017 / 17:16:40 / mawalch"
4200
089df8914384 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4178
diff changeset
  2977
!
089df8914384 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4178
diff changeset
  2978
089df8914384 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4178
diff changeset
  2979
zipFileCachingTime:seconds
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2980
    "by default, zip files are cached for some time,
4200
089df8914384 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4178
diff changeset
  2981
     in case they are reconsulted soon.
4680
2675216b9dd7 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4677
diff changeset
  2982
     The default time is 60s, but can be changed by this setter"
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2983
4200
089df8914384 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4178
diff changeset
  2984
    ZipFileCachingTime := seconds
4680
2675216b9dd7 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4677
diff changeset
  2985
2675216b9dd7 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4677
diff changeset
  2986
    "Modified (comment): / 14-06-2018 / 08:33:50 / Claus Gittinger"
2856
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  2987
! !
2855
568bf375326c Addec trailing slash behavior (enabled by default)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2832
diff changeset
  2988
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2989
!ZipArchive class methodsFor:'class initialization'!
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2990
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2991
initialize
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  2992
    ZipFileFormatErrorSignal isNil ifTrue:[
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2993
	ZipFileFormatErrorSignal := OpenError newSignalMayProceed:true.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2994
	ZipFileFormatErrorSignal nameClass:self message:#zipFileFormatErrorSignal.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2995
	ZipFileFormatErrorSignal notifierString:'unrecognized/bad zip file format'.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2996
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2997
	UnsupportedZipFileFormatErrorSignal := ZipFileFormatErrorSignal newSignal.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2998
	UnsupportedZipFileFormatErrorSignal nameClass:self message:#unsupportedZipFileFormatErrorSignal.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  2999
	UnsupportedZipFileFormatErrorSignal notifierString:'unsupported zip file format'.
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3000
    ].
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3001
2855
568bf375326c Addec trailing slash behavior (enabled by default)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2832
diff changeset
  3002
    DefaultAppendTrailingSlash := true.
568bf375326c Addec trailing slash behavior (enabled by default)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2832
diff changeset
  3003
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3004
    "
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3005
     self initialize
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3006
    "
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3007
2511
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  3008
    "Modified: / 19-11-2010 / 15:44:28 / cg"
2855
568bf375326c Addec trailing slash behavior (enabled by default)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2832
diff changeset
  3009
    "Modified: / 19-11-2012 / 11:53:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3010
! !
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3011
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3012
!ZipArchive class methodsFor:'cleanup'!
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3013
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3014
flush
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3015
    "forget about cached zipArchives"
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3016
3086
a6a426ef9950 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 3080
diff changeset
  3017
    FlushBlock notNil ifTrue:[
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3018
	Processor removeTimedBlock:FlushBlock.
3086
a6a426ef9950 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 3080
diff changeset
  3019
    ].
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3020
    RecentlyUsedZipArchives := nil. FlushBlock := nil.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3021
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3022
    "
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3023
     self flush
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3024
    "
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3025
!
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3026
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3027
installFlushBlock
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3028
    "forget about cached zipArchives"
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3029
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3030
    FlushBlock isNil ifTrue:[
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3031
	FlushBlock := [RecentlyUsedZipArchives := nil. FlushBlock := nil].
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3032
    ].
4200
089df8914384 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4178
diff changeset
  3033
    Processor addTimedBlock:FlushBlock for:Processor timeoutHandlerProcess afterSeconds:(ZipFileCachingTime ? 60).
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3034
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3035
    "
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3036
     self installFlushBlock
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3037
    "
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3038
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3039
    "Created: / 9.4.1998 / 13:17:07 / cg"
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3040
    "Modified: / 19.10.1998 / 21:02:22 / cg"
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3041
!
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3042
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3043
lowSpaceCleanup
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3044
    "forget about cached zipArchives"
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3045
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3046
    RecentlyUsedZipArchives := nil
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3047
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3048
    "
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3049
     self lowSpaceCleanup
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3050
    "
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3051
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3052
    "Modified: / 7.4.1998 / 17:58:57 / cg"
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3053
! !
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3054
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3055
!ZipArchive class methodsFor:'constants'!
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3056
2511
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  3057
COMPRESSION_DEFLATED
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  3058
    <resource: #obsolete>
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  3059
2313
28eedaae36f5 squeak compatibility
Claus Gittinger <cg@exept.de>
parents: 2180
diff changeset
  3060
    "please use compressionDeflated instead (Squeak compat.)"
28eedaae36f5 squeak compatibility
Claus Gittinger <cg@exept.de>
parents: 2180
diff changeset
  3061
2511
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  3062
    self obsoleteMethodWarning.
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  3063
    ^ COMPRESSION_DEFLATED
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  3064
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  3065
    "Created: / 19-11-2010 / 15:40:38 / cg"
2313
28eedaae36f5 squeak compatibility
Claus Gittinger <cg@exept.de>
parents: 2180
diff changeset
  3066
!
28eedaae36f5 squeak compatibility
Claus Gittinger <cg@exept.de>
parents: 2180
diff changeset
  3067
2511
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  3068
COMPR_DEFLATED
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  3069
    <resource: #obsolete>
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  3070
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  3071
    "please use compressionDeflated instead (Squeak compat.)"
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  3072
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  3073
    self obsoleteMethodWarning.
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  3074
    ^ COMPRESSION_DEFLATED
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  3075
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  3076
    "Modified: / 19-11-2010 / 15:58:28 / cg"
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  3077
!
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  3078
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3079
LREC_SIZE
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3080
    ^ LREC_SIZE
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3081
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3082
    "Created: / 29.3.1998 / 19:11:20 / cg"
1994
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  3083
!
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  3084
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  3085
centralDirectoryMinimumSize
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  3086
    ^ 46
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  3087
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  3088
    "Created: / 29.3.1998 / 19:11:20 / cg"
1995
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  3089
!
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  3090
2313
28eedaae36f5 squeak compatibility
Claus Gittinger <cg@exept.de>
parents: 2180
diff changeset
  3091
compressionDeflated
2511
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  3092
    "same as COMPRESSION_DEFLATED - squeak compatibility"
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  3093
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  3094
    ^ COMPRESSION_DEFLATED
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  3095
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  3096
    "Modified: / 19-11-2010 / 15:58:39 / cg"
2313
28eedaae36f5 squeak compatibility
Claus Gittinger <cg@exept.de>
parents: 2180
diff changeset
  3097
!
28eedaae36f5 squeak compatibility
Claus Gittinger <cg@exept.de>
parents: 2180
diff changeset
  3098
28eedaae36f5 squeak compatibility
Claus Gittinger <cg@exept.de>
parents: 2180
diff changeset
  3099
compressionStored
2511
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  3100
    "same as COMPRESSION_STORED - squeak compatibility"
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  3101
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  3102
    ^ COMPRESSION_STORED
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  3103
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  3104
    "Modified: / 19-11-2010 / 15:59:00 / cg"
2313
28eedaae36f5 squeak compatibility
Claus Gittinger <cg@exept.de>
parents: 2180
diff changeset
  3105
!
28eedaae36f5 squeak compatibility
Claus Gittinger <cg@exept.de>
parents: 2180
diff changeset
  3106
1995
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  3107
streamBufferSize
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  3108
    ^ 65536     "/ 1024 * 64
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  3109
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  3110
    "Created: / 29.3.1998 / 19:11:20 / cg"
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3111
! !
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3112
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3113
!ZipArchive class methodsFor:'debugging'!
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3114
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3115
debugTrace:aBoolean
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3116
%{
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3117
    if (aBoolean == true) {
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3118
	debugTrace = 1;
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3119
    } else {
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3120
	debugTrace = 0;
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3121
    }
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3122
%}
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3123
! !
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3124
2180
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3125
!ZipArchive class methodsFor:'queries'!
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3126
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3127
isZipArchive:aFilename
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3128
    "answer true, if aFilename references a Zip archive"
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3129
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3130
    |f|
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3131
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3132
    f := aFilename asFilename.
4755
fbe7d2fe05a0 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4680
diff changeset
  3133
    ^ f isRegularFile and:[self new checkZipArchive:f].
2180
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3134
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3135
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3136
    "Created: / 29.3.1998 / 17:46:09 / cg"
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3137
    "Modified: / 20.10.1998 / 00:30:02 / cg"
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3138
! !
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3139
3173
014869903c5c class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3093
diff changeset
  3140
!ZipArchive class methodsFor:'utilities'!
014869903c5c class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3093
diff changeset
  3141
014869903c5c class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3093
diff changeset
  3142
dateToZipFileDate:aDate
014869903c5c class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3093
diff changeset
  3143
    "/ data in msdos format
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3144
    ^ (((aDate day)
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3145
	bitOr: (aDate month bitShift: 5))
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3146
	bitOr: (((aDate year) - 1980) bitShift: 9))
3173
014869903c5c class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3093
diff changeset
  3147
!
014869903c5c class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3093
diff changeset
  3148
014869903c5c class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3093
diff changeset
  3149
timeToZipFileTime:aTime
014869903c5c class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3093
diff changeset
  3150
    "/ time in msdos format
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3151
    ^ (((aTime seconds // 2)
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3152
	bitOr: (aTime minutes bitShift: 5))
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3153
	bitOr: (aTime hours bitShift: 11))
3173
014869903c5c class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3093
diff changeset
  3154
! !
014869903c5c class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3093
diff changeset
  3155
2952
715e556c1e8f class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 2896
diff changeset
  3156
!ZipArchive methodsFor:'Compatibility-Squeak'!
715e556c1e8f class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 2896
diff changeset
  3157
715e556c1e8f class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 2896
diff changeset
  3158
binaryContentsOf: fileName
3529
e074058c7ee5 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 3528
diff changeset
  3159
    ^ self extract: fileName asString:false.
2955
a2f97bc127e1 class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 2952
diff changeset
  3160
!
a2f97bc127e1 class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 2952
diff changeset
  3161
a2f97bc127e1 class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 2952
diff changeset
  3162
desiredCompressionMethod:aCompressionMethod
a2f97bc127e1 class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 2952
diff changeset
  3163
    "for now: ignored"
2952
715e556c1e8f class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 2896
diff changeset
  3164
! !
2677
23f154688173 printing
Claus Gittinger <cg@exept.de>
parents: 2603
diff changeset
  3165
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3166
!ZipArchive methodsFor:'accessing'!
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3167
2856
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  3168
appendTrailingSlash
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  3169
    "Returns default trailing slash behavior, For details,
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  3170
     see class documentation"
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  3171
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  3172
    appendTrailingSlash isNil ifTrue:[
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3173
	appendTrailingSlash := DefaultAppendTrailingSlash
2856
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  3174
    ].
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  3175
    ^appendTrailingSlash
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  3176
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  3177
    "Modified: / 19-11-2012 / 12:04:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  3178
!
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  3179
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  3180
appendTrailingSlash:aBoolean
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  3181
    "Sets trailing slash behavior. If true, all directory entries
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3182
     will have a trailing slash in its nama. For details, see class
2856
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  3183
     documentation"
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  3184
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  3185
    appendTrailingSlash := aBoolean.
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  3186
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  3187
    "Modified (comment): / 19-11-2012 / 12:01:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  3188
!
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  3189
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3190
entries
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3191
    "return a collection of fileName entries"
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3192
2861
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3193
    ^ zipMembersByName keys
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3194
!
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3195
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3196
file
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3197
    <resource: #obsolete>
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3198
    ^ stream
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3199
!
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3200
2009
931dbfe551ab *** empty log message ***
ab
parents: 2007
diff changeset
  3201
fileSize
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3202
    stream notNil ifTrue:[
5435
116c766a2f27 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5367
diff changeset
  3203
        ^ stream collectionSize
2009
931dbfe551ab *** empty log message ***
ab
parents: 2007
diff changeset
  3204
    ].
931dbfe551ab *** empty log message ***
ab
parents: 2007
diff changeset
  3205
    ^ 0
5435
116c766a2f27 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5367
diff changeset
  3206
116c766a2f27 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5367
diff changeset
  3207
    "Modified: / 27-01-2020 / 18:27:47 / Stefan Vogel"
2009
931dbfe551ab *** empty log message ***
ab
parents: 2007
diff changeset
  3208
!
931dbfe551ab *** empty log message ***
ab
parents: 2007
diff changeset
  3209
4615
b34aafb02ddd #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4414
diff changeset
  3210
memberNamed:aFilename
b34aafb02ddd #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4414
diff changeset
  3211
    ^ self findMember:aFilename
b34aafb02ddd #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4414
diff changeset
  3212
!
b34aafb02ddd #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4414
diff changeset
  3213
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3214
members
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3215
    "return a collection of members"
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3216
2861
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3217
    ^ zipMembersByName values.
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3218
!
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3219
2315
0685502fd2f3 added: #membersMatching:
Claus Gittinger <cg@exept.de>
parents: 2314
diff changeset
  3220
membersMatching:aFileMatchPattern
0685502fd2f3 added: #membersMatching:
Claus Gittinger <cg@exept.de>
parents: 2314
diff changeset
  3221
    "return a collection of members which match aFileMatchPattern"
0685502fd2f3 added: #membersMatching:
Claus Gittinger <cg@exept.de>
parents: 2314
diff changeset
  3222
2861
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3223
    ^ self zipMembersByName select:[:m | aFileMatchPattern match:m fileName]
2315
0685502fd2f3 added: #membersMatching:
Claus Gittinger <cg@exept.de>
parents: 2314
diff changeset
  3224
!
0685502fd2f3 added: #membersMatching:
Claus Gittinger <cg@exept.de>
parents: 2314
diff changeset
  3225
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3226
name
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3227
    "return the (file-)name of this zipArchive"
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3228
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3229
    ^ archiveName
1994
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  3230
!
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  3231
2861
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3232
numberOfEntries
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3233
    "return the number of entries in the archive"
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3234
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3235
    ^ zipMembersByName size
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3236
!
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3237
2180
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3238
pathName
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3239
    "FileStream compatibility: answer the name of the underlying file - a String"
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3240
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3241
    ^ archiveName
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3242
!
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3243
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3244
rawStream
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3245
    ^ stream
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3246
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3247
    "Created: / 17-02-2017 / 23:13:54 / stefan"
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3248
!
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3249
1994
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  3250
setArchiveStartPosition: aStartposition endPosition: anEndPosition
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  3251
    startOfArchive := aStartposition.
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  3252
    endOfArchive   := anEndPosition.
2009
931dbfe551ab *** empty log message ***
ab
parents: 2007
diff changeset
  3253
!
931dbfe551ab *** empty log message ***
ab
parents: 2007
diff changeset
  3254
3979
0dc60bd4deac #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 3852
diff changeset
  3255
signatureInformation
0dc60bd4deac #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 3852
diff changeset
  3256
    "for compatibility with SignedZipArchive"
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3257
3979
0dc60bd4deac #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 3852
diff changeset
  3258
    ^ nil
0dc60bd4deac #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 3852
diff changeset
  3259
!
0dc60bd4deac #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 3852
diff changeset
  3260
2009
931dbfe551ab *** empty log message ***
ab
parents: 2007
diff changeset
  3261
size
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3262
    ^ self fileSize
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3263
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3264
    "Modified (format): / 17-02-2017 / 22:30:50 / stefan"
2861
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3265
!
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3266
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3267
zipMembersByName
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3268
    ^ zipMembersByName
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3269
! !
1980
1c868f4b1a7d keep archive now open until closeFile
ab
parents: 1979
diff changeset
  3270
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3271
!ZipArchive methodsFor:'comparing'!
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3272
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3273
= aZipArchiveToCompare
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3274
    "open both archives
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3275
	- check file size
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3276
	- check number of archive members
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3277
	- perform a binary compare of the archives."
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3278
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3279
    |streamBufferSize rdSize buf1 buf2 nextBlockSize stream1 stream2|
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3280
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3281
    self == aZipArchiveToCompare ifTrue:[
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3282
	^ true.
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3283
    ].
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3284
    self class ~~ aZipArchiveToCompare class ifTrue:[
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3285
	^ false.
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3286
    ].
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3287
    (self fileSize ~= aZipArchiveToCompare fileSize) ifTrue:[
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3288
	^ false
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3289
    ].
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3290
    (self numberOfEntries ~= aZipArchiveToCompare numberOfEntries) ifTrue:[
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3291
	^ false
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3292
    ].
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3293
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3294
    "/ perform a binary compare of the archives
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3295
    streamBufferSize := self class streamBufferSize.
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3296
    rdSize           := self fileSize.
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3297
    buf1             := ByteArray new:streamBufferSize.
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3298
    buf2             := ByteArray new:streamBufferSize.
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3299
    stream1          := self rawStream.
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3300
    stream2          := aZipArchiveToCompare rawStream.
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3301
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3302
    stream1 reset.
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3303
    stream2 reset.
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3304
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3305
    [rdSize > 0] whileTrue:[
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3306
	rdSize > streamBufferSize ifTrue: [
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3307
	    nextBlockSize := streamBufferSize.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3308
	] ifFalse: [
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3309
	    nextBlockSize := rdSize.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3310
	    buf1 := ByteArray new:nextBlockSize.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3311
	    buf2 := ByteArray new:nextBlockSize.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3312
	].
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3313
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3314
	stream1 nextBytes:nextBlockSize into:buf1 startingAt:1.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3315
	stream2 nextBytes:nextBlockSize into:buf2 startingAt:1.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3316
	buf1 ~= buf2 ifTrue:[
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3317
	    ^ false.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3318
	].
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3319
	rdSize := rdSize - nextBlockSize.
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3320
    ].
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3321
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3322
    ^ true
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3323
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3324
    "Created: / 17-02-2017 / 23:22:11 / stefan"
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3325
! !
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3326
2860
04b2ef9b1ef8 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2856
diff changeset
  3327
!ZipArchive methodsFor:'error raising'!
04b2ef9b1ef8 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2856
diff changeset
  3328
04b2ef9b1ef8 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2856
diff changeset
  3329
error:anErrorString
04b2ef9b1ef8 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2856
diff changeset
  3330
    "redefined, to raise ZipFileFormatErrorSignal"
04b2ef9b1ef8 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2856
diff changeset
  3331
04b2ef9b1ef8 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2856
diff changeset
  3332
    ZipFileFormatErrorSignal raiseErrorString:anErrorString.
04b2ef9b1ef8 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2856
diff changeset
  3333
! !
04b2ef9b1ef8 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2856
diff changeset
  3334
4013
a191e524042c #OTHER by mawalch
mawalch
parents: 3979
diff changeset
  3335
!ZipArchive methodsFor:'open & close'!
622
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  3336
1981
c01df511bf6d add finalize for close by garbage collector extend interface for
ab
parents: 1980
diff changeset
  3337
close
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3338
    stream notNil ifTrue:[
4633
d3bd3c9cc3d1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4615
diff changeset
  3339
        self flush.
d3bd3c9cc3d1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4615
diff changeset
  3340
        stream close.
d3bd3c9cc3d1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4615
diff changeset
  3341
        archiveName := nil.
d3bd3c9cc3d1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4615
diff changeset
  3342
        stream := centralDirectory := zipMembersByName := nil.
5359
8dab51321a7c #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5263
diff changeset
  3343
        startOfArchive := endOfArchive := nil.
4633
d3bd3c9cc3d1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4615
diff changeset
  3344
        firstEntry := lastEntry := nil.
d3bd3c9cc3d1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4615
diff changeset
  3345
    ].
5359
8dab51321a7c #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5263
diff changeset
  3346
8dab51321a7c #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5263
diff changeset
  3347
    "Modified: / 05-12-2019 / 15:23:23 / Stefan Vogel"
4633
d3bd3c9cc3d1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4615
diff changeset
  3348
!
d3bd3c9cc3d1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4615
diff changeset
  3349
d3bd3c9cc3d1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4615
diff changeset
  3350
closePrepareForReopen
d3bd3c9cc3d1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4615
diff changeset
  3351
    "close the underlying OS resources (stream),
d3bd3c9cc3d1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4615
diff changeset
  3352
     but keep enough information to allow reopening later (i.e. the archive name)"
d3bd3c9cc3d1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4615
diff changeset
  3353
d3bd3c9cc3d1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4615
diff changeset
  3354
    stream notNil ifTrue:[
d3bd3c9cc3d1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4615
diff changeset
  3355
        self flush.
d3bd3c9cc3d1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4615
diff changeset
  3356
        stream close.
d3bd3c9cc3d1 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4615
diff changeset
  3357
        stream := nil.
5359
8dab51321a7c #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5263
diff changeset
  3358
        startOfArchive := endOfArchive := nil.
4175
95c1518f25cf #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4174
diff changeset
  3359
    ].
5359
8dab51321a7c #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5263
diff changeset
  3360
8dab51321a7c #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5263
diff changeset
  3361
    "Modified: / 05-12-2019 / 15:24:07 / Stefan Vogel"
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3362
!
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3363
2895
b0b2598f105c class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2893
diff changeset
  3364
flush
b0b2598f105c class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2893
diff changeset
  3365
    "finish the zip archive, but do not close the underlying stream"
b0b2598f105c class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2893
diff changeset
  3366
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3367
    (stream notNil and:[mode == #write]) ifTrue: [
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3368
	self addCentralZipDirectory
2895
b0b2598f105c class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2893
diff changeset
  3369
    ]
b0b2598f105c class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2893
diff changeset
  3370
!
b0b2598f105c class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2893
diff changeset
  3371
2491
256c6ff1616a changed:5 methods
Stefan Vogel <sv@exept.de>
parents: 2490
diff changeset
  3372
name:name mode:readOrWriteMode
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3373
    "open read or writestream on archiveFileName"
2491
256c6ff1616a changed:5 methods
Stefan Vogel <sv@exept.de>
parents: 2490
diff changeset
  3374
256c6ff1616a changed:5 methods
Stefan Vogel <sv@exept.de>
parents: 2490
diff changeset
  3375
    |filename members maxStartPosition lastMember|
256c6ff1616a changed:5 methods
Stefan Vogel <sv@exept.de>
parents: 2490
diff changeset
  3376
256c6ff1616a changed:5 methods
Stefan Vogel <sv@exept.de>
parents: 2490
diff changeset
  3377
    filename := name asFilename.
2492
128237b8b7b6 changed: #name:mode:
Stefan Vogel <sv@exept.de>
parents: 2491
diff changeset
  3378
    (readOrWriteMode = #read and:[filename exists not]) ifTrue:[
4947
6a569254ef65 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4841
diff changeset
  3379
        ^ OpenError raiseRequestWith:filename errorString:(' - file does not exist: "%1"' bindWith:filename pathName).
2491
256c6ff1616a changed:5 methods
Stefan Vogel <sv@exept.de>
parents: 2490
diff changeset
  3380
    ].
256c6ff1616a changed:5 methods
Stefan Vogel <sv@exept.de>
parents: 2490
diff changeset
  3381
    filename isDirectory ifTrue:[
4947
6a569254ef65 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4841
diff changeset
  3382
        ^ OpenError raiseRequestWith:filename errorString:(' - file is a directory: "%1"' bindWith:filename pathName).
2491
256c6ff1616a changed:5 methods
Stefan Vogel <sv@exept.de>
parents: 2490
diff changeset
  3383
    ].
2490
cdc1bcf9cb50 changed:
sr
parents: 2420
diff changeset
  3384
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3385
    stream notNil ifTrue: [
4947
6a569254ef65 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4841
diff changeset
  3386
        self close.
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3387
    ].
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3388
2491
256c6ff1616a changed:5 methods
Stefan Vogel <sv@exept.de>
parents: 2490
diff changeset
  3389
    archiveName := filename name.
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3390
    mode := readOrWriteMode.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3391
2861
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3392
    self openFile.
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3393
    mode ~~ #write ifTrue:[
4947
6a569254ef65 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4841
diff changeset
  3394
        |mustCloseFile|
6a569254ef65 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4841
diff changeset
  3395
6a569254ef65 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4841
diff changeset
  3396
        mustCloseFile := true.
6a569254ef65 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4841
diff changeset
  3397
        [
6a569254ef65 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4841
diff changeset
  3398
            self readDirectory.
6a569254ef65 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4841
diff changeset
  3399
            mustCloseFile := false.
6a569254ef65 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4841
diff changeset
  3400
6a569254ef65 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4841
diff changeset
  3401
            mode == #append ifTrue:[
6a569254ef65 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4841
diff changeset
  3402
                members := self zipMembersByName values.
6a569254ef65 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4841
diff changeset
  3403
                members isEmptyOrNil ifTrue:[^ self].
6a569254ef65 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4841
diff changeset
  3404
6a569254ef65 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4841
diff changeset
  3405
                maxStartPosition := members maxApplying:[:eachMember | self dataStartOf:eachMember].
6a569254ef65 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4841
diff changeset
  3406
                lastMember := members detect:[:eachMember | eachMember dataStart = maxStartPosition].
6a569254ef65 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4841
diff changeset
  3407
6a569254ef65 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4841
diff changeset
  3408
                stream position:(startOfArchive + lastMember dataStart + lastMember compressedSize).
6a569254ef65 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4841
diff changeset
  3409
                mode := #write.
6a569254ef65 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4841
diff changeset
  3410
            ].
6a569254ef65 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4841
diff changeset
  3411
        ] ensure:[
6a569254ef65 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4841
diff changeset
  3412
            mustCloseFile ifTrue:[self close].
6a569254ef65 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4841
diff changeset
  3413
        ].
2861
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3414
    ] ifFalse:[
4947
6a569254ef65 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4841
diff changeset
  3415
        zipMembersByName := Dictionary new.
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3416
    ].
2490
cdc1bcf9cb50 changed:
sr
parents: 2420
diff changeset
  3417
cdc1bcf9cb50 changed:
sr
parents: 2420
diff changeset
  3418
    "Modified: / 31-08-2010 / 12:39:25 / sr"
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3419
    "Modified: / 17-02-2017 / 22:13:02 / stefan"
4947
6a569254ef65 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4841
diff changeset
  3420
    "Modified: / 21-05-2019 / 20:41:06 / Claus Gittinger"
2180
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3421
!
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3422
4950
4776fa17a3d0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4949
diff changeset
  3423
readFrom:aPositionableStreamOrFilenameString
2491
256c6ff1616a changed:5 methods
Stefan Vogel <sv@exept.de>
parents: 2490
diff changeset
  3424
    <resource: #obsolete>
4950
4776fa17a3d0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4949
diff changeset
  3425
    "initialize the archive to read from aPositionableStream,
4776fa17a3d0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4949
diff changeset
  3426
     or from the file by that name (pharo compatibility)
2491
256c6ff1616a changed:5 methods
Stefan Vogel <sv@exept.de>
parents: 2490
diff changeset
  3427
     Obsolete - backward compatibility."
256c6ff1616a changed:5 methods
Stefan Vogel <sv@exept.de>
parents: 2490
diff changeset
  3428
2861
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3429
    self obsoleteMethodWarning.
4950
4776fa17a3d0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4949
diff changeset
  3430
    aPositionableStreamOrFilenameString isStream ifFalse:[
4776fa17a3d0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4949
diff changeset
  3431
        ^ self readingFrom:(aPositionableStreamOrFilenameString asFilename readStream)
4776fa17a3d0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4949
diff changeset
  3432
    ].    
4776fa17a3d0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4949
diff changeset
  3433
    ^ self readingFrom:aPositionableStreamOrFilenameString
4776fa17a3d0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4949
diff changeset
  3434
4776fa17a3d0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4949
diff changeset
  3435
    "Modified: / 25-05-2019 / 16:42:07 / Claus Gittinger"
2491
256c6ff1616a changed:5 methods
Stefan Vogel <sv@exept.de>
parents: 2490
diff changeset
  3436
!
256c6ff1616a changed:5 methods
Stefan Vogel <sv@exept.de>
parents: 2490
diff changeset
  3437
256c6ff1616a changed:5 methods
Stefan Vogel <sv@exept.de>
parents: 2490
diff changeset
  3438
readingFrom:aPositionableStream
2180
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3439
    "initialize the archive to read from aPositionableStream"
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3440
5435
116c766a2f27 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5367
diff changeset
  3441
    (stream notNil and:[stream ~~ aPositionableStream]) ifTrue:[
116c766a2f27 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5367
diff changeset
  3442
        self close.
2180
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3443
    ].
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3444
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3445
    mode := #read.
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3446
    aPositionableStream binary.
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3447
    stream := aPositionableStream.
5263
350d509151c9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5238
diff changeset
  3448
    startOfArchive := aPositionableStream position.
350d509151c9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5238
diff changeset
  3449
2180
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3450
    aPositionableStream isFileStream ifTrue:[
4947
6a569254ef65 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4841
diff changeset
  3451
        archiveName := aPositionableStream pathName.
6a569254ef65 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4841
diff changeset
  3452
        aPositionableStream isDirectory ifTrue:[
6a569254ef65 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4841
diff changeset
  3453
            OpenError raiseWith:self errorString:(' - is a directory: "%1"' bindWith:archiveName).
6a569254ef65 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4841
diff changeset
  3454
        ].
4949
7ff1f5f60f2e #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4947
diff changeset
  3455
        aPositionableStream fileSize == 0 ifTrue:[
7ff1f5f60f2e #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4947
diff changeset
  3456
            OpenError raiseWith:self errorString:(' - empty file: "%1"' bindWith:archiveName).
7ff1f5f60f2e #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4947
diff changeset
  3457
        ].
2180
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3458
    ] ifFalse:[
4947
6a569254ef65 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4841
diff changeset
  3459
        archiveName := 'internal stream'.
2180
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3460
    ].
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3461
    self readDirectory.
2514
de7b7070061c support for lazy loading;
Claus Gittinger <cg@exept.de>
parents: 2513
diff changeset
  3462
de7b7070061c support for lazy loading;
Claus Gittinger <cg@exept.de>
parents: 2513
diff changeset
  3463
    "Modified: / 21-11-2010 / 11:45:53 / cg"
4949
7ff1f5f60f2e #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4947
diff changeset
  3464
    "Modified: / 22-05-2019 / 12:19:06 / Claus Gittinger"
5435
116c766a2f27 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5367
diff changeset
  3465
    "Modified (format): / 27-01-2020 / 18:34:54 / Stefan Vogel"
2514
de7b7070061c support for lazy loading;
Claus Gittinger <cg@exept.de>
parents: 2513
diff changeset
  3466
!
de7b7070061c support for lazy loading;
Claus Gittinger <cg@exept.de>
parents: 2513
diff changeset
  3467
de7b7070061c support for lazy loading;
Claus Gittinger <cg@exept.de>
parents: 2513
diff changeset
  3468
reopenForReading
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3469
    stream isNil ifTrue:[
5359
8dab51321a7c #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5263
diff changeset
  3470
        mode := #read.
8dab51321a7c #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5263
diff changeset
  3471
        stream := archiveName asFilename readStream.
8dab51321a7c #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5263
diff changeset
  3472
        stream binary.
8dab51321a7c #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5263
diff changeset
  3473
        self setDefaultArchiveBounds.
2514
de7b7070061c support for lazy loading;
Claus Gittinger <cg@exept.de>
parents: 2513
diff changeset
  3474
    ]
de7b7070061c support for lazy loading;
Claus Gittinger <cg@exept.de>
parents: 2513
diff changeset
  3475
de7b7070061c support for lazy loading;
Claus Gittinger <cg@exept.de>
parents: 2513
diff changeset
  3476
    "Created: / 21-11-2010 / 12:02:37 / cg"
5359
8dab51321a7c #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5263
diff changeset
  3477
    "Modified: / 05-12-2019 / 15:19:59 / Stefan Vogel"
2180
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3478
!
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3479
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3480
writingTo:aPositionableStream
3529
e074058c7ee5 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 3528
diff changeset
  3481
    "initialize the archive to write to aPositionableStream"
2180
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3482
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3483
    stream notNil ifTrue: [
5238
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  3484
        self close.
2180
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3485
    ].
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3486
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3487
    mode := #write.
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3488
    aPositionableStream binary.
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3489
    stream := aPositionableStream.
5238
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  3490
    startOfArchive := aPositionableStream position.
2180
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3491
    aPositionableStream isFileStream ifTrue:[
5238
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  3492
        archiveName := aPositionableStream pathName.
2180
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3493
    ] ifFalse:[
5238
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  3494
        archiveName := 'internal stream'.
2180
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3495
    ].
2861
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3496
    zipMembersByName := Dictionary new.
5238
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  3497
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  3498
    "Modified: / 15-11-2019 / 19:31:15 / Stefan Vogel"
622
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  3499
! !
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  3500
5470
416a04cb68ba #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 5435
diff changeset
  3501
!ZipArchive methodsFor:'printing'!
416a04cb68ba #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 5435
diff changeset
  3502
416a04cb68ba #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 5435
diff changeset
  3503
printOn:aStream
416a04cb68ba #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 5435
diff changeset
  3504
    aStream 
416a04cb68ba #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 5435
diff changeset
  3505
        nextPutAll:self className;
416a04cb68ba #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 5435
diff changeset
  3506
        nextPut:$(;
416a04cb68ba #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 5435
diff changeset
  3507
        print:archiveName;
416a04cb68ba #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 5435
diff changeset
  3508
        nextPut:$).
416a04cb68ba #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 5435
diff changeset
  3509
416a04cb68ba #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 5435
diff changeset
  3510
    "Created: / 20-03-2020 / 14:43:46 / Stefan Vogel"
416a04cb68ba #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 5435
diff changeset
  3511
! !
416a04cb68ba #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 5435
diff changeset
  3512
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3513
!ZipArchive methodsFor:'private'!
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3514
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3515
closeFile
4175
95c1518f25cf #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4174
diff changeset
  3516
    <resource: #obsolete>
95c1518f25cf #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4174
diff changeset
  3517
    "backward compatibility"
95c1518f25cf #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4174
diff changeset
  3518
95c1518f25cf #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4174
diff changeset
  3519
    self obsoleteMethodWarning:'use #close'.
95c1518f25cf #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4174
diff changeset
  3520
95c1518f25cf #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4174
diff changeset
  3521
    self close.
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3522
!
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3523
2861
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3524
dataStartOf:zipEntry
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3525
    "fetch the absolute start address of the data of a given zipEntry.
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3526
     Note: extra field and extra field length may be different from that in
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3527
	   the central directory entry. Sow e have to fetch the local header."
2861
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3528
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3529
    |dataStart fileHeaderStart fileNameLength extraFieldLength|
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3530
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3531
    dataStart := zipEntry dataStart.
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3532
    dataStart notNil ifTrue:[
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3533
	^ dataStart.
2861
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3534
    ].
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3535
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3536
    fileHeaderStart := zipEntry relativeLocalHeaderOffset + startOfArchive.
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3537
    (fileHeaderStart + 30) > endOfArchive ifTrue: [
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3538
	^ ZipFileFormatErrorSignal raiseRequestErrorString:' - zipEntry end is out of the archive bounds'.
2861
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3539
    ].
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3540
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3541
    "Now read the fileHeader:
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3542
	0  local file header signature     4 bytes  (0x04034b50)
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3543
	4  version needed to extract       2 bytes
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3544
	6  general purpose bit flag        2 bytes
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3545
	8  compression method              2 bytes
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3546
	10 last mod file time              2 bytes
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3547
	12 last mod file date              2 bytes
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3548
	14 crc-32                          4 bytes
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3549
	18 compressed size                 4 bytes
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3550
	22 uncompressed size               4 bytes
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3551
	26 file name length (x)            2 bytes
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3552
	28 extra field length (y)          2 bytes
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3553
	      fixd size total len:    30
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3554
	30 file name (variable size)
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3555
	30+x    extra field (variable size)
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3556
	30+x+y  data
2861
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3557
     Note: extra field and extra field length may be different from that in
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3558
	   the central directory entry!!
2861
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3559
    "
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3560
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3561
    stream position:fileHeaderStart+26.
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3562
    fileNameLength := stream nextUnsignedInt16MSB:false.
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3563
    extraFieldLength := stream nextUnsignedInt16MSB:false.
2861
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3564
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3565
    dataStart := fileHeaderStart + 30 + fileNameLength + extraFieldLength.
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3566
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3567
    (dataStart + (zipEntry compressedSize)) > endOfArchive ifTrue: [
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3568
	^ ZipFileFormatErrorSignal raiseRequestErrorString:' - zipEntry end is out of the archive bounds'.
2861
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3569
    ].
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3570
    zipEntry dataStart:dataStart.
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3571
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3572
    ^ dataStart
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3573
!
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3574
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3575
openFile
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3576
    |fn|
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3577
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3578
    stream isNil ifTrue:[
5359
8dab51321a7c #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5263
diff changeset
  3579
        fn := archiveName asFilename.
8dab51321a7c #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5263
diff changeset
  3580
        mode ~~ #write ifTrue:[
8dab51321a7c #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5263
diff changeset
  3581
            mode == #append ifTrue:[
8dab51321a7c #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5263
diff changeset
  3582
                stream := fn readWriteStream.
8dab51321a7c #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5263
diff changeset
  3583
            ] ifFalse:[
8dab51321a7c #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5263
diff changeset
  3584
                stream := fn readStream.
8dab51321a7c #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5263
diff changeset
  3585
            ].
8dab51321a7c #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5263
diff changeset
  3586
        ] ifFalse:[
8dab51321a7c #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5263
diff changeset
  3587
            stream := fn writeStream
8dab51321a7c #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5263
diff changeset
  3588
        ].
8dab51321a7c #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5263
diff changeset
  3589
        stream binary.
8dab51321a7c #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5263
diff changeset
  3590
        self setDefaultArchiveBounds.
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3591
    ].
2490
cdc1bcf9cb50 changed:
sr
parents: 2420
diff changeset
  3592
cdc1bcf9cb50 changed:
sr
parents: 2420
diff changeset
  3593
    "Modified: / 31-08-2010 / 12:40:41 / sr"
5359
8dab51321a7c #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5263
diff changeset
  3594
    "Modified: / 05-12-2019 / 14:55:13 / Stefan Vogel"
1994
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  3595
!
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  3596
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  3597
setDefaultArchiveBounds
2180
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3598
    "set start and end of archive if it is nil. That means no bounds have been defined
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3599
     before. In that case the archive is the complete file."
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  3600
1994
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  3601
    startOfArchive isNil ifTrue: [
5435
116c766a2f27 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5367
diff changeset
  3602
        "/ set archive zero position
116c766a2f27 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5367
diff changeset
  3603
        startOfArchive := 0.
1994
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  3604
    ].
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  3605
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  3606
    endOfArchive isNil ifTrue: [
5435
116c766a2f27 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5367
diff changeset
  3607
        "/ set archive end position
116c766a2f27 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5367
diff changeset
  3608
        endOfArchive := stream collectionSize.
1994
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  3609
    ].
5435
116c766a2f27 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5367
diff changeset
  3610
116c766a2f27 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5367
diff changeset
  3611
    "Modified: / 27-01-2020 / 18:27:01 / Stefan Vogel"
2014
929753038c13 ensure that zip file name is valid before save (check // \\ and spaces)
ab
parents: 2012
diff changeset
  3612
!
929753038c13 ensure that zip file name is valid before save (check // \\ and spaces)
ab
parents: 2012
diff changeset
  3613
929753038c13 ensure that zip file name is valid before save (check // \\ and spaces)
ab
parents: 2012
diff changeset
  3614
validZipFileNameFrom:zipFileName
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3615
    |fileNameParts validZipFileName|
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3616
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3617
    fileNameParts := zipFileName asCollectionOfSubstringsSeparatedByAny:'/\'.
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3618
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3619
    fileNameParts do:[:eachPart|
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3620
	eachPart notEmptyOrNil ifTrue:[
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3621
	    validZipFileName isNil ifTrue:[
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3622
		validZipFileName := eachPart.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3623
	    ] ifFalse:[
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3624
		validZipFileName := validZipFileName, '/', eachPart.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3625
	    ].
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3626
	].
2014
929753038c13 ensure that zip file name is valid before save (check // \\ and spaces)
ab
parents: 2012
diff changeset
  3627
    ].
929753038c13 ensure that zip file name is valid before save (check // \\ and spaces)
ab
parents: 2012
diff changeset
  3628
929753038c13 ensure that zip file name is valid before save (check // \\ and spaces)
ab
parents: 2012
diff changeset
  3629
    validZipFileName isEmptyOrNil ifTrue:[
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3630
	^ ZipFileFormatErrorSignal raiseRequestErrorString: (' - invalid zip file name ', zipFileName).
2014
929753038c13 ensure that zip file name is valid before save (check // \\ and spaces)
ab
parents: 2012
diff changeset
  3631
    ].
929753038c13 ensure that zip file name is valid before save (check // \\ and spaces)
ab
parents: 2012
diff changeset
  3632
929753038c13 ensure that zip file name is valid before save (check // \\ and spaces)
ab
parents: 2012
diff changeset
  3633
    ^ validZipFileName
929753038c13 ensure that zip file name is valid before save (check // \\ and spaces)
ab
parents: 2012
diff changeset
  3634
929753038c13 ensure that zip file name is valid before save (check // \\ and spaces)
ab
parents: 2012
diff changeset
  3635
"
929753038c13 ensure that zip file name is valid before save (check // \\ and spaces)
ab
parents: 2012
diff changeset
  3636
    ZipArchive new validZipFileNameFrom:'hello//world'
929753038c13 ensure that zip file name is valid before save (check // \\ and spaces)
ab
parents: 2012
diff changeset
  3637
    ZipArchive new validZipFileNameFrom:'hello\\world'
929753038c13 ensure that zip file name is valid before save (check // \\ and spaces)
ab
parents: 2012
diff changeset
  3638
    ZipArchive new validZipFileNameFrom:'hello\/world'
929753038c13 ensure that zip file name is valid before save (check // \\ and spaces)
ab
parents: 2012
diff changeset
  3639
    ZipArchive new validZipFileNameFrom:'hello/\world'
929753038c13 ensure that zip file name is valid before save (check // \\ and spaces)
ab
parents: 2012
diff changeset
  3640
    ZipArchive new validZipFileNameFrom:'hello/\world/aaa bbb/ccc'
929753038c13 ensure that zip file name is valid before save (check // \\ and spaces)
ab
parents: 2012
diff changeset
  3641
"
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3642
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3643
    "Modified (format): / 17-02-2017 / 22:30:11 / stefan"
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3644
! !
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3645
2603
6d1527c5561a category of:17 methods
Claus Gittinger <cg@exept.de>
parents: 2553
diff changeset
  3646
!ZipArchive methodsFor:'private - decompression'!
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3647
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3648
decode:rawBytes method:compressionMethod size:uncompressedSize
3527
6d61656dca46 class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3268
diff changeset
  3649
    "decode rawBytes into a byteArray"
6d61656dca46 class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3268
diff changeset
  3650
6d61656dca46 class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3268
diff changeset
  3651
    ^ self
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3652
	decode:rawBytes
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3653
	method:compressionMethod
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3654
	size:uncompressedSize
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3655
	asString:false
3527
6d61656dca46 class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3268
diff changeset
  3656
!
6d61656dca46 class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3268
diff changeset
  3657
6d61656dca46 class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3268
diff changeset
  3658
decode:rawBytes method:compressionMethod size:uncompressedSize asString:asString
6d61656dca46 class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3268
diff changeset
  3659
    "decode rawBytes into a byteArray or string"
6d61656dca46 class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3268
diff changeset
  3660
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3661
    |outBytes|
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3662
2511
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  3663
    compressionMethod == COMPRESSION_STORED ifTrue:[
5219
3c67d5f3a37e #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5205
diff changeset
  3664
        "/
3c67d5f3a37e #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5205
diff changeset
  3665
        "/ uncompressed
3c67d5f3a37e #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5205
diff changeset
  3666
        "/
3c67d5f3a37e #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5205
diff changeset
  3667
        asString ifTrue:[^ rawBytes asString].
3c67d5f3a37e #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5205
diff changeset
  3668
        ^ rawBytes
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3669
    ].
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3670
2511
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  3671
    compressionMethod == COMPRESSION_DEFLATED ifTrue:[
5219
3c67d5f3a37e #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5205
diff changeset
  3672
        "/
3c67d5f3a37e #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5205
diff changeset
  3673
        "/ deflate/inflate algorithm
3c67d5f3a37e #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5205
diff changeset
  3674
        "/
3c67d5f3a37e #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5205
diff changeset
  3675
        asString ifTrue:[
3c67d5f3a37e #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5205
diff changeset
  3676
            outBytes := String uninitializedNew:uncompressedSize.
3c67d5f3a37e #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5205
diff changeset
  3677
        ] ifFalse:[
3c67d5f3a37e #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5205
diff changeset
  3678
            outBytes := ByteArray uninitializedNew:uncompressedSize.
3c67d5f3a37e #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5205
diff changeset
  3679
        ].
3c67d5f3a37e #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5205
diff changeset
  3680
        ^ self inflate:rawBytes to:outBytes
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3681
    ].
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3682
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3683
    "/
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3684
    "/ the other algorithms are not (yet) supported
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3685
    "/
2511
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  3686
    compressionMethod == COMPRESSION_SHRUNK ifTrue:[
5219
3c67d5f3a37e #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5205
diff changeset
  3687
        self error:'unsupported compression method: SHRUNK'.
3c67d5f3a37e #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5205
diff changeset
  3688
        ^ nil
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3689
    ].
2511
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  3690
    compressionMethod == COMPRESSION_REDUCED1 ifTrue:[
5219
3c67d5f3a37e #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5205
diff changeset
  3691
        self error:'unsupported compression method: REDUCED1'.
3c67d5f3a37e #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5205
diff changeset
  3692
        ^ nil
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3693
    ].
2511
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  3694
    compressionMethod == COMPRESSION_REDUCED2 ifTrue:[
5219
3c67d5f3a37e #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5205
diff changeset
  3695
        self error:'unsupported compression method: REDUCED2'.
3c67d5f3a37e #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5205
diff changeset
  3696
        ^ nil
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3697
    ].
2511
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  3698
    compressionMethod == COMPRESSION_REDUCED3 ifTrue:[
5219
3c67d5f3a37e #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5205
diff changeset
  3699
        self error:'unsupported compression method: REDUCED3'.
3c67d5f3a37e #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5205
diff changeset
  3700
        ^ nil
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3701
    ].
2511
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  3702
    compressionMethod == COMPRESSION_REDUCED4 ifTrue:[
5219
3c67d5f3a37e #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5205
diff changeset
  3703
        self error:'unsupported compression method: REDUCED4'.
3c67d5f3a37e #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5205
diff changeset
  3704
        ^ nil
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3705
    ].
2511
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  3706
    compressionMethod == COMPRESSION_IMPLODED ifTrue:[
5219
3c67d5f3a37e #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5205
diff changeset
  3707
        self error:'unsupported compression method: IMPLODED'.
3c67d5f3a37e #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5205
diff changeset
  3708
        ^ nil
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3709
    ].
2511
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  3710
    compressionMethod == COMPRESSION_TOKENIZED ifTrue:[
5219
3c67d5f3a37e #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5205
diff changeset
  3711
        self error:'unsupported compression method: TOKENIZED'.
3c67d5f3a37e #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5205
diff changeset
  3712
        ^ nil
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3713
    ].
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3714
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3715
    self error:'unsupported compression method'.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3716
    ^ nil
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3717
2511
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  3718
    "Created: / 29-03-1998 / 20:14:45 / cg"
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  3719
    "Modified: / 19-11-2010 / 15:39:49 / cg"
5219
3c67d5f3a37e #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5205
diff changeset
  3720
    "Modified: / 24-09-2019 / 16:28:35 / Stefan Vogel"
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3721
!
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3722
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3723
inflate:inBytes to:outBytes
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3724
    |inflateReturnCode|
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3725
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3726
%{  /* STACK:32768 */
3527
6d61656dca46 class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3268
diff changeset
  3727
    char *in, *out;
6d61656dca46 class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3268
diff changeset
  3728
3529
e074058c7ee5 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 3528
diff changeset
  3729
    if (__isByteArrayLike(inBytes)) {
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3730
	in = __byteArrayVal(inBytes);
3529
e074058c7ee5 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 3528
diff changeset
  3731
    } else if (__isStringLike(inBytes)) {
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3732
	in = __stringVal(inBytes);
3527
6d61656dca46 class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3268
diff changeset
  3733
    } else {
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3734
	inflateReturnCode = @symbol(badArgument1);
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3735
	goto badArgument;
3527
6d61656dca46 class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3268
diff changeset
  3736
    }
6d61656dca46 class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3268
diff changeset
  3737
6d61656dca46 class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3268
diff changeset
  3738
    if (__isByteArray(outBytes)) {
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3739
	out = __byteArrayVal(outBytes);
3527
6d61656dca46 class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3268
diff changeset
  3740
    } else if (__isString(outBytes)) {
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3741
	out = __stringVal(outBytes);
3527
6d61656dca46 class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3268
diff changeset
  3742
    } else {
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3743
	inflateReturnCode = @symbol(badArgument2);
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3744
	goto badArgument;
3527
6d61656dca46 class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3268
diff changeset
  3745
    }
6d61656dca46 class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3268
diff changeset
  3746
6d61656dca46 class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3268
diff changeset
  3747
    {
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3748
	int rc = stx_inflate(in, out);
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3749
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3750
	if (rc == 0) {
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3751
	    RETURN (outBytes);
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3752
	}
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3753
	inflateReturnCode = __MKSMALLINT(rc);
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3754
    }
3527
6d61656dca46 class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3268
diff changeset
  3755
badArgument: ;
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3756
%}.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3757
    inflateReturnCode notNil ifTrue:[
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3758
	inflateReturnCode isSymbol ifTrue:[
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3759
	    self primitiveFailed:inflateReturnCode
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3760
	].
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3761
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3762
	"/ bad blockType 2
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3763
	self error:'inflate error: ' , inflateReturnCode printString
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3764
    ].
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3765
    ^ nil.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3766
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3767
    "Created: / 8.4.1998 / 10:31:27 / cg"
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3768
! !
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3769
2603
6d1527c5561a category of:17 methods
Claus Gittinger <cg@exept.de>
parents: 2553
diff changeset
  3770
!ZipArchive methodsFor:'private - directory stuff'!
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3771
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3772
addCentralZipDirectory
2512
f1f789f85b34 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2511
diff changeset
  3773
    |noEntries|
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3774
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3775
    centralDirectory isNil ifTrue: [
4766
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  3776
        centralDirectory := ZipCentralDirectory new default.
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3777
    ].
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3778
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3779
    noEntries := 0.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3780
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3781
    "/ ensure that the file position is at end
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3782
    stream setToEnd.
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3783
5238
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  3784
    centralDirectory centralDirectoryStartOffset: stream position-startOfArchive.
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3785
2512
f1f789f85b34 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2511
diff changeset
  3786
    self zipMembersDo:[:zipEntry |
4766
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  3787
        noEntries := noEntries + 1.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  3788
        stream nextPutInt32:C_CENTRAL_HEADER_SIGNATURE MSB:false.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  3789
        stream nextPutInt16:zipEntry versionMadeBy MSB:false.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  3790
        stream nextPutInt16:zipEntry versionNeedToExtract MSB:false.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  3791
        stream nextPutInt16:zipEntry generalPurposBitFlag MSB:false.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  3792
        stream nextPutInt16:zipEntry compressionMethod MSB:false.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  3793
        stream nextPutInt16:zipEntry lastModFileTime MSB:false.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  3794
        stream nextPutInt16:zipEntry lastModFileDate MSB:false.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  3795
        stream nextPutInt32:zipEntry crc32 MSB:false.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  3796
        stream nextPutInt32:zipEntry compressedSize MSB:false.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  3797
        stream nextPutInt32:zipEntry uncompressedSize MSB:false.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  3798
        stream nextPutInt16:zipEntry fileNameLength MSB:false.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  3799
        stream nextPutInt16:zipEntry extraFieldLength MSB:false.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  3800
        stream nextPutInt16:zipEntry fileCommentLength MSB:false.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  3801
        stream nextPutInt16:zipEntry diskNumberStart MSB:false.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  3802
        stream nextPutInt16:zipEntry internalFileAttributes MSB:false.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  3803
        stream nextPutInt32:zipEntry externalFileAttributes MSB:false.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  3804
        stream nextPutInt32:zipEntry relativeLocalHeaderOffset MSB:false.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  3805
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  3806
        self assert:zipEntry fileNameLength = zipEntry fileName size.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  3807
        stream nextPutAll:zipEntry fileName.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  3808
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  3809
        zipEntry extraField notNil ifTrue: [
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  3810
            self assert:zipEntry extraFieldLength = zipEntry extraField size.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  3811
            stream nextPutAll:zipEntry extraField.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  3812
        ].
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  3813
        zipEntry fileComment notNil ifTrue: [
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  3814
            self assert:zipEntry fileCommentLength = zipEntry fileComment size.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  3815
            stream nextPutAll:zipEntry fileComment.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  3816
        ].
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3817
    ].
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3818
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3819
    centralDirectory centralDirectoryTotalNoOfEntries: noEntries.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3820
    centralDirectory centralDirectoryTotalNoOfEntriesOnThisDisk: noEntries.
5238
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  3821
    centralDirectory centralDirectorySize: (stream position-startOfArchive) - (centralDirectory centralDirectoryStartOffset).
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3822
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3823
    stream nextPutByte:($P codePoint).
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3824
    stream nextPutByte:($K codePoint).
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3825
    stream nextPutByte:8r005.
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3826
    stream nextPutByte:8r006.
4766
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  3827
    stream nextPutInt16:centralDirectory numberOfThisDisk MSB:false.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  3828
    stream nextPutInt16:centralDirectory centralDirectoryStartDiskNumber MSB:false.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  3829
    stream nextPutInt16:centralDirectory centralDirectoryTotalNoOfEntriesOnThisDisk MSB:false.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  3830
    stream nextPutInt16:centralDirectory centralDirectoryTotalNoOfEntries MSB:false.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  3831
    stream nextPutInt32:centralDirectory centralDirectorySize MSB:false.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  3832
    stream nextPutInt32:centralDirectory centralDirectoryStartOffset MSB:false.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  3833
    stream nextPutInt16:centralDirectory zipCommentLength MSB:false.
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3834
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3835
    centralDirectory zipCommentLength ~~ 0 ifTrue: [
4766
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  3836
        stream nextPutAll: centralDirectory zipComment.
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3837
    ].
2511
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  3838
2512
f1f789f85b34 code cleanup
Claus Gittinger <cg@exept.de>
parents: 2511
diff changeset
  3839
    "Modified: / 19-11-2010 / 16:23:36 / cg"
5238
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  3840
    "Modified: / 15-11-2019 / 19:34:40 / Stefan Vogel"
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3841
!
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3842
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3843
addMember:zmemb
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3844
    "add a zipMember"
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3845
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3846
    zipMembersByName at:zmemb fileName put:zmemb ifPresent:[:oldEntry|
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3847
	    "ignore duplicate entries for backward compatibility.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3848
	     Argh: expecco once added wrong duplicates to the end of ets files.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3849
		   The first entry is valid."
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3850
	    Logger warning:'duplicate entry in ZIP file ignored: %1' with:zmemb fileName.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3851
	    ^ oldEntry.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3852
	].
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3853
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3854
    firstEntry isNil ifTrue:[
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3855
	firstEntry := zmemb
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3856
    ] ifFalse:[
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3857
	lastEntry next:zmemb.
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3858
    ].
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3859
    lastEntry := zmemb.
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3860
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3861
    ^ zmemb.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3862
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3863
    "Modified: / 30-03-1998 / 17:13:20 / cg"
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3864
    "Created: / 09-09-1998 / 20:33:06 / cg"
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3865
    "Modified: / 17-02-2017 / 23:47:28 / stefan"
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3866
!
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3867
1986
d7a4d1e1fe13 Add method to check if it is a zip archive
ab
parents: 1985
diff changeset
  3868
checkZipArchive
3529
e074058c7ee5 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 3528
diff changeset
  3869
    "check if my file is really a zip archive. answer true or false."
1986
d7a4d1e1fe13 Add method to check if it is a zip archive
ab
parents: 1985
diff changeset
  3870
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3871
    |size|
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3872
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3873
    stream isNil ifTrue: [
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3874
	^ false
1986
d7a4d1e1fe13 Add method to check if it is a zip archive
ab
parents: 1985
diff changeset
  3875
    ].
d7a4d1e1fe13 Add method to check if it is a zip archive
ab
parents: 1985
diff changeset
  3876
1994
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  3877
    self setDefaultArchiveBounds.
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  3878
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  3879
    size := endOfArchive - startOfArchive.
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3880
    size == 0 ifTrue:[
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3881
	^ false
1986
d7a4d1e1fe13 Add method to check if it is a zip archive
ab
parents: 1985
diff changeset
  3882
    ].
d7a4d1e1fe13 Add method to check if it is a zip archive
ab
parents: 1985
diff changeset
  3883
d7a4d1e1fe13 Add method to check if it is a zip archive
ab
parents: 1985
diff changeset
  3884
    (size < (ECREC_SIZE+4)) ifTrue:[
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3885
	^ false.
1986
d7a4d1e1fe13 Add method to check if it is a zip archive
ab
parents: 1985
diff changeset
  3886
    ].
d7a4d1e1fe13 Add method to check if it is a zip archive
ab
parents: 1985
diff changeset
  3887
1994
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  3888
    ^ self searchForEndOfCentralDirectorySignature
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3889
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3890
    "Modified (format): / 17-02-2017 / 22:21:09 / stefan"
1986
d7a4d1e1fe13 Add method to check if it is a zip archive
ab
parents: 1985
diff changeset
  3891
!
d7a4d1e1fe13 Add method to check if it is a zip archive
ab
parents: 1985
diff changeset
  3892
3529
e074058c7ee5 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 3528
diff changeset
  3893
checkZipArchive:archiveFileName
e074058c7ee5 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 3528
diff changeset
  3894
    archiveName := archiveFileName asFilename name.
e074058c7ee5 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 3528
diff changeset
  3895
    mode := #read.
e074058c7ee5 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 3528
diff changeset
  3896
    self openFile.
e074058c7ee5 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 3528
diff changeset
  3897
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3898
    ^ [
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3899
	self checkZipArchive.
3529
e074058c7ee5 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 3528
diff changeset
  3900
    ] ensure:[
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3901
	self close.
3529
e074058c7ee5 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 3528
diff changeset
  3902
    ].
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3903
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3904
    "Modified: / 17-02-2017 / 22:22:44 / stefan"
3529
e074058c7ee5 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 3528
diff changeset
  3905
!
e074058c7ee5 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 3528
diff changeset
  3906
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3907
findMember:name
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3908
    "find a zipMember by name"
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3909
3665
3e5128566dc2 #UI_ENHANCEMENT
Claus Gittinger <cg@exept.de>
parents: 3529
diff changeset
  3910
    zipMembersByName isNil ifTrue:[^ nil].
2861
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  3911
    ^ zipMembersByName at:name ifAbsent:[].
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3912
!
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3913
2752
051b5bef3be7 added: #findMemberAllowForMissingTrailingSlash:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2677
diff changeset
  3914
findMemberAllowForMissingTrailingSlash: name
051b5bef3be7 added: #findMemberAllowForMissingTrailingSlash:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2677
diff changeset
  3915
    "find a zipMember by name. Allow for missing trailing slash for directories.
051b5bef3be7 added: #findMemberAllowForMissingTrailingSlash:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2677
diff changeset
  3916
     This method is currently used by JavaVM"
051b5bef3be7 added: #findMemberAllowForMissingTrailingSlash:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2677
diff changeset
  3917
    | nameWithSlash |
051b5bef3be7 added: #findMemberAllowForMissingTrailingSlash:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2677
diff changeset
  3918
051b5bef3be7 added: #findMemberAllowForMissingTrailingSlash:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2677
diff changeset
  3919
    nameWithSlash := name , '/'.
051b5bef3be7 added: #findMemberAllowForMissingTrailingSlash:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2677
diff changeset
  3920
051b5bef3be7 added: #findMemberAllowForMissingTrailingSlash:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2677
diff changeset
  3921
    self zipMembersDo:[:each |
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3922
	| fn |
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3923
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3924
	fn := each fileName.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3925
	(fn = name) ifTrue:[^ each].
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3926
	"Try if they differ only in trailing slash"
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3927
	((fn size) = (name size + 1)
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3928
	    and:[fn = nameWithSlash]) ifTrue:[
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3929
		"/Here, return a copy with patched name:
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3930
		^each copy
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3931
		    fileName: name;
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3932
		    yourself.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3933
	    ]
2752
051b5bef3be7 added: #findMemberAllowForMissingTrailingSlash:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2677
diff changeset
  3934
    ].
051b5bef3be7 added: #findMemberAllowForMissingTrailingSlash:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2677
diff changeset
  3935
    ^ nil
051b5bef3be7 added: #findMemberAllowForMissingTrailingSlash:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2677
diff changeset
  3936
051b5bef3be7 added: #findMemberAllowForMissingTrailingSlash:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2677
diff changeset
  3937
    "Created: / 20-07-2012 / 19:33:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
051b5bef3be7 added: #findMemberAllowForMissingTrailingSlash:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2677
diff changeset
  3938
!
051b5bef3be7 added: #findMemberAllowForMissingTrailingSlash:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2677
diff changeset
  3939
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3940
findMemberForWhich:aOneArgBlock
2553
c0ab4d690210 added: #findMemberForWhich:
Claus Gittinger <cg@exept.de>
parents: 2550
diff changeset
  3941
    "find a zipMember by condition"
c0ab4d690210 added: #findMemberForWhich:
Claus Gittinger <cg@exept.de>
parents: 2550
diff changeset
  3942
c0ab4d690210 added: #findMemberForWhich:
Claus Gittinger <cg@exept.de>
parents: 2550
diff changeset
  3943
    self zipMembersDo:[:zipd |
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  3944
	(aOneArgBlock value:zipd) ifTrue:[^ zipd].
2553
c0ab4d690210 added: #findMemberForWhich:
Claus Gittinger <cg@exept.de>
parents: 2550
diff changeset
  3945
    ].
c0ab4d690210 added: #findMemberForWhich:
Claus Gittinger <cg@exept.de>
parents: 2550
diff changeset
  3946
    ^ nil
c0ab4d690210 added: #findMemberForWhich:
Claus Gittinger <cg@exept.de>
parents: 2550
diff changeset
  3947
c0ab4d690210 added: #findMemberForWhich:
Claus Gittinger <cg@exept.de>
parents: 2550
diff changeset
  3948
    "Created: / 12-04-2011 / 17:20:40 / cg"
c0ab4d690210 added: #findMemberForWhich:
Claus Gittinger <cg@exept.de>
parents: 2550
diff changeset
  3949
!
c0ab4d690210 added: #findMemberForWhich:
Claus Gittinger <cg@exept.de>
parents: 2550
diff changeset
  3950
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3951
readDirectory
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3952
    "read the zip directory into a linked-list of zipMembers"
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3953
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  3954
    |size pos0|
1994
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  3955
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  3956
    self setDefaultArchiveBounds.
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  3957
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  3958
    size := endOfArchive - startOfArchive.
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3959
    (size == 0) ifTrue:[
5238
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  3960
        ^ self
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3961
    ].
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3962
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3963
    (size < (ECREC_SIZE+4)) ifTrue:[
5238
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  3964
        ^ ZipFileFormatErrorSignal raiseRequestErrorString:' - zipfile too short'.
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3965
    ].
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3966
1994
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  3967
    self searchForEndOfCentralDirectorySignature ifFalse: [
5238
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  3968
        ^ ZipFileFormatErrorSignal raiseRequestErrorString:' - could not find end of directory signature'.
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3969
    ].
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3970
1994
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  3971
    "/ position before end of central directory signature
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  3972
    pos0 := stream position - 4.
1994
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  3973
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3974
    "/ Now we have found the end of central directory record
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3975
    centralDirectory := ZipCentralDirectory new.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3976
    EndOfStreamNotification handle:[:ex|
5238
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  3977
        ZipFileFormatErrorSignal raiseRequestErrorString:' - file format error or short file: ' ,
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  3978
                                        (stream isFileStream ifTrue:[stream pathName] ifFalse:['inStream']).
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  3979
        ^ self.
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  3980
    ] do:[
5238
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  3981
        centralDirectory readFrom:stream.
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  3982
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  3983
        "/ set file position to start of central directory
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  3984
        (pos0 - centralDirectory centralDirectoryStartOffset - centralDirectory centralDirectorySize) < startOfArchive ifTrue: [
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  3985
            ^ ZipFileFormatErrorSignal raiseRequestErrorString:' - central directory start is out of the archive bounds'.
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  3986
        ].
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  3987
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  3988
        startOfArchive := pos0 - centralDirectory centralDirectoryStartOffset - centralDirectory centralDirectorySize.
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  3989
        stream position:(pos0 - (centralDirectory centralDirectorySize)).
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  3990
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  3991
        zipMembersByName := Dictionary new:centralDirectory centralDirectoryTotalNoOfEntries.
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  3992
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  3993
        "/ read central directory entries
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  3994
        1 to:(centralDirectory centralDirectoryTotalNoOfEntries) do:[:i |
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  3995
            |zipd  centralFileHeaderSignature|
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  3996
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  3997
            (stream position + (self class centralDirectoryMinimumSize)) > endOfArchive ifTrue: [
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  3998
                ^ ZipFileFormatErrorSignal raiseRequestErrorString:' - central directory entry out of archive bounds'.
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  3999
            ].
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  4000
            centralFileHeaderSignature := stream nextInt32MSB:false.
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  4001
            centralFileHeaderSignature ~= C_CENTRAL_HEADER_SIGNATURE ifTrue:[
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  4002
                ZipFileFormatErrorSignal raiseRequestErrorString:' - file format error - bad centralHeaderSignature in: ' ,
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  4003
                                                (stream isFileStream ifTrue:[stream pathName] ifFalse:['inStream']).
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  4004
                ^ self.
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  4005
            ].
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  4006
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  4007
            zipd := ZipMember new readCentralDirectoryEntryFrom:stream.
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  4008
            self addMember:zipd.
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  4009
        ].
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  4010
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  4011
        (stream position + 6) > endOfArchive ifTrue: [
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  4012
            "/ archive has no digital signature
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  4013
            ^ self.
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  4014
        ].
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  4015
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  4016
        "/ check for digital signature
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  4017
        ((stream nextByte ~~ ($P codePoint))
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  4018
         or:[stream nextByte ~~ ($K codePoint)
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  4019
         or:[stream nextByte ~~ 8r005
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  4020
         or:[stream nextByte ~~ 8r005]]]) ifTrue:[
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  4021
            centralDirectory readDigitalSignatureFrom:stream.
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  4022
        ].
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  4023
    ]
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  4024
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  4025
    "
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  4026
     ZipArchive flush.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  4027
     ZipArchive oldFileNamed:'/usr/lib/jdk1.1.7/lib/classes.zip'
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  4028
     ZipArchive oldFileNamed:'/usr/lib/jdk1.1.8/lib/classes.zip'
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  4029
    "
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  4030
2511
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  4031
    "Modified: / 19-11-2010 / 15:43:24 / cg"
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  4032
    "Modified (format): / 17-02-2017 / 22:20:26 / stefan"
5238
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  4033
    "Modified: / 15-11-2019 / 19:57:40 / Stefan Vogel"
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  4034
!
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  4035
1994
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  4036
searchForEndOfCentralDirectorySignature
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  4037
    "read the zip directory into a linked-list of zipMembers"
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  4038
5238
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  4039
    |size pos0 searchEndPos|
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  4040
1994
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  4041
    size := endOfArchive - startOfArchive.
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  4042
    stream position:(pos0 := endOfArchive - ECREC_SIZE - 4).
1994
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  4043
5435
116c766a2f27 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5367
diff changeset
  4044
    "/ search from end of archive backwards for "end of central directory signature",
116c766a2f27 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5367
diff changeset
  4045
    "/ this is necessary if the archive includes a .ZIP file comment or a digital signature
116c766a2f27 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5367
diff changeset
  4046
    "/ then the end of the directory signature may be on an other position
116c766a2f27 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5367
diff changeset
  4047
    "/ but the "end of central directory signature" must be located in the
116c766a2f27 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5367
diff changeset
  4048
    "/ last 64k of the archive
116c766a2f27 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5367
diff changeset
  4049
    size > 65536 ifTrue: [
116c766a2f27 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5367
diff changeset
  4050
        searchEndPos := endOfArchive - 65536.
116c766a2f27 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5367
diff changeset
  4051
    ] ifFalse: [
116c766a2f27 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5367
diff changeset
  4052
        searchEndPos := startOfArchive.
116c766a2f27 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5367
diff changeset
  4053
    ].
116c766a2f27 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5367
diff changeset
  4054
116c766a2f27 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5367
diff changeset
  4055
    [pos0 > searchEndPos] whileTrue:[
116c766a2f27 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5367
diff changeset
  4056
        (stream nextByte == $P codePoint
116c766a2f27 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5367
diff changeset
  4057
         and:[stream nextByte == $K codePoint
116c766a2f27 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5367
diff changeset
  4058
         and:[stream nextByte == 5
116c766a2f27 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5367
diff changeset
  4059
         and:[stream nextByte == 6]]]) ifTrue:[
116c766a2f27 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5367
diff changeset
  4060
            ^ true
5238
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  4061
        ].
5435
116c766a2f27 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5367
diff changeset
  4062
        stream position: (pos0 := pos0 - 1).
1994
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  4063
    ].
5435
116c766a2f27 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5367
diff changeset
  4064
116c766a2f27 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5367
diff changeset
  4065
    ^ false
116c766a2f27 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5367
diff changeset
  4066
116c766a2f27 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5367
diff changeset
  4067
    "Modified: / 27-01-2020 / 18:11:13 / Stefan Vogel"
1994
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  4068
!
76336287ae17 *** empty log message ***
ab
parents: 1993
diff changeset
  4069
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  4070
zipMembersDo:aBlock
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  4071
    "evaluate aBlock for all zipMembers"
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  4072
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  4073
    |zipd|
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  4074
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  4075
    zipd := firstEntry.
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  4076
    [zipd notNil] whileTrue:[
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4077
	aBlock value:zipd.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4078
	zipd := zipd next
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  4079
    ].
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  4080
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  4081
    "Created: / 29.3.1998 / 19:15:15 / cg"
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  4082
    "Modified: / 30.3.1998 / 17:13:47 / cg"
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  4083
! !
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  4084
2524
364d34cb6192 category of: #isValidPath:
Claus Gittinger <cg@exept.de>
parents: 2518
diff changeset
  4085
!ZipArchive methodsFor:'queries'!
364d34cb6192 category of: #isValidPath:
Claus Gittinger <cg@exept.de>
parents: 2518
diff changeset
  4086
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  4087
isValidFile: path
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  4088
    "Return true, if the recevier contains given file. false otherwise."
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  4089
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  4090
    ^ zipMembersByName notNil and:[zipMembersByName includesKey:path]
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  4091
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  4092
    "Created: / 20-05-2013 / 23:37:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  4093
!
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  4094
2524
364d34cb6192 category of: #isValidPath:
Claus Gittinger <cg@exept.de>
parents: 2518
diff changeset
  4095
isValidPath: anArchivePathName
2861
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  4096
    self zipMembersByName
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4097
	keysDo:[:eachMemberName |
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4098
	    ((eachMemberName startsWith:anArchivePathName,'/')
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4099
	     or:[eachMemberName = anArchivePathName]) ifTrue:[^ true]
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4100
	].
2524
364d34cb6192 category of: #isValidPath:
Claus Gittinger <cg@exept.de>
parents: 2518
diff changeset
  4101
2861
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  4102
    ^ false.
2524
364d34cb6192 category of: #isValidPath:
Claus Gittinger <cg@exept.de>
parents: 2518
diff changeset
  4103
! !
364d34cb6192 category of: #isValidPath:
Claus Gittinger <cg@exept.de>
parents: 2518
diff changeset
  4104
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  4105
!ZipArchive methodsFor:'reading'!
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  4106
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  4107
extract:fileName
1995
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  4108
    "extract an entry identified by fileName as a byteArray;
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  4109
     nil on errors"
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  4110
3527
6d61656dca46 class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3268
diff changeset
  4111
    ^ self extract:fileName asString:false
6d61656dca46 class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3268
diff changeset
  4112
!
6d61656dca46 class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3268
diff changeset
  4113
6d61656dca46 class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3268
diff changeset
  4114
extract:fileName asString:asString
6d61656dca46 class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3268
diff changeset
  4115
    "extract an entry identified by fileName as a byteArray or string;
6d61656dca46 class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3268
diff changeset
  4116
     nil on errors"
6d61656dca46 class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3268
diff changeset
  4117
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4118
    self
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4119
	withPositionAndMemberFor:fileName
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4120
	do:[:zmemb :position |
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4121
	    |rawContents data|
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4122
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4123
	    stream position:position.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4124
	    rawContents := stream nextBytes:(zmemb compressedSize).
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4125
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4126
	    data := self
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4127
		decode:rawContents
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4128
		method:(zmemb compressionMethod)
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4129
		size:(zmemb uncompressedSize)
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4130
		asString:asString.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4131
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4132
	    ^ data.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4133
	].
2514
de7b7070061c support for lazy loading;
Claus Gittinger <cg@exept.de>
parents: 2513
diff changeset
  4134
2518
6d16c590ba0a changed: #extract:
sr
parents: 2514
diff changeset
  4135
    ^ nil
6d16c590ba0a changed: #extract:
sr
parents: 2514
diff changeset
  4136
2514
de7b7070061c support for lazy loading;
Claus Gittinger <cg@exept.de>
parents: 2513
diff changeset
  4137
    "Modified: / 21-11-2010 / 11:53:00 / cg"
2518
6d16c590ba0a changed: #extract:
sr
parents: 2514
diff changeset
  4138
    "Modified: / 22-12-2010 / 12:24:54 / sr"
1993
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  4139
!
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  4140
5367
0595a08c2bea #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5366
diff changeset
  4141
extract:fileName toStream:outStream
0595a08c2bea #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5366
diff changeset
  4142
    "extract an entry identified by fileName
0595a08c2bea #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5366
diff changeset
  4143
     and write it onto outStream.
0595a08c2bea #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5366
diff changeset
  4144
     Might raise an error"
0595a08c2bea #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5366
diff changeset
  4145
0595a08c2bea #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5366
diff changeset
  4146
    self
0595a08c2bea #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5366
diff changeset
  4147
        withPositionAndMemberFor:fileName
0595a08c2bea #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5366
diff changeset
  4148
        do:[:zmemb :position |
0595a08c2bea #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5366
diff changeset
  4149
            |rawContents data nWritten compressionMethod|
0595a08c2bea #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5366
diff changeset
  4150
0595a08c2bea #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5366
diff changeset
  4151
            stream position:position.
0595a08c2bea #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5366
diff changeset
  4152
            compressionMethod := zmemb compressionMethod.
0595a08c2bea #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5366
diff changeset
  4153
            compressionMethod == COMPRESSION_STORED ifTrue:[
0595a08c2bea #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5366
diff changeset
  4154
                "/ uncompressed
0595a08c2bea #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5366
diff changeset
  4155
                nWritten := stream copy:(zmemb compressedSize) into:outStream.
0595a08c2bea #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5366
diff changeset
  4156
            ] ifFalse:[
0595a08c2bea #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5366
diff changeset
  4157
                #TODO. "/ add support to extract without creating a temporary string (i.e. decompress directoly to the stream)
0595a08c2bea #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5366
diff changeset
  4158
                rawContents := stream nextBytes:(zmemb compressedSize).
0595a08c2bea #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5366
diff changeset
  4159
                data := self
0595a08c2bea #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5366
diff changeset
  4160
                            decode:rawContents method:compressionMethod
0595a08c2bea #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5366
diff changeset
  4161
                            size:(zmemb uncompressedSize)
0595a08c2bea #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5366
diff changeset
  4162
                            asString:(outStream isBinary not).
0595a08c2bea #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5366
diff changeset
  4163
                outStream nextPutAll:data.
0595a08c2bea #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5366
diff changeset
  4164
                nWritten := data size
0595a08c2bea #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5366
diff changeset
  4165
            ].
0595a08c2bea #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5366
diff changeset
  4166
            ^ nWritten.
0595a08c2bea #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5366
diff changeset
  4167
        ].
0595a08c2bea #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5366
diff changeset
  4168
!
0595a08c2bea #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5366
diff changeset
  4169
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  4170
nextBytes: bytesToRead of: zmember startingAt: pos into: b startingAt: off
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  4171
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  4172
    stream position: (self dataStartOf: zmember) + startOfArchive + pos.
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  4173
    ^ stream nextBytes: bytesToRead into: b startingAt: off.
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  4174
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  4175
    "Created: / 01-05-2011 / 16:21:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  4176
    "Modified: / 10-12-2012 / 05:41:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  4177
!
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  4178
5053
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4179
restoreOsDirectory:osDirectoryName fromArchiveDirectory:archiveDirectoryName
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4180
    "extracts all files from an archiveDirectory
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4181
     into a folder"
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4182
2173
254452034748 #restoreOsDirectory:fromArchiveDirectory
Stefan Vogel <sv@exept.de>
parents: 2161
diff changeset
  4183
    |osDirectory directoryAlreadyCreated archiveDirectoryNameSize|
2010
268f51b7c9c7 only restoreOsDirectory:fromArchiveDirectory: if there is
Claus Gittinger <cg@exept.de>
parents: 2009
diff changeset
  4184
2003
051486962c69 *** empty log message ***
ab
parents: 1995
diff changeset
  4185
    osDirectory := osDirectoryName asFilename.
2173
254452034748 #restoreOsDirectory:fromArchiveDirectory
Stefan Vogel <sv@exept.de>
parents: 2161
diff changeset
  4186
    directoryAlreadyCreated := osDirectory exists.
254452034748 #restoreOsDirectory:fromArchiveDirectory
Stefan Vogel <sv@exept.de>
parents: 2161
diff changeset
  4187
    (directoryAlreadyCreated and: [osDirectory isDirectory not]) ifTrue:[
5053
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4188
        "no way to create the base directory - done"
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4189
        OperatingSystem accessDeniedErrorSignal
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4190
            raiseRequestWith:osDirectory
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4191
            errorString:(' - ZipArchive - cannot create base directory: ' , osDirectory asString).
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4192
        ^ self.
2003
051486962c69 *** empty log message ***
ab
parents: 1995
diff changeset
  4193
    ].
051486962c69 *** empty log message ***
ab
parents: 1995
diff changeset
  4194
2173
254452034748 #restoreOsDirectory:fromArchiveDirectory
Stefan Vogel <sv@exept.de>
parents: 2161
diff changeset
  4195
    archiveDirectoryNameSize := archiveDirectoryName size.
254452034748 #restoreOsDirectory:fromArchiveDirectory
Stefan Vogel <sv@exept.de>
parents: 2161
diff changeset
  4196
254452034748 #restoreOsDirectory:fromArchiveDirectory
Stefan Vogel <sv@exept.de>
parents: 2161
diff changeset
  4197
    self members do: [:eachZipArchiveMember|
5053
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4198
        |eachZipArchiveMemberName baseName directory fileNameOrDirectoryEntry|
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4199
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4200
        eachZipArchiveMemberName := eachZipArchiveMember fileName.
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4201
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4202
        (archiveDirectoryName = '*'
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4203
        or:[
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4204
            ((eachZipArchiveMemberName startsWith:archiveDirectoryName)
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4205
             and:[eachZipArchiveMemberName size = archiveDirectoryNameSize
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4206
                  or:[(eachZipArchiveMemberName at:archiveDirectoryNameSize+1) == $/]])
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4207
        ]) ifTrue: [
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4208
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4209
            directoryAlreadyCreated ifFalse:[
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4210
                osDirectory recursiveMakeDirectory.
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4211
                directoryAlreadyCreated := true.
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4212
            ].
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4213
            archiveDirectoryName = '*' ifTrue:[
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4214
                baseName := eachZipArchiveMemberName.
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4215
            ] ifFalse:[
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4216
                baseName := eachZipArchiveMemberName copyFrom:(archiveDirectoryNameSize+1).
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4217
            ].
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4218
            (baseName notEmpty and:[baseName first == $/]) ifTrue:[
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4219
                baseName := baseName copyFrom:2.
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4220
            ].
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4221
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4222
            baseName notEmpty ifTrue:[
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4223
                fileNameOrDirectoryEntry := osDirectory construct:baseName.
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4224
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4225
                "Note, that a ZipArchive usually does not contain entries for directories!!"
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4226
                (eachZipArchiveMember externalFileAttributes bitTest:EXTERNALFILEATTRIBUTES_ISDIRECTORY) ifTrue:[
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4227
                    fileNameOrDirectoryEntry recursiveMakeDirectory.
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4228
                ] ifFalse: [
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4229
                    "make sure, that the directory exists"
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4230
                    directory := fileNameOrDirectoryEntry directory.
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4231
                    directory isDirectory ifFalse:[
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4232
                        directory recursiveMakeDirectory.
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4233
                    ].
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4234
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4235
                    fileNameOrDirectoryEntry writingFileDo:[:fileStream|
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4236
                        self
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4237
                            extract:eachZipArchiveMemberName
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4238
                            intoStream: fileStream.
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4239
                    ].
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4240
                ].
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4241
            ].
5071b8fc2766 #FEATURE by exept
Claus Gittinger <cg@exept.de>
parents: 4950
diff changeset
  4242
        ]
2003
051486962c69 *** empty log message ***
ab
parents: 1995
diff changeset
  4243
    ].
2514
de7b7070061c support for lazy loading;
Claus Gittinger <cg@exept.de>
parents: 2513
diff changeset
  4244
!
de7b7070061c support for lazy loading;
Claus Gittinger <cg@exept.de>
parents: 2513
diff changeset
  4245
de7b7070061c support for lazy loading;
Claus Gittinger <cg@exept.de>
parents: 2513
diff changeset
  4246
withPositionAndMemberFor:fileName do:aBlock
2861
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  4247
    |zmemb dataStart|
2514
de7b7070061c support for lazy loading;
Claus Gittinger <cg@exept.de>
parents: 2513
diff changeset
  4248
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  4249
    (stream isNil or:[mode ~~ #read]) ifTrue:[
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4250
	^ self error: 'ZipArchive not open for reading ...'.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4251
    ].
2514
de7b7070061c support for lazy loading;
Claus Gittinger <cg@exept.de>
parents: 2513
diff changeset
  4252
de7b7070061c support for lazy loading;
Claus Gittinger <cg@exept.de>
parents: 2513
diff changeset
  4253
    zmemb := self findMember:fileName.
de7b7070061c support for lazy loading;
Claus Gittinger <cg@exept.de>
parents: 2513
diff changeset
  4254
    zmemb isNil ifTrue:[^ nil].
2861
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  4255
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  4256
    dataStart := self dataStartOf:zmemb.
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  4257
    ^ aBlock value:zmemb value:dataStart.
2514
de7b7070061c support for lazy loading;
Claus Gittinger <cg@exept.de>
parents: 2513
diff changeset
  4258
de7b7070061c support for lazy loading;
Claus Gittinger <cg@exept.de>
parents: 2513
diff changeset
  4259
    "Created: / 21-11-2010 / 11:51:41 / cg"
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  4260
    "Modified: / 17-02-2017 / 22:57:43 / stefan"
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  4261
! !
1980
1c868f4b1a7d keep archive now open until closeFile
ab
parents: 1979
diff changeset
  4262
1995
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  4263
!ZipArchive methodsFor:'reading - stream'!
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  4264
4376
4d4f6c0ef629 #DOCUMENTATION by mawalch
mawalch
parents: 4375
diff changeset
  4265
extract:fileName intoStream:aWriteStream
4d4f6c0ef629 #DOCUMENTATION by mawalch
mawalch
parents: 4375
diff changeset
  4266
    "extract an entry identified by filename into aWriteStream"
4d4f6c0ef629 #DOCUMENTATION by mawalch
mawalch
parents: 4375
diff changeset
  4267
4d4f6c0ef629 #DOCUMENTATION by mawalch
mawalch
parents: 4375
diff changeset
  4268
    self
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4269
	withPositionAndMemberFor:fileName
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4270
	do:[:zmemb :position |
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4271
	    |buffer rdSize compressionMethod nextBlockSize streamBufferSize myZipStream|
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4272
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4273
	    stream position:position.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4274
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4275
	    compressionMethod := zmemb compressionMethod.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4276
	    rdSize := zmemb uncompressedSize.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4277
	    nextBlockSize := streamBufferSize := self class streamBufferSize.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4278
	    buffer := ByteArray new: streamBufferSize.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4279
	    [
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4280
		[rdSize > 0] whileTrue: [
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4281
		    rdSize < streamBufferSize ifTrue: [
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4282
			nextBlockSize := rdSize.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4283
		    ].
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4284
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4285
		    compressionMethod == COMPRESSION_DEFLATED ifTrue:[
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4286
			myZipStream isNil ifTrue: [
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4287
			    stream binary.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4288
			    myZipStream := ZipStream readOpenAsZipStreamOn:stream suppressHeaderAndChecksum:true.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4289
			].
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4290
			myZipStream next:nextBlockSize into:buffer startingAt:1.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4291
		    ] ifFalse:[compressionMethod == COMPRESSION_STORED ifTrue:[
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4292
			stream nextBytes:nextBlockSize into:buffer startingAt:1.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4293
		    ] ifFalse:[
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4294
			UnsupportedZipFileFormatErrorSignal raiseErrorString:'unsupported compressMethod'
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4295
		    ]].
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4296
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4297
		    aWriteStream nextPutBytes:nextBlockSize from:buffer startingAt:1.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4298
		    rdSize := rdSize - nextBlockSize.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4299
		].
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4300
	    ] ensure:[
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4301
		myZipStream notNil ifTrue:[
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4302
		    myZipStream close.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4303
		].
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4304
	    ].
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4305
	]
3529
e074058c7ee5 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 3528
diff changeset
  4306
e074058c7ee5 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 3528
diff changeset
  4307
    "Modified: / 21-11-2010 / 11:56:51 / cg"
4376
4d4f6c0ef629 #DOCUMENTATION by mawalch
mawalch
parents: 4375
diff changeset
  4308
    "Modified (format): / 31-05-2017 / 15:03:06 / mawalch"
3529
e074058c7ee5 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 3528
diff changeset
  4309
!
e074058c7ee5 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 3528
diff changeset
  4310
1995
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  4311
readStreamFor:nameOfFileInArchive
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  4312
    "open a stream on archive contents identified by nameOfFileInArchive"
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4313
2861
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  4314
    |zipEntry dataStart|
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4315
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  4316
    (stream isNil or:[mode ~~ #read]) ifTrue:[
4947
6a569254ef65 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4841
diff changeset
  4317
        ^ OpenError raiseRequestWith:nameOfFileInArchive errorString:'ZipArchive not open for reading'.
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4318
    ].
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4319
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4320
    zipEntry := self findMember:nameOfFileInArchive.
2180
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  4321
    zipEntry isNil ifTrue:[
4947
6a569254ef65 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4841
diff changeset
  4322
        ^ OpenError 
6a569254ef65 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4841
diff changeset
  4323
                raiseRequestWith:nameOfFileInArchive 
6a569254ef65 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4841
diff changeset
  4324
                errorString:('ZipArchive member does not exist: "%1"' bindWith:nameOfFileInArchive).
2180
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  4325
    ].
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4326
2861
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  4327
    dataStart := self dataStartOf:zipEntry.
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  4328
    stream position:dataStart.
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  4329
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  4330
    ^ (ZipReadStream zipFileStream:stream zipEntry:zipEntry) zipArchive:self.
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  4331
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  4332
    "Modified (format): / 17-02-2017 / 22:52:00 / stefan"
4947
6a569254ef65 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4841
diff changeset
  4333
    "Modified: / 21-05-2019 / 20:46:07 / Claus Gittinger"
3529
e074058c7ee5 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 3528
diff changeset
  4334
!
e074058c7ee5 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 3528
diff changeset
  4335
4377
cb8861fa9361 #DOCUMENTATION by mawalch
mawalch
parents: 4376
diff changeset
  4336
reopenAndExtract:fileName intoStream:aWriteStream
cb8861fa9361 #DOCUMENTATION by mawalch
mawalch
parents: 4376
diff changeset
  4337
    "extract an entry identified by filename into aWriteStream"
3529
e074058c7ee5 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 3528
diff changeset
  4338
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  4339
    stream isNil ifTrue:[
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4340
	self reopenForReading.
3529
e074058c7ee5 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 3528
diff changeset
  4341
    ].
e074058c7ee5 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 3528
diff changeset
  4342
    self extract:fileName intoStream: aWriteStream.
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  4343
    stream close.
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  4344
    stream := nil.
3529
e074058c7ee5 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 3528
diff changeset
  4345
e074058c7ee5 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 3528
diff changeset
  4346
    "Created: / 21-11-2010 / 11:59:04 / cg"
4377
cb8861fa9361 #DOCUMENTATION by mawalch
mawalch
parents: 4376
diff changeset
  4347
    "Modified (comment): / 31-05-2017 / 15:05:26 / mawalch"
1995
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  4348
! !
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  4349
2003
051486962c69 *** empty log message ***
ab
parents: 1995
diff changeset
  4350
!ZipArchive methodsFor:'writing'!
051486962c69 *** empty log message ***
ab
parents: 1995
diff changeset
  4351
051486962c69 *** empty log message ***
ab
parents: 1995
diff changeset
  4352
addArchiveDirectory: archiveDirectoryName fromOsDirectory: osDirectoryName
4766
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4353
    self addArchiveDirectory: archiveDirectoryName fromOsDirectory: osDirectoryName compressMethod: 0
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4354
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4355
    "Modified: / 22-11-2018 / 15:24:18 / Stefan Vogel"
2003
051486962c69 *** empty log message ***
ab
parents: 1995
diff changeset
  4356
!
051486962c69 *** empty log message ***
ab
parents: 1995
diff changeset
  4357
051486962c69 *** empty log message ***
ab
parents: 1995
diff changeset
  4358
addArchiveDirectory: archiveDirectoryName fromOsDirectory: osDirectoryName compressMethod: theCompressMethod
051486962c69 *** empty log message ***
ab
parents: 1995
diff changeset
  4359
    |osDirectory fileNameOrDirectoryEntry|
2088
d7197949c371 fixed writing of files with spaces in the name;
sr
parents: 2015
diff changeset
  4360
2003
051486962c69 *** empty log message ***
ab
parents: 1995
diff changeset
  4361
    osDirectory := osDirectoryName asFilename.
2832
4e995f270bde changed: #addArchiveDirectory:fromOsDirectory:compressMethod:
Stefan Vogel <sv@exept.de>
parents: 2752
diff changeset
  4362
    osDirectory exists ifFalse:[
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4363
	^ self
1993
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  4364
    ].
2003
051486962c69 *** empty log message ***
ab
parents: 1995
diff changeset
  4365
2161
a737bcc07579 #addDirectory: should not be used
Stefan Vogel <sv@exept.de>
parents: 2104
diff changeset
  4366
    "do not create directories (isDirectory = true) - they are not compatible between operating systems"
a737bcc07579 #addDirectory: should not be used
Stefan Vogel <sv@exept.de>
parents: 2104
diff changeset
  4367
"/    self addDirectory: archiveDirectoryName.
2003
051486962c69 *** empty log message ***
ab
parents: 1995
diff changeset
  4368
    osDirectory recursiveDirectoryContentsDo: [:entry|
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4369
	fileNameOrDirectoryEntry := osDirectory construct: entry.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4370
	fileNameOrDirectoryEntry isDirectory ifTrue: [
2161
a737bcc07579 #addDirectory: should not be used
Stefan Vogel <sv@exept.de>
parents: 2104
diff changeset
  4371
"/            self addDirectory: (archiveDirectoryName, '/', entry).
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4372
	] ifFalse: [
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4373
	    fileNameOrDirectoryEntry readingFileDo: [:aStream|
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4374
		self addFile: (archiveDirectoryName, '/', entry)
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4375
		     fromStream: aStream
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4376
		     compressMethod: theCompressMethod
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4377
		     asDirectory:false.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4378
	    ].
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4379
	].
2003
051486962c69 *** empty log message ***
ab
parents: 1995
diff changeset
  4380
    ].
1993
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  4381
!
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  4382
2007
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  4383
addArchiveDirectoryCompressed: archiveDirectoryName fromOsDirectory: osDirectoryName
4766
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4384
    self addArchiveDirectory: archiveDirectoryName fromOsDirectory: osDirectoryName compressMethod:COMPRESSION_DEFLATED
2511
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  4385
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  4386
    "Modified: / 19-11-2010 / 15:58:04 / cg"
4766
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4387
    "Modified: / 22-11-2018 / 15:24:10 / Stefan Vogel"
2007
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  4388
!
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  4389
1981
c01df511bf6d add finalize for close by garbage collector extend interface for
ab
parents: 1980
diff changeset
  4390
addDirectory: aDirectoryName
2161
a737bcc07579 #addDirectory: should not be used
Stefan Vogel <sv@exept.de>
parents: 2104
diff changeset
  4391
    "do not create directories (isDirectory = true) - they are not compatible between operating systems"
a737bcc07579 #addDirectory: should not be used
Stefan Vogel <sv@exept.de>
parents: 2104
diff changeset
  4392
a737bcc07579 #addDirectory: should not be used
Stefan Vogel <sv@exept.de>
parents: 2104
diff changeset
  4393
    <resource: #obsolete>
a737bcc07579 #addDirectory: should not be used
Stefan Vogel <sv@exept.de>
parents: 2104
diff changeset
  4394
2861
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  4395
    self obsoleteMethodWarning.
4766
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4396
    self addFile:aDirectoryName withContents:nil compressMethod:COMPRESSION_STORED asDirectory:true.
2511
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  4397
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  4398
    "Modified: / 19-11-2010 / 15:38:59 / cg"
4766
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4399
    "Modified: / 22-11-2018 / 15:23:54 / Stefan Vogel"
1981
c01df511bf6d add finalize for close by garbage collector extend interface for
ab
parents: 1980
diff changeset
  4400
!
1979
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4401
1995
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  4402
addFile: aFileName fromStream: aStream
4766
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4403
    self addFile: aFileName fromStream: aStream compressMethod:COMPRESSION_STORED asDirectory:false
2511
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  4404
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  4405
    "Modified: / 19-11-2010 / 15:39:02 / cg"
4766
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4406
    "Modified: / 22-11-2018 / 12:28:27 / Stefan Vogel"
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4407
!
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4408
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4409
addFile:aFileName fromStream:aStream compressMethod: theCompressMethodArg
4766
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4410
    self addFile:aFileName fromStream:aStream compressMethod:theCompressMethodArg asDirectory:false
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4411
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4412
    "Modified: / 22-11-2018 / 15:23:48 / Stefan Vogel"
1995
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  4413
!
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  4414
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4415
addFile:aFileName fromStream:aStream compressMethod:theCompressMethodArg asDirectory:isDirectory
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4416
    "do not create directories (isDirectory = true) - they are not compatible between operating systems"
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4417
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4418
    |zipEntry theZipFileName theCompressMethod streamBufferSize buffer
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4419
     crc32 unCompressedDataSize startDataPosition nextBlockSize myZipStream|
1995
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  4420
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  4421
    (stream isNil or: [mode ~~ #write]) ifTrue: [
4766
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4422
        self error: 'ZipArchive not open for writing ...'.
1995
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  4423
    ].
2088
d7197949c371 fixed writing of files with spaces in the name;
sr
parents: 2015
diff changeset
  4424
d7197949c371 fixed writing of files with spaces in the name;
sr
parents: 2015
diff changeset
  4425
    theCompressMethod := theCompressMethodArg.
d7197949c371 fixed writing of files with spaces in the name;
sr
parents: 2015
diff changeset
  4426
5238
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  4427
    (theCompressMethod ~~ COMPRESSION_DEFLATED
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  4428
     and:[theCompressMethod ~~ COMPRESSION_STORED]) ifTrue:[
4766
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4429
        UnsupportedZipFileFormatErrorSignal raiseRequestErrorString:'unsupported compressMethod'.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4430
        "/ if proceeded, write as uncompressed
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4431
        theCompressMethod := COMPRESSION_STORED
2088
d7197949c371 fixed writing of files with spaces in the name;
sr
parents: 2015
diff changeset
  4432
    ].
d7197949c371 fixed writing of files with spaces in the name;
sr
parents: 2015
diff changeset
  4433
1995
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  4434
    zipEntry := ZipMember new default.
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4435
    theZipFileName := self validZipFileNameFrom:aFileName.
2014
929753038c13 ensure that zip file name is valid before save (check // \\ and spaces)
ab
parents: 2012
diff changeset
  4436
5238
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  4437
    zipEntry fileName:theZipFileName.
1995
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  4438
    zipEntry uncompressedSize: 0.
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  4439
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4440
    isDirectory ifTrue: [
4766
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4441
        theCompressMethod := COMPRESSION_STORED.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4442
        zipEntry externalFileAttributes: EXTERNALFILEATTRIBUTES_ISDIRECTORY.
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4443
    ] ifFalse: [
4766
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4444
        zipEntry compressionMethod: theCompressMethod.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4445
        zipEntry internalFileAttributes: 1.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4446
        zipEntry externalFileAttributes: EXTERNALFILEATTRIBUTES_ISFILE.
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4447
    ].
1995
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  4448
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  4449
    "/ data and time in msdos format
3173
014869903c5c class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3093
diff changeset
  4450
    zipEntry setModificationTimeAndDateToNow.
1995
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  4451
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  4452
    "/ ensure that the file position is at the end
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  4453
    stream setToEnd.
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  4454
5263
350d509151c9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5238
diff changeset
  4455
    zipEntry writeTo:stream position:stream position startOfArchive:startOfArchive.
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4456
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4457
    streamBufferSize := self class streamBufferSize.
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4458
    buffer := ByteArray new:streamBufferSize.
2003
051486962c69 *** empty log message ***
ab
parents: 1995
diff changeset
  4459
    crc32 := 0.
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4460
    unCompressedDataSize := 0.
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  4461
    startDataPosition := stream position.
2007
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  4462
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  4463
    [
4766
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4464
        [aStream atEnd] whileFalse: [
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4465
            nextBlockSize := aStream nextBytes:streamBufferSize into:buffer startingAt:1.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4466
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4467
            nextBlockSize > 0 ifTrue: [
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4468
                unCompressedDataSize := unCompressedDataSize + nextBlockSize.
5435
116c766a2f27 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5367
diff changeset
  4469
                crc32 := ZipStream crc32BytesIn:buffer from:1 to:nextBlockSize crc:crc32.
4766
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4470
                theCompressMethod == COMPRESSION_DEFLATED ifTrue: [
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4471
                    myZipStream isNil ifTrue: [
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4472
                        myZipStream := ZipStream writeOpenAsZipStreamOn:stream suppressHeaderAndChecksum:true.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4473
                    ].
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4474
                    myZipStream nextPutBytes:nextBlockSize from:buffer startingAt:1.
5435
116c766a2f27 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5367
diff changeset
  4475
                ] ifFalse: [theCompressMethod == COMPRESSION_STORED ifTrue:[
4766
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4476
                    stream nextPutBytes:nextBlockSize from:buffer startingAt:1.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4477
                ] ifFalse:[
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4478
                    UnsupportedZipFileFormatErrorSignal raiseRequestErrorString:'unsupported compressMethod'.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4479
                ]].
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4480
            ].
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4481
        ].
2007
6659fd3bbfab support now compressed writing to / reading from a stream
ab
parents: 2003
diff changeset
  4482
    ] ensure:[
4766
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4483
        myZipStream notNil ifTrue:[
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4484
            myZipStream close.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4485
        ].
1995
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  4486
    ].
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  4487
5238
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  4488
    zipEntry compressedSize:stream position - startDataPosition.
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4489
4177
65b9a5e50e5e #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 4176
diff changeset
  4490
    "/ crc32 is always required (not as written in docu to be zero in case of uncompressed mode)
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4491
    zipEntry crc32:crc32.
1995
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  4492
    zipEntry uncompressedSize: unCompressedDataSize.
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  4493
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  4494
    zipEntry rewriteCrcAndSizeTo:stream.
2861
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  4495
    self addMember:zipEntry.
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  4496
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  4497
    stream setToEnd.
2511
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  4498
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  4499
    "Modified: / 19-11-2010 / 15:39:32 / cg"
5263
350d509151c9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5238
diff changeset
  4500
    "Modified: / 19-11-2019 / 14:53:35 / Stefan Vogel"
5435
116c766a2f27 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5367
diff changeset
  4501
    "Modified (format): / 27-01-2020 / 15:19:55 / Stefan Vogel"
1995
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  4502
!
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  4503
1981
c01df511bf6d add finalize for close by garbage collector extend interface for
ab
parents: 1980
diff changeset
  4504
addFile: aFileName withContents: data
4766
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4505
    self addFile: aFileName withContents: data compressMethod:COMPRESSION_STORED asDirectory: false.
2511
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  4506
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  4507
    "Modified: / 19-11-2010 / 15:39:13 / cg"
4766
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4508
    "Modified: / 22-11-2018 / 15:23:17 / Stefan Vogel"
1983
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  4509
!
7792573a6a4f add finalize for close by garbage collector extend interface for
ab
parents: 1982
diff changeset
  4510
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4511
addFile:aFileName withContents:data compressMethod:theCompressMethodArg asDirectory:isDirectory
2161
a737bcc07579 #addDirectory: should not be used
Stefan Vogel <sv@exept.de>
parents: 2104
diff changeset
  4512
    "do not create directories (isDirectory = true) - they are not compatible between operating systems"
a737bcc07579 #addDirectory: should not be used
Stefan Vogel <sv@exept.de>
parents: 2104
diff changeset
  4513
4766
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4514
    self basicAddFile:aFileName withContents:data compressMethod:theCompressMethodArg asDirectory:isDirectory
2511
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  4515
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  4516
    "Modified: / 18-11-2010 / 19:31:36 / cg"
4766
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4517
    "Modified: / 22-11-2018 / 15:23:24 / Stefan Vogel"
2511
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  4518
!
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  4519
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  4520
addFileCompressed: aFileName fromStream: aStream
4766
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4521
    self addFile: aFileName fromStream: aStream compressMethod: COMPRESSION_DEFLATED asDirectory:false
2511
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  4522
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  4523
    "Modified: / 19-11-2010 / 15:58:07 / cg"
4766
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4524
    "Modified: / 22-11-2018 / 15:23:29 / Stefan Vogel"
2511
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  4525
!
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  4526
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  4527
addFileCompressed: aFileName withContents: data
4766
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4528
    self addFile: aFileName withContents: data compressMethod: COMPRESSION_DEFLATED asDirectory: false.
2511
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  4529
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  4530
    "Modified: / 19-11-2010 / 15:58:10 / cg"
4766
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4531
    "Modified: / 22-11-2018 / 15:23:34 / Stefan Vogel"
2511
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  4532
!
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  4533
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  4534
addString: aString as: path
4766
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4535
    self addFile: path fromStream: (aString readStream)
2513
27c989d8f1d5 oops - a halt
Claus Gittinger <cg@exept.de>
parents: 2512
diff changeset
  4536
27c989d8f1d5 oops - a halt
Claus Gittinger <cg@exept.de>
parents: 2512
diff changeset
  4537
    "Modified: / 19-11-2010 / 17:47:26 / cg"
4766
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4538
    "Modified: / 22-11-2018 / 15:23:40 / Stefan Vogel"
2856
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  4539
!
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  4540
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4541
basicAddFile:aFileName withContents:data compressMethod:theCompressMethodArg asDirectory:isDirectory
2856
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  4542
    "do not create directories (isDirectory = true) - they are not compatible between operating systems"
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4543
5238
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  4544
    |zipEntry theCompressedData theZipFileName theCompressMethod compressedDataOffset compressedDataSize|
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  4545
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  4546
    (stream isNil or:[mode ~~ #write]) ifTrue:[
4766
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4547
        ^ self error:'ZipArchive not open for writing ...'.
2856
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  4548
    ].
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  4549
    theCompressMethod := theCompressMethodArg.
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4550
    ((theCompressMethod ~~ COMPRESSION_DEFLATED)
4175
95c1518f25cf #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4174
diff changeset
  4551
      and:[theCompressMethod ~~ COMPRESSION_STORED]) ifTrue:[
4766
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4552
        UnsupportedZipFileFormatErrorSignal
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4553
            raiseRequestErrorString:'unsupported compressMethod'.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4554
        "/ if proceeded, write as uncompressed
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4555
        theCompressMethod := COMPRESSION_STORED
4175
95c1518f25cf #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4174
diff changeset
  4556
    ].
95c1518f25cf #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4174
diff changeset
  4557
2856
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  4558
    zipEntry := ZipMember new default.
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  4559
    theZipFileName := self validZipFileNameFrom:aFileName.
4766
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4560
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4561
    (isDirectory and:[self appendTrailingSlash and:[theZipFileName last ~~ $/]]) ifTrue:[
5238
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  4562
        zipEntry fileName:theZipFileName, $/.
4766
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4563
    ] ifFalse:[
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4564
        zipEntry fileName:theZipFileName.
2856
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  4565
    ].
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  4566
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  4567
    zipEntry uncompressedSize:data size.
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  4568
    isDirectory ifTrue:[
4766
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4569
        zipEntry externalFileAttributes:EXTERNALFILEATTRIBUTES_ISDIRECTORY.
2856
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  4570
    ] ifFalse:[
4766
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4571
        zipEntry compressionMethod:theCompressMethod.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4572
        zipEntry internalFileAttributes: 1.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4573
        zipEntry externalFileAttributes: EXTERNALFILEATTRIBUTES_ISFILE.
2856
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  4574
    ].
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4575
2856
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  4576
    "/ data and time in msdos format
3173
014869903c5c class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3093
diff changeset
  4577
    zipEntry setModificationTimeAndDateToNow.
014869903c5c class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3093
diff changeset
  4578
2856
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  4579
    data notEmptyOrNil ifTrue:[
4766
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4580
        "/ crc32 is always required (not as written in docu to be zero in case of uncompressed mode)
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4581
        zipEntry crc32:(ZipStream crc32BytesIn:data from:1 to:data size crc:0).
2856
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  4582
    ].
4766
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4583
    (isDirectory not and:[theCompressMethod == COMPRESSION_DEFLATED]) ifTrue:[
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4584
        theCompressedData := ByteArray new:(data size + 16).
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4585
        compressedDataSize := (ZipStream compress:data into:theCompressedData) - 6.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4586
        compressedDataOffset := 3.
4175
95c1518f25cf #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4174
diff changeset
  4587
    ] ifFalse:["theCompressMethod == COMPRESSION_STORED"
4766
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4588
        theCompressedData := data.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4589
        compressedDataSize := data size.
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4590
        compressedDataOffset := 1.
2856
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  4591
    ].
4766
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4592
    zipEntry compressedSize:compressedDataSize.
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4593
2856
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  4594
    "/ ensure that the file position is at the end
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  4595
    stream setToEnd.
5263
350d509151c9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5238
diff changeset
  4596
    zipEntry writeTo:stream position:stream position startOfArchive:startOfArchive.
2856
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  4597
    theCompressedData notNil ifTrue:[
4766
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4598
        stream 
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4599
            nextPutAll:theCompressedData
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4600
            startingAt:compressedDataOffset 
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  4601
            to:compressedDataOffset + compressedDataSize - 1.
2856
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  4602
    ].
2861
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  4603
    self addMember:zipEntry.
2856
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  4604
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  4605
    "Created: / 18-11-2010 / 19:31:10 / cg"
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  4606
    "Modified: / 19-11-2010 / 17:47:01 / cg"
fe5136a71187 Fix for previous commit (pressed wrong CVS dialog)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2855
diff changeset
  4607
    "Modified: / 19-11-2012 / 12:04:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
5263
350d509151c9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5238
diff changeset
  4608
    "Modified: / 19-11-2019 / 14:53:29 / Stefan Vogel"
1979
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4609
! !
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4610
1995
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  4611
!ZipArchive methodsFor:'writing - stream'!
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  4612
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4613
compressedWriteStreamFor:nameOfFileInArchive
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4614
    "create new entry in central directory"
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4615
2511
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  4616
    ^ self writeStreamFor:nameOfFileInArchive compressMethod:COMPRESSION_DEFLATED
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  4617
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  4618
    "Modified: / 19-11-2010 / 15:58:13 / cg"
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4619
!
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4620
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4621
writeStreamFor:nameOfFileInArchive compressMethod:theCompressMethodArg
1995
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  4622
    "create new entry in central directory"
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4623
3173
014869903c5c class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3093
diff changeset
  4624
    |zipEntry theZipFileName theCompressMethod|
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4625
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  4626
    (stream isNil or:[mode ~~ #write]) ifTrue: [
5238
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  4627
        ^ self error: 'ZipArchive not open for writing ...'.
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4628
    ].
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4629
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4630
    theCompressMethod := theCompressMethodArg.
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4631
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4632
    ((theCompressMethod == COMPRESSION_DEFLATED)
4175
95c1518f25cf #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4174
diff changeset
  4633
     or:[theCompressMethod == COMPRESSION_STORED]) ifFalse:[
5238
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  4634
        UnsupportedZipFileFormatErrorSignal raiseRequestErrorString:'unsupported compressMethod'.
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  4635
        "/ if proceeded, write as uncompressed
09078186400b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5228
diff changeset
  4636
        theCompressMethod := COMPRESSION_STORED
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4637
    ].
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4638
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4639
    zipEntry := ZipMember new default.
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4640
    theZipFileName := self validZipFileNameFrom:nameOfFileInArchive.
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4641
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4642
    zipEntry fileName: theZipFileName.
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4643
    zipEntry uncompressedSize: 0.
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4644
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4645
    zipEntry compressionMethod: theCompressMethod.
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4646
    zipEntry internalFileAttributes: 1.
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4647
    zipEntry externalFileAttributes: EXTERNALFILEATTRIBUTES_ISFILE.
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4648
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4649
    "/ data and time in msdos format
3173
014869903c5c class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3093
diff changeset
  4650
    zipEntry setModificationTimeAndDateToNow.
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4651
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4652
    "/ ensure that the file position is at the end
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  4653
    stream setToEnd.
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  4654
5263
350d509151c9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5238
diff changeset
  4655
    zipEntry writeTo:stream position:stream position startOfArchive:startOfArchive.
2861
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  4656
    self addMember:zipEntry.
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4657
4335
d39f2d7d91b1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4283
diff changeset
  4658
    ^ (ZipWriteStream zipFileStream:stream zipEntry:zipEntry) zipArchive:self.
2511
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  4659
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  4660
    "Modified: / 19-11-2010 / 15:38:54 / cg"
5263
350d509151c9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5238
diff changeset
  4661
    "Modified: / 19-11-2019 / 14:53:10 / Stefan Vogel"
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4662
! !
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4663
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4664
!ZipArchive::AbstractZipStream class methodsFor:'instance creation'!
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4665
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4666
zipFileStream:something zipEntry:compressionMethodArg
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4667
    ^ self basicNew zipFileStream:something zipEntry:compressionMethodArg
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4668
! !
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4669
4677
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  4670
!ZipArchive::AbstractZipStream class methodsFor:'queries'!
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  4671
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  4672
isAbstract
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  4673
    "Return if this class is an abstract class.
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  4674
     True is returned here for myself only; false for subclasses.
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  4675
     Abstract subclasses must redefine this again."
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  4676
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  4677
    ^ self == ZipArchive::AbstractZipStream.
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  4678
! !
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  4679
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4680
!ZipArchive::AbstractZipStream methodsFor:'accessing'!
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4681
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4682
zipArchive
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4683
    ^ zipArchive
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4684
!
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4685
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4686
zipArchive:something
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4687
    zipArchive := something.
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4688
!
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4689
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4690
zipEntry
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4691
    ^ zipEntry
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4692
!
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4693
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4694
zipEntry:something
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4695
    zipEntry := something.
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4696
!
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4697
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4698
zipFileStream
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4699
    ^ zipFileStream
1995
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  4700
! !
93f2f08bceb3 support now read from and write into archive with streams
ab
parents: 1994
diff changeset
  4701
4677
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  4702
!ZipArchive::AbstractZipStream methodsFor:'closing'!
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  4703
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  4704
close
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  4705
    (compressingStream notNil and:[compressingStream ~~ zipFileStream]) ifTrue:[
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  4706
        "close ZipStream"
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  4707
        compressingStream close.
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  4708
    ].
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  4709
    compressingStream := nil.
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  4710
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  4711
    "Modified: / 11-06-2018 / 14:14:26 / Stefan Vogel"
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  4712
! !
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  4713
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  4714
!ZipArchive::AbstractZipStream methodsFor:'initialization'!
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  4715
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  4716
zipFileStream:zipFileStreamArg zipEntry:zipEntryArg
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  4717
    "raise an error: must be redefined in concrete subclass(es)"
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  4718
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  4719
    ^ self subclassResponsibility
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  4720
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  4721
    "Modified (format): / 11-06-2018 / 14:53:22 / Stefan Vogel"
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  4722
! !
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  4723
2180
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  4724
!ZipArchive::AbstractZipStream methodsFor:'misc'!
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  4725
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  4726
binary
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  4727
    compressingStream binary
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  4728
!
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  4729
4841
44e0d7acac61 #FEATURE by stefan
Stefan Vogel <sv@exept.de>
parents: 4766
diff changeset
  4730
binary:beBinaryBool
44e0d7acac61 #FEATURE by stefan
Stefan Vogel <sv@exept.de>
parents: 4766
diff changeset
  4731
    "stream protocol compatibility"
44e0d7acac61 #FEATURE by stefan
Stefan Vogel <sv@exept.de>
parents: 4766
diff changeset
  4732
44e0d7acac61 #FEATURE by stefan
Stefan Vogel <sv@exept.de>
parents: 4766
diff changeset
  4733
    ^ compressingStream binary:beBinaryBool
44e0d7acac61 #FEATURE by stefan
Stefan Vogel <sv@exept.de>
parents: 4766
diff changeset
  4734
44e0d7acac61 #FEATURE by stefan
Stefan Vogel <sv@exept.de>
parents: 4766
diff changeset
  4735
    "Created: / 13-03-2019 / 19:13:18 / Stefan Vogel"
44e0d7acac61 #FEATURE by stefan
Stefan Vogel <sv@exept.de>
parents: 4766
diff changeset
  4736
!
44e0d7acac61 #FEATURE by stefan
Stefan Vogel <sv@exept.de>
parents: 4766
diff changeset
  4737
2180
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  4738
contentsSpecies
3093
46e903dd0a67 class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3086
diff changeset
  4739
    "return a class of which instances will be returned, when
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4740
     parts of the collection are asked for.
3093
46e903dd0a67 class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3086
diff changeset
  4741
     (see upTo-kind of methods in Stream)"
46e903dd0a67 class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3086
diff changeset
  4742
2180
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  4743
    ^ compressingStream contentsSpecies
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  4744
!
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  4745
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  4746
isBinary
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  4747
    ^ compressingStream isBinary
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  4748
!
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  4749
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  4750
text
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  4751
    compressingStream text
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  4752
! !
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  4753
1979
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4754
!ZipArchive::ZipCentralDirectory methodsFor:'accessing'!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4755
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4756
centralDirectorySize
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4757
    ^ centralDirectorySize
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4758
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4759
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4760
centralDirectorySize:something
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4761
    centralDirectorySize := something.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4762
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4763
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4764
centralDirectoryStartDiskNumber
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4765
    ^ centralDirectoryStartDiskNumber
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4766
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4767
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4768
centralDirectoryStartDiskNumber:something
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4769
    centralDirectoryStartDiskNumber := something.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4770
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4771
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4772
centralDirectoryStartOffset
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4773
    ^ centralDirectoryStartOffset
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4774
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4775
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4776
centralDirectoryStartOffset:something
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4777
    centralDirectoryStartOffset := something.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4778
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4779
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4780
centralDirectoryTotalNoOfEntries
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4781
    ^ centralDirectoryTotalNoOfEntries
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4782
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4783
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4784
centralDirectoryTotalNoOfEntries:something
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4785
    centralDirectoryTotalNoOfEntries := something.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4786
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4787
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4788
centralDirectoryTotalNoOfEntriesOnThisDisk
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4789
    ^ centralDirectoryTotalNoOfEntriesOnThisDisk
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4790
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4791
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4792
centralDirectoryTotalNoOfEntriesOnThisDisk:something
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4793
    centralDirectoryTotalNoOfEntriesOnThisDisk := something.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4794
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4795
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4796
digitalSignatureData
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4797
    ^ digitalSignatureData
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4798
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4799
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4800
digitalSignatureData:something
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4801
    digitalSignatureData := something.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4802
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4803
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4804
digitalSignatureDataSize
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4805
    ^ digitalSignatureDataSize
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4806
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4807
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4808
digitalSignatureDataSize:something
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4809
    digitalSignatureDataSize := something.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4810
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4811
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4812
numberOfThisDisk
1993
64e0530befa6 *** empty log message ***
ab
parents: 1987
diff changeset
  4813
    ^ numberOfThisDisk.
1979
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4814
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4815
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4816
numberOfThisDisk:something
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4817
    numberOfThisDisk := something.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4818
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4819
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4820
zipComment
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4821
    ^ zipComment
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4822
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4823
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4824
zipComment:something
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4825
    zipComment := something.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4826
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4827
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4828
zipCommentLength
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4829
    ^ zipCommentLength
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4830
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4831
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4832
zipCommentLength:something
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4833
    zipCommentLength := something.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4834
! !
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4835
2420
cd223e66f004 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2333
diff changeset
  4836
!ZipArchive::ZipCentralDirectory methodsFor:'initialization'!
1979
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4837
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4838
default
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4839
    numberOfThisDisk := 0.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4840
    centralDirectoryStartDiskNumber := 0.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4841
    centralDirectoryTotalNoOfEntriesOnThisDisk := 0.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4842
    centralDirectoryTotalNoOfEntries := 0.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4843
    centralDirectorySize := 0.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4844
    centralDirectoryStartOffset := 0.
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4845
    zipCommentLength := 0.
1979
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4846
    zipComment := nil.
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4847
    digitalSignatureDataSize := 0.
1979
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4848
    digitalSignatureData := nil.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4849
! !
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4850
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4851
!ZipArchive::ZipCentralDirectory methodsFor:'reading & writing'!
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4852
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4853
readDigitalSignatureFrom:aStream
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4854
    "read a digitalSignature trailer from aStream"
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4855
3727
2edee2bb50d2 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 3665
diff changeset
  4856
    digitalSignatureDataSize := aStream nextUnsignedInt16MSB:false.
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4857
    digitalSignatureDataSize ~~ 0 ifTrue:[
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4858
"/        (file position + (centralDirectory digitalSignatureDataSize)) > endOfArchive ifTrue: [
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4859
"/            ^ ZipFileFormatErrorSignal raiseRequestErrorString:' - digital signature entry out of archive bounds'.
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4860
"/        ].
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4861
	digitalSignatureData := String new:digitalSignatureDataSize.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4862
	aStream nextBytes:digitalSignatureDataSize into:digitalSignatureData.
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4863
    ].
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4864
!
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4865
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4866
readFrom:aStream
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4867
    "read a Central Directory Header from aStream"
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4868
3727
2edee2bb50d2 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 3665
diff changeset
  4869
    numberOfThisDisk := aStream nextUnsignedInt16MSB:false.
2edee2bb50d2 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 3665
diff changeset
  4870
    centralDirectoryStartDiskNumber := aStream nextUnsignedInt16MSB:false.
2edee2bb50d2 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 3665
diff changeset
  4871
    centralDirectoryTotalNoOfEntriesOnThisDisk := aStream nextUnsignedInt16MSB:false.
2edee2bb50d2 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 3665
diff changeset
  4872
    centralDirectoryTotalNoOfEntries := aStream nextUnsignedInt16MSB:false.
2edee2bb50d2 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 3665
diff changeset
  4873
    centralDirectorySize := aStream nextInt32MSB:false.
2edee2bb50d2 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 3665
diff changeset
  4874
    centralDirectoryStartOffset := aStream nextInt32MSB:false.
2edee2bb50d2 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 3665
diff changeset
  4875
    zipCommentLength := aStream nextUnsignedInt16MSB:false.
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4876
    zipCommentLength ~~ 0 ifTrue: [
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4877
	zipComment := String new:zipCommentLength.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  4878
	aStream nextBytes:zipCommentLength into:zipComment.
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4879
    ].
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4880
! !
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  4881
651
688ed6b56649 added documentation
Claus Gittinger <cg@exept.de>
parents: 641
diff changeset
  4882
!ZipArchive::ZipMember class methodsFor:'documentation'!
688ed6b56649 added documentation
Claus Gittinger <cg@exept.de>
parents: 641
diff changeset
  4883
688ed6b56649 added documentation
Claus Gittinger <cg@exept.de>
parents: 641
diff changeset
  4884
documentation
688ed6b56649 added documentation
Claus Gittinger <cg@exept.de>
parents: 641
diff changeset
  4885
"
688ed6b56649 added documentation
Claus Gittinger <cg@exept.de>
parents: 641
diff changeset
  4886
    keeps some information for a single entry in a zipFile.
688ed6b56649 added documentation
Claus Gittinger <cg@exept.de>
parents: 641
diff changeset
  4887
"
688ed6b56649 added documentation
Claus Gittinger <cg@exept.de>
parents: 641
diff changeset
  4888
688ed6b56649 added documentation
Claus Gittinger <cg@exept.de>
parents: 641
diff changeset
  4889
688ed6b56649 added documentation
Claus Gittinger <cg@exept.de>
parents: 641
diff changeset
  4890
! !
688ed6b56649 added documentation
Claus Gittinger <cg@exept.de>
parents: 641
diff changeset
  4891
622
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  4892
!ZipArchive::ZipMember methodsFor:'accessing'!
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  4893
1979
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4894
compressedSize
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4895
    ^ compressedSize
622
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  4896
!
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  4897
1979
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4898
compressedSize:something
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4899
    compressedSize := something.
622
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  4900
!
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  4901
1979
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4902
compressionMethod
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4903
    ^ compressionMethod
622
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  4904
!
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  4905
1979
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4906
compressionMethod:something
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4907
    compressionMethod := something.
622
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  4908
!
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  4909
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  4910
crc32
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  4911
    ^ crc32
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  4912
2524
364d34cb6192 category of: #isValidPath:
Claus Gittinger <cg@exept.de>
parents: 2518
diff changeset
  4913
    "Created: / 29-03-1998 / 20:03:00 / cg"
364d34cb6192 category of: #isValidPath:
Claus Gittinger <cg@exept.de>
parents: 2518
diff changeset
  4914
    "Modified: / 21-01-2011 / 00:04:48 / cg"
622
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  4915
!
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  4916
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  4917
crc32:something
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  4918
    crc32 := something.
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  4919
2524
364d34cb6192 category of: #isValidPath:
Claus Gittinger <cg@exept.de>
parents: 2518
diff changeset
  4920
    "Created: / 29-03-1998 / 20:03:00 / cg"
364d34cb6192 category of: #isValidPath:
Claus Gittinger <cg@exept.de>
parents: 2518
diff changeset
  4921
    "Modified: / 21-01-2011 / 00:04:52 / cg"
622
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  4922
!
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  4923
638
ff61e852f5c3 flush cached data after some time (1 minute)
Claus Gittinger <cg@exept.de>
parents: 637
diff changeset
  4924
data
ff61e852f5c3 flush cached data after some time (1 minute)
Claus Gittinger <cg@exept.de>
parents: 637
diff changeset
  4925
    ^ data
ff61e852f5c3 flush cached data after some time (1 minute)
Claus Gittinger <cg@exept.de>
parents: 637
diff changeset
  4926
2524
364d34cb6192 category of: #isValidPath:
Claus Gittinger <cg@exept.de>
parents: 2518
diff changeset
  4927
    "Created: / 09-04-1998 / 13:05:03 / cg"
364d34cb6192 category of: #isValidPath:
Claus Gittinger <cg@exept.de>
parents: 2518
diff changeset
  4928
    "Modified: / 21-01-2011 / 00:04:57 / cg"
638
ff61e852f5c3 flush cached data after some time (1 minute)
Claus Gittinger <cg@exept.de>
parents: 637
diff changeset
  4929
!
ff61e852f5c3 flush cached data after some time (1 minute)
Claus Gittinger <cg@exept.de>
parents: 637
diff changeset
  4930
ff61e852f5c3 flush cached data after some time (1 minute)
Claus Gittinger <cg@exept.de>
parents: 637
diff changeset
  4931
data:something
ff61e852f5c3 flush cached data after some time (1 minute)
Claus Gittinger <cg@exept.de>
parents: 637
diff changeset
  4932
    data := something.
ff61e852f5c3 flush cached data after some time (1 minute)
Claus Gittinger <cg@exept.de>
parents: 637
diff changeset
  4933
2524
364d34cb6192 category of: #isValidPath:
Claus Gittinger <cg@exept.de>
parents: 2518
diff changeset
  4934
    "Created: / 09-04-1998 / 13:05:03 / cg"
364d34cb6192 category of: #isValidPath:
Claus Gittinger <cg@exept.de>
parents: 2518
diff changeset
  4935
    "Modified: / 21-01-2011 / 00:05:00 / cg"
638
ff61e852f5c3 flush cached data after some time (1 minute)
Claus Gittinger <cg@exept.de>
parents: 637
diff changeset
  4936
!
ff61e852f5c3 flush cached data after some time (1 minute)
Claus Gittinger <cg@exept.de>
parents: 637
diff changeset
  4937
938
4544b3c105fe fixed directory reading (care for comment and extra-header bytes)
Claus Gittinger <cg@exept.de>
parents: 900
diff changeset
  4938
dataStart
2861
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  4939
    "tell the file offset, where the data of this zip entry starts"
e5b9ccd39972 class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2860
diff changeset
  4940
938
4544b3c105fe fixed directory reading (care for comment and extra-header bytes)
Claus Gittinger <cg@exept.de>
parents: 900
diff changeset
  4941
    ^ dataStart
4544b3c105fe fixed directory reading (care for comment and extra-header bytes)
Claus Gittinger <cg@exept.de>
parents: 900
diff changeset
  4942
    "Created: / 29.3.1998 / 18:28:40 / cg"
4544b3c105fe fixed directory reading (care for comment and extra-header bytes)
Claus Gittinger <cg@exept.de>
parents: 900
diff changeset
  4943
!
4544b3c105fe fixed directory reading (care for comment and extra-header bytes)
Claus Gittinger <cg@exept.de>
parents: 900
diff changeset
  4944
4544b3c105fe fixed directory reading (care for comment and extra-header bytes)
Claus Gittinger <cg@exept.de>
parents: 900
diff changeset
  4945
dataStart:something
4544b3c105fe fixed directory reading (care for comment and extra-header bytes)
Claus Gittinger <cg@exept.de>
parents: 900
diff changeset
  4946
    "set the value of the instance variable 'dataStart' (automatically generated)"
4544b3c105fe fixed directory reading (care for comment and extra-header bytes)
Claus Gittinger <cg@exept.de>
parents: 900
diff changeset
  4947
4544b3c105fe fixed directory reading (care for comment and extra-header bytes)
Claus Gittinger <cg@exept.de>
parents: 900
diff changeset
  4948
    dataStart := something.
4544b3c105fe fixed directory reading (care for comment and extra-header bytes)
Claus Gittinger <cg@exept.de>
parents: 900
diff changeset
  4949
4544b3c105fe fixed directory reading (care for comment and extra-header bytes)
Claus Gittinger <cg@exept.de>
parents: 900
diff changeset
  4950
    "Created: / 29.3.1998 / 18:28:40 / cg"
4544b3c105fe fixed directory reading (care for comment and extra-header bytes)
Claus Gittinger <cg@exept.de>
parents: 900
diff changeset
  4951
!
4544b3c105fe fixed directory reading (care for comment and extra-header bytes)
Claus Gittinger <cg@exept.de>
parents: 900
diff changeset
  4952
1979
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4953
diskNumberStart
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4954
    ^ diskNumberStart
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4955
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4956
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4957
diskNumberStart:something
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4958
    diskNumberStart := something.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4959
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4960
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4961
externalFileAttributes
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4962
    ^ externalFileAttributes
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4963
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4964
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4965
externalFileAttributes:something
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4966
    externalFileAttributes := something.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4967
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4968
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4969
extraField
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4970
    ^ extraField
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4971
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4972
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4973
extraField:something
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4974
    extraField := something.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4975
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4976
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4977
extraFieldLength
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4978
    ^ extraFieldLength
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4979
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4980
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4981
extraFieldLength:something
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4982
    extraFieldLength := something.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4983
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4984
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4985
fileComment
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4986
    ^ fileComment
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4987
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4988
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4989
fileComment:something
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4990
    fileComment := something.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4991
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4992
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4993
fileCommentLength
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4994
    ^ fileCommentLength
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4995
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4996
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4997
fileCommentLength:something
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  4998
    fileCommentLength := something.
622
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  4999
!
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  5000
1979
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5001
fileName
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5002
    ^ fileName
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5003
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5004
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5005
fileName:something
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5006
    fileName := something.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5007
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5008
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5009
fileNameLength
4175
95c1518f25cf #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4174
diff changeset
  5010
    fileNameLength isNil ifTrue:[
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  5011
	^ fileName size.
4175
95c1518f25cf #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4174
diff changeset
  5012
    ].
1979
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5013
    ^ fileNameLength
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5014
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5015
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5016
fileNameLength:something
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5017
    fileNameLength := something.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5018
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5019
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5020
generalPurposBitFlag
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5021
    ^ generalPurposBitFlag
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5022
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5023
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5024
generalPurposBitFlag:something
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5025
    generalPurposBitFlag := something.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5026
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5027
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5028
internalFileAttributes
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5029
    ^ internalFileAttributes
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5030
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5031
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5032
internalFileAttributes:something
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5033
    internalFileAttributes := something.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5034
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5035
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5036
lastModFileDate
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5037
    ^ lastModFileDate
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5038
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5039
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5040
lastModFileDate:something
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5041
    lastModFileDate := something.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5042
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5043
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5044
lastModFileTime
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5045
    ^ lastModFileTime
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5046
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5047
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5048
lastModFileTime:something
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5049
    lastModFileTime := something.
622
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  5050
!
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  5051
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  5052
next
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  5053
    "return the value of the instance variable 'next' (automatically generated)"
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  5054
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  5055
    ^ next
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  5056
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  5057
    "Created: / 29.3.1998 / 18:29:42 / cg"
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  5058
!
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  5059
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  5060
next:something
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  5061
    "set the value of the instance variable 'next' (automatically generated)"
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  5062
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  5063
    next := something.
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  5064
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  5065
    "Created: / 29.3.1998 / 18:29:42 / cg"
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  5066
!
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  5067
1979
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5068
relativeLocalHeaderOffset
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5069
    ^ relativeLocalHeaderOffset
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5070
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5071
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5072
relativeLocalHeaderOffset:something
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5073
    relativeLocalHeaderOffset := something.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5074
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5075
3173
014869903c5c class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3093
diff changeset
  5076
setModificationTimeAndDateToNow
014869903c5c class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3093
diff changeset
  5077
    |curTime curDate|
014869903c5c class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3093
diff changeset
  5078
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  5079
    curTime := Time now.
3173
014869903c5c class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3093
diff changeset
  5080
    curDate := Date today.
014869903c5c class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3093
diff changeset
  5081
    "/ data and time in msdos format
014869903c5c class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3093
diff changeset
  5082
    self lastModFileTime: (ZipArchive timeToZipFileTime:curTime).
014869903c5c class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3093
diff changeset
  5083
    self lastModFileDate: (ZipArchive dateToZipFileDate:curDate).
014869903c5c class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3093
diff changeset
  5084
!
014869903c5c class: ZipArchive
Claus Gittinger <cg@exept.de>
parents: 3093
diff changeset
  5085
1979
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5086
uncompressedSize
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5087
    ^ uncompressedSize
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5088
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5089
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5090
uncompressedSize:something
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5091
    uncompressedSize := something.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5092
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5093
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5094
versionMadeBy
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5095
    ^ versionMadeBy
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5096
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5097
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5098
versionMadeBy:something
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5099
    versionMadeBy := something.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5100
!
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5101
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5102
versionNeedToExtract
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5103
    ^ versionNeedToExtract
622
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  5104
!
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  5105
1979
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5106
versionNeedToExtract:something
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5107
    versionNeedToExtract := something.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5108
! !
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5109
2420
cd223e66f004 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2333
diff changeset
  5110
!ZipArchive::ZipMember methodsFor:'initialization'!
1979
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5111
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5112
default
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5113
    versionMadeBy := 20.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5114
    versionNeedToExtract := 20.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5115
    generalPurposBitFlag := 0.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5116
    compressionMethod := 0.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5117
    lastModFileTime := 0.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5118
    lastModFileDate := 0.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5119
    crc32 := 0.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5120
    compressedSize := 0.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5121
    uncompressedSize := 0.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5122
    extraFieldLength := 0.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5123
    fileCommentLength := 0.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5124
    diskNumberStart := 0.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5125
    internalFileAttributes := 0.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5126
    externalFileAttributes := 0.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5127
    relativeLocalHeaderOffset := 0.
4175
95c1518f25cf #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4174
diff changeset
  5128
    fileName := fileNameLength := nil.
1979
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5129
    extraField := nil.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5130
    fileComment := nil.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5131
    dataStart := 0.
6eff3f1f1b80 Support now writing of zip archives
ab
parents: 1839
diff changeset
  5132
    data := nil.
622
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  5133
! !
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  5134
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  5135
!ZipArchive::ZipMember methodsFor:'printing & storing'!
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  5136
2677
23f154688173 printing
Claus Gittinger <cg@exept.de>
parents: 2603
diff changeset
  5137
printOn:aStream
23f154688173 printing
Claus Gittinger <cg@exept.de>
parents: 2603
diff changeset
  5138
    aStream nextPutAll:'ZipMember('.
23f154688173 printing
Claus Gittinger <cg@exept.de>
parents: 2603
diff changeset
  5139
    aStream nextPutAll:(fileName ? '*nil*').
23f154688173 printing
Claus Gittinger <cg@exept.de>
parents: 2603
diff changeset
  5140
    aStream nextPutAll:')'
23f154688173 printing
Claus Gittinger <cg@exept.de>
parents: 2603
diff changeset
  5141
23f154688173 printing
Claus Gittinger <cg@exept.de>
parents: 2603
diff changeset
  5142
    "Modified: / 02-04-1998 / 15:10:08 / cg"
23f154688173 printing
Claus Gittinger <cg@exept.de>
parents: 2603
diff changeset
  5143
    "Created: / 25-11-2011 / 17:59:47 / cg"
622
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  5144
! !
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  5145
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  5146
!ZipArchive::ZipMember methodsFor:'queries'!
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  5147
2550
Claus Gittinger <cg@exept.de>
parents: 2524
diff changeset
  5148
isDirectory
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  5149
    ^
2855
568bf375326c Addec trailing slash behavior (enabled by default)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2832
diff changeset
  5150
    ((externalFileAttributes ? 0) bitTest:EXTERNALFILEATTRIBUTES_ISDIRECTORY)
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  5151
	or:[uncompressedSize == 0 and:[fileName last = $/]].
2550
Claus Gittinger <cg@exept.de>
parents: 2524
diff changeset
  5152
Claus Gittinger <cg@exept.de>
parents: 2524
diff changeset
  5153
    "Created: / 28-03-2011 / 19:19:26 / cg"
2855
568bf375326c Addec trailing slash behavior (enabled by default)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2832
diff changeset
  5154
    "Modified: / 19-11-2012 / 12:02:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
5366
8726eb01e744 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5359
diff changeset
  5155
!
8726eb01e744 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5359
diff changeset
  5156
8726eb01e744 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5359
diff changeset
  5157
skippedInJSONEncoding
8726eb01e744 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5359
diff changeset
  5158
    "return the inst-slots which are skipped when generating a jsonEncoding;
8726eb01e744 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5359
diff changeset
  5159
     (to skip the ones with default or irrelevant values.)"
8726eb01e744 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5359
diff changeset
  5160
8726eb01e744 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 5359
diff changeset
  5161
    ^ #(next)
622
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  5162
! !
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  5163
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5164
!ZipArchive::ZipMember methodsFor:'reading & writing'!
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5165
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5166
readCentralDirectoryEntryFrom:aStream
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5167
    "read a central directory entry"
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5168
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  5169
    versionMadeBy := aStream nextUnsignedInt16MSB:false.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  5170
    versionNeedToExtract := aStream nextUnsignedInt16MSB:false.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  5171
    generalPurposBitFlag := aStream nextUnsignedInt16MSB:false.
3727
2edee2bb50d2 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 3665
diff changeset
  5172
    compressionMethod := aStream nextUnsignedInt16MSB:false.
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  5173
    lastModFileTime := aStream nextUnsignedInt16MSB:false.
3727
2edee2bb50d2 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 3665
diff changeset
  5174
    lastModFileDate := aStream nextUnsignedInt16MSB:false.
2edee2bb50d2 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 3665
diff changeset
  5175
    crc32 := aStream nextUnsignedInt32MSB: false.
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  5176
    compressedSize := aStream nextUnsignedInt32MSB:false.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  5177
    uncompressedSize := aStream nextUnsignedInt32MSB:false.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  5178
    fileNameLength := aStream nextUnsignedInt16MSB:false.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  5179
    extraFieldLength := aStream nextUnsignedInt16MSB:false.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  5180
    fileCommentLength := aStream nextUnsignedInt16MSB:false.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  5181
    diskNumberStart := aStream nextUnsignedInt16MSB:false.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  5182
    internalFileAttributes := aStream nextUnsignedInt16MSB:false.
3727
2edee2bb50d2 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 3665
diff changeset
  5183
    externalFileAttributes := aStream nextUnsignedInt32MSB:false.
2edee2bb50d2 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 3665
diff changeset
  5184
    relativeLocalHeaderOffset := aStream nextUnsignedInt32MSB:false.
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5185
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5186
"/    (aStream position + fileNameLength) > endOfArchive ifTrue: [
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5187
"/        ^ ZipArchive zipFileFormatErrorSignal raiseRequestErrorString:' - central directory entry out of archive bounds'.
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5188
"/    ].
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5189
    fileName:= String new:fileNameLength.
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5190
    aStream nextBytes:fileNameLength into:fileName.
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5191
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5192
    extraFieldLength ~~ 0 ifTrue: [
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5193
"/        (aStream position + extraFieldLength) > endOfArchive ifTrue: [
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5194
"/            ^ ZipArchive zipFileFormatErrorSignal raiseRequestErrorString:' - central directory entry out of archive bounds'.
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5195
"/        ].
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  5196
	extraField := ByteArray new:extraFieldLength.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  5197
	aStream nextBytes:extraFieldLength into:extraField.
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5198
    ].
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5199
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5200
    fileCommentLength ~~ 0 ifTrue: [
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5201
"/        (aStream position + fileCommentLength) > endOfArchive ifTrue: [
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5202
"/            ^ ZipArchive zipFileFormatErrorSignal raiseRequestErrorString:' - central directory entry out of archive bounds'.
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5203
"/        ].
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  5204
	fileComment := String new:fileCommentLength.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  5205
	aStream nextBytes:fileCommentLength into:fileComment.
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5206
    ].
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5207
!
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5208
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5209
rewriteCrcAndSizeTo:aStream
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5210
    "Header has already been written - now rewrite CRC and sizes"
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5211
5263
350d509151c9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5238
diff changeset
  5212
    aStream position:absoluteLocalHeaderOffset+14.
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5213
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  5214
    aStream
5263
350d509151c9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5238
diff changeset
  5215
        nextPutInt32:crc32 MSB:false;
350d509151c9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5238
diff changeset
  5216
        nextPutInt32:compressedSize MSB:false;
350d509151c9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5238
diff changeset
  5217
        nextPutInt32:uncompressedSize MSB:false.
350d509151c9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5238
diff changeset
  5218
350d509151c9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5238
diff changeset
  5219
    "Modified: / 19-11-2019 / 14:54:21 / Stefan Vogel"
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5220
!
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5221
5263
350d509151c9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5238
diff changeset
  5222
writeTo:aStream position:absolutePosition startOfArchive:startOfArchive
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5223
    "represent myself on aStream"
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5224
5263
350d509151c9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5238
diff changeset
  5225
    absoluteLocalHeaderOffset := absolutePosition.
350d509151c9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5238
diff changeset
  5226
    relativeLocalHeaderOffset := absolutePosition - startOfArchive.
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5227
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  5228
    aStream
4766
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  5229
        nextPutInt32:C_LOCAL_HEADER_SIGNATURE MSB:false;
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  5230
        nextPutInt16:versionNeedToExtract MSB:false;
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  5231
        nextPutInt16:generalPurposBitFlag MSB:false;
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  5232
        nextPutInt16:compressionMethod MSB:false;
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  5233
        nextPutInt16:lastModFileTime MSB:false;
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  5234
        nextPutInt16:lastModFileDate MSB:false;
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  5235
        nextPutInt32:crc32 MSB:false;
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  5236
        nextPutInt32:compressedSize MSB:false;
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  5237
        nextPutInt32:uncompressedSize MSB:false;
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  5238
        nextPutInt16:self fileNameLength MSB:false;
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  5239
        nextPutInt16:extraFieldLength MSB:false;
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  5240
        nextPutAll:fileName.
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5241
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5242
    extraField notNil ifTrue: [
4766
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  5243
        self assert:(extraField size = extraFieldLength).
d6ca9de5d0a6 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4755
diff changeset
  5244
        aStream nextPutAll:extraField.
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5245
    ].
2511
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  5246
5263
350d509151c9 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 5238
diff changeset
  5247
    "Created: / 19-11-2019 / 14:52:22 / Stefan Vogel"
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5248
! !
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5249
4375
160854511e9d #FEATURE by mawalch
mawalch
parents: 4374
diff changeset
  5250
!ZipArchive::ZipReadStream methodsFor:'accessing'!
160854511e9d #FEATURE by mawalch
mawalch
parents: 4374
diff changeset
  5251
160854511e9d #FEATURE by mawalch
mawalch
parents: 4374
diff changeset
  5252
size
160854511e9d #FEATURE by mawalch
mawalch
parents: 4374
diff changeset
  5253
    ^ uncompressedDataSize
160854511e9d #FEATURE by mawalch
mawalch
parents: 4374
diff changeset
  5254
160854511e9d #FEATURE by mawalch
mawalch
parents: 4374
diff changeset
  5255
    "Created: / 30-05-2017 / 20:19:18 / mawalch"
160854511e9d #FEATURE by mawalch
mawalch
parents: 4374
diff changeset
  5256
! !
160854511e9d #FEATURE by mawalch
mawalch
parents: 4374
diff changeset
  5257
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5258
!ZipArchive::ZipReadStream methodsFor:'initialization'!
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5259
4677
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  5260
reset
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  5261
    "reset the stream to the initial position"
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  5262
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  5263
    readPosition := 0.
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  5264
    peek := nil.
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  5265
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  5266
    zipEntry compressionMethod == COMPRESSION_DEFLATED ifTrue:[
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  5267
        compressingStream notNil ifTrue:[
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  5268
            compressingStream close.
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  5269
        ].
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  5270
        compressingStream := ZipStream readOpenAsZipStreamOn:zipFileStream suppressHeaderAndChecksum:true.
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  5271
    ] ifFalse:[
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  5272
        compressingStream := zipFileStream.
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  5273
        compressingStream text.
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  5274
    ].
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  5275
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  5276
    "Created: / 11-06-2018 / 14:03:51 / Stefan Vogel"
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  5277
!
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  5278
4375
160854511e9d #FEATURE by mawalch
mawalch
parents: 4374
diff changeset
  5279
zipFileStream:something zipEntry:aZipEntry
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5280
    zipEntry := aZipEntry.
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5281
    zipFileStream := something.
3078
ee1225437bfe class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2996
diff changeset
  5282
    startDataPosition := zipFileStream position.
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5283
    uncompressedDataSize := zipEntry uncompressedSize.
4677
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  5284
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  5285
    self reset.
2511
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  5286
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  5287
    "Modified: / 19-11-2010 / 15:47:14 / cg"
4375
160854511e9d #FEATURE by mawalch
mawalch
parents: 4374
diff changeset
  5288
    "Modified (format): / 30-05-2017 / 20:17:24 / mawalch"
4677
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  5289
    "Modified: / 11-06-2018 / 14:06:58 / Stefan Vogel"
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5290
! !
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5291
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5292
!ZipArchive::ZipReadStream methodsFor:'queries'!
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5293
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5294
atEnd
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5295
    ^ peek isNil and:[readPosition >= uncompressedDataSize]
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5296
!
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5297
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5298
position
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5299
    ^ readPosition
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5300
! !
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5301
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5302
!ZipArchive::ZipReadStream methodsFor:'reading'!
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5303
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5304
next
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5305
    "read a character"
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5306
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5307
    |result|
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5308
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5309
    peek notNil ifTrue:[
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  5310
	result := peek.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  5311
	peek := nil.
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5312
    ] ifFalse:[
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  5313
	readPosition >= uncompressedDataSize ifTrue:[
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  5314
	    ^ self pastEndRead.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  5315
	].
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  5316
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  5317
	result := compressingStream next.
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5318
    ].
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5319
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5320
    readPosition := readPosition + 1.
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5321
    ^ result.
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5322
!
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5323
2180
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  5324
nextOrNil
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  5325
    "read a character"
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  5326
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  5327
    |result|
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  5328
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  5329
    peek notNil ifTrue:[
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  5330
	result := peek.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  5331
	peek := nil.
2180
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  5332
    ] ifFalse:[
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  5333
	readPosition >= uncompressedDataSize ifTrue:[
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  5334
	    ^ nil.
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  5335
	].
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  5336
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  5337
	result := compressingStream next.
2180
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  5338
    ].
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  5339
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  5340
    readPosition := readPosition + 1.
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  5341
    ^ result.
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  5342
!
ed0c36ab24b8 Fix ZipReadStream / ZipWriteStream handling
Stefan Vogel <sv@exept.de>
parents: 2176
diff changeset
  5343
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5344
peek
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5345
    "peek a character"
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5346
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5347
    peek notNil ifTrue:[
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  5348
	^ peek.
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5349
    ].
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5350
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5351
    readPosition >= uncompressedDataSize ifTrue:[
4414
42edc97b2323 bcopy -> memcpy
Claus Gittinger <cg@exept.de>
parents: 4377
diff changeset
  5352
	^ self pastEndRead.
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5353
    ].
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5354
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5355
    peek := compressingStream next.
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5356
    ^ peek.
5228
20c3ce687385 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5219
diff changeset
  5357
!
20c3ce687385 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5219
diff changeset
  5358
20c3ce687385 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5219
diff changeset
  5359
peekOrNil
20c3ce687385 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5219
diff changeset
  5360
    "peek a character"
20c3ce687385 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5219
diff changeset
  5361
20c3ce687385 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5219
diff changeset
  5362
    peek notNil ifTrue:[
20c3ce687385 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5219
diff changeset
  5363
        ^ peek.
20c3ce687385 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5219
diff changeset
  5364
    ].
20c3ce687385 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5219
diff changeset
  5365
20c3ce687385 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5219
diff changeset
  5366
    readPosition >= uncompressedDataSize ifTrue:[
20c3ce687385 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5219
diff changeset
  5367
        ^ nil.
20c3ce687385 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5219
diff changeset
  5368
    ].
20c3ce687385 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5219
diff changeset
  5369
20c3ce687385 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5219
diff changeset
  5370
    peek := compressingStream next.
20c3ce687385 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5219
diff changeset
  5371
    ^ peek.
20c3ce687385 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5219
diff changeset
  5372
20c3ce687385 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 5219
diff changeset
  5373
    "Created: / 22-10-2019 / 15:34:43 / Stefan Vogel"
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5374
! !
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5375
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5376
!ZipArchive::ZipWriteStream methodsFor:'closing'!
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5377
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5378
close
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5379
    "finalize the data"
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5380
4677
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  5381
    super close.
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5382
3078
ee1225437bfe class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2996
diff changeset
  5383
    zipEntry compressedSize:(zipFileStream position) - startDataPosition.
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5384
4374
57cd89038719 #DOCUMENTATION by mawalch
mawalch
parents: 4373
diff changeset
  5385
    "/ crc32 is always required (not as written in docu to be zero in case of uncompressed mode)
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5386
    zipEntry crc32:crc32.
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5387
    zipEntry uncompressedSize:uncompressedDataSize.
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5388
    zipEntry rewriteCrcAndSizeTo:zipFileStream.
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5389
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5390
    zipFileStream setToEnd.
4374
57cd89038719 #DOCUMENTATION by mawalch
mawalch
parents: 4373
diff changeset
  5391
57cd89038719 #DOCUMENTATION by mawalch
mawalch
parents: 4373
diff changeset
  5392
    "Modified (comment): / 30-05-2017 / 19:02:28 / mawalch"
4677
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  5393
    "Modified (format): / 11-06-2018 / 14:46:37 / Stefan Vogel"
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5394
! !
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5395
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5396
!ZipArchive::ZipWriteStream methodsFor:'initialization'!
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5397
4375
160854511e9d #FEATURE by mawalch
mawalch
parents: 4374
diff changeset
  5398
zipFileStream:something zipEntry:aZipEntry
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5399
    zipEntry := aZipEntry.
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5400
    zipFileStream := something.
3078
ee1225437bfe class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2996
diff changeset
  5401
    startDataPosition := zipFileStream position.
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5402
    crc32 := 0.
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5403
    uncompressedDataSize := 0.
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5404
2511
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  5405
    zipEntry compressionMethod == COMPRESSION_DEFLATED ifTrue:[
4677
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  5406
        compressingStream := ZipStream writeOpenAsZipStreamOn:zipFileStream suppressHeaderAndChecksum:true.
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5407
    ] ifFalse:[
4677
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  5408
        compressingStream := zipFileStream.
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5409
    ].
2511
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  5410
237dad762f68 refactored constants into separate SharedPool;
Claus Gittinger <cg@exept.de>
parents: 2492
diff changeset
  5411
    "Modified: / 19-11-2010 / 15:46:57 / cg"
4375
160854511e9d #FEATURE by mawalch
mawalch
parents: 4374
diff changeset
  5412
    "Modified (format): / 30-05-2017 / 20:20:41 / mawalch"
4677
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  5413
    "Modified (format): / 11-06-2018 / 14:45:55 / Stefan Vogel"
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5414
! !
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5415
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5416
!ZipArchive::ZipWriteStream methodsFor:'queries'!
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5417
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5418
isReadable
3780
c652fe7d55bc #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 3727
diff changeset
  5419
    "return true, if reading is supported by the receiver.
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5420
     This has to be redefined in concrete subclasses."
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5421
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5422
    ^ false
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5423
!
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5424
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5425
isWritable
3780
c652fe7d55bc #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 3727
diff changeset
  5426
    "return true, if writing is supported by the receiver.
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5427
     This has to be redefined in concrete subclasses."
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5428
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5429
    ^ true
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5430
! !
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5431
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5432
!ZipArchive::ZipWriteStream methodsFor:'reading'!
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5433
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5434
contents
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5435
    "return the entire contents of the stream.
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5436
     For a readStream, that is the rest (i.e. upToEnd),
4677
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  5437
     for a writeStream, that is the collected data."
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5438
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5439
    self shouldNotImplement
4677
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  5440
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  5441
    "Modified (comment): / 11-06-2018 / 14:47:59 / Stefan Vogel"
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5442
!
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5443
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5444
next
4677
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  5445
    "return the next element of the stream"
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5446
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5447
    self shouldNotImplement
4677
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  5448
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  5449
    "Modified (comment): / 11-06-2018 / 14:48:24 / Stefan Vogel"
4232
fa6a60e184bd #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4221
diff changeset
  5450
!
fa6a60e184bd #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4221
diff changeset
  5451
fa6a60e184bd #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4221
diff changeset
  5452
peek
4677
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  5453
    "return the next element of the stream"
4232
fa6a60e184bd #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4221
diff changeset
  5454
fa6a60e184bd #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 4221
diff changeset
  5455
    self shouldNotImplement
4677
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  5456
a73ebe9d10cb #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4633
diff changeset
  5457
    "Modified (comment): / 11-06-2018 / 14:48:32 / Stefan Vogel"
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5458
! !
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5459
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5460
!ZipArchive::ZipWriteStream methodsFor:'writing'!
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5461
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5462
contents:aCollection
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5463
    |size|
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5464
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5465
    size := aCollection size.
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5466
    uncompressedDataSize := uncompressedDataSize + size.
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5467
    crc32 := ZipStream crc32BytesIn:aCollection from:1 to:size crc:crc32.
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5468
    compressingStream contents:aCollection
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5469
!
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5470
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5471
flush
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5472
    compressingStream flush
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5473
!
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5474
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5475
nextPut:anObject
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5476
    "put the argument, anObject onto the receiver
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5477
     - we do not know here how to do it, it must be redefined in subclass"
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5478
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5479
    uncompressedDataSize := uncompressedDataSize + 1.
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5480
    crc32 := ZipStream crc32Add:anObject crc:crc32.
5167
cf84949dd61b #OTHER by exept
Claus Gittinger <cg@exept.de>
parents: 5053
diff changeset
  5481
    compressingStream nextPut:anObject.
cf84949dd61b #OTHER by exept
Claus Gittinger <cg@exept.de>
parents: 5053
diff changeset
  5482
    ^ anObject
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5483
!
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5484
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5485
nextPutAll:aCollection
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5486
    |size|
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5487
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5488
    size := aCollection size.
5205
c56119676a9c #TUNING by exept
Claus Gittinger <cg@exept.de>
parents: 5167
diff changeset
  5489
    size == 0 ifFalse:[
c56119676a9c #TUNING by exept
Claus Gittinger <cg@exept.de>
parents: 5167
diff changeset
  5490
        uncompressedDataSize := uncompressedDataSize + size.
c56119676a9c #TUNING by exept
Claus Gittinger <cg@exept.de>
parents: 5167
diff changeset
  5491
        crc32 := ZipStream crc32BytesIn:aCollection from:1 to:size crc:crc32.
c56119676a9c #TUNING by exept
Claus Gittinger <cg@exept.de>
parents: 5167
diff changeset
  5492
        compressingStream nextPutAll:aCollection
2176
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5493
    ].
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5494
! !
141e6b175455 Add ZipReadStream and ZipWriteStream classes.
Stefan Vogel <sv@exept.de>
parents: 2173
diff changeset
  5495
1982
dca43cec8a2b add finalize for close by garbage collector extend interface for
ab
parents: 1981
diff changeset
  5496
!ZipArchive class methodsFor:'documentation'!
dca43cec8a2b add finalize for close by garbage collector extend interface for
ab
parents: 1981
diff changeset
  5497
dca43cec8a2b add finalize for close by garbage collector extend interface for
ab
parents: 1981
diff changeset
  5498
version
3665
3e5128566dc2 #UI_ENHANCEMENT
Claus Gittinger <cg@exept.de>
parents: 3529
diff changeset
  5499
    ^ '$Header$'
2313
28eedaae36f5 squeak compatibility
Claus Gittinger <cg@exept.de>
parents: 2180
diff changeset
  5500
!
28eedaae36f5 squeak compatibility
Claus Gittinger <cg@exept.de>
parents: 2180
diff changeset
  5501
28eedaae36f5 squeak compatibility
Claus Gittinger <cg@exept.de>
parents: 2180
diff changeset
  5502
version_CVS
3665
3e5128566dc2 #UI_ENHANCEMENT
Claus Gittinger <cg@exept.de>
parents: 3529
diff changeset
  5503
    ^ '$Header$'
1982
dca43cec8a2b add finalize for close by garbage collector extend interface for
ab
parents: 1981
diff changeset
  5504
! !
1129
8e0da7fb22fb Use #raiseErrorString: instead of #raiseWith:
Stefan Vogel <sv@exept.de>
parents: 970
diff changeset
  5505
2895
b0b2598f105c class: ZipArchive
Stefan Vogel <sv@exept.de>
parents: 2893
diff changeset
  5506
622
6d06b9f7d7ed *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  5507
ZipArchive initialize!