which included commits to RCS files with non-trunk default branches. git-svn-id: svn://10.65.10.50/trunk@5403 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			677 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			677 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
| The following are the known types of zipfile extra fields as of this
 | |
| writing.  Extra fields are documented in PKWARE's appnote.txt and are
 | |
| intended to allow for backward- and forward-compatible extensions to
 | |
| the zipfile format.  Multiple extra-field types may be chained together,
 | |
| provided that the total length of all extra-field data is less than 64KB.
 | |
| (In fact, PKWARE requires that the total length of the entire file header,
 | |
| including timestamp, file attributes, filename, comment, extra field, etc.,
 | |
| be no more than 64KB.)
 | |
| 
 | |
| Each extra-field type (or subblock) must contain a four-byte header con-
 | |
| sisting of a two-byte header ID and a two-byte length (little-endian) for
 | |
| the remaining data in the subblock.  If there are additional subblocks
 | |
| within the extra field, the header for each one will appear immediately 
 | |
| following the data for the previous subblock (i.e., with no padding for
 | |
| alignment).
 | |
| 
 | |
| All integer fields in the descriptions below are in little-endian (Intel)
 | |
| format unless otherwise specified.  Note that "Short" means two bytes and
 | |
| "Long" means four bytes, regardless of their native sizes.
 | |
| 
 | |
| Greg Roelofs, 970531
 | |
| 
 | |
| 			-------------------------
 | |
| 
 | |
| The current list of Header IDs is as follows (0-31 are reserved by PKWARE):
 | |
| 
 | |
| 	  0x0007        AV Info
 | |
| 	  0x0009        OS/2 extended attributes
 | |
| 	  0x000c        PKWARE VAX/VMS
 | |
| 	  0x000d        reserved for Unix
 | |
| 	  0x07c8        Info-ZIP Macintosh
 | |
| 	  0x2605        ZipIt Macintosh
 | |
| 	  0x4341        Acorn/SparkFS (David Pilling)
 | |
| 	  0x4453	Windows NT security descriptor (binary ACL)
 | |
| 	  0x4704        VM/CMS
 | |
| 	  0x470f        MVS
 | |
| 	  0x4b46        FWKCS MD5 (third party, see below)
 | |
| 	  0x4c41        OS/2 access control list (text ACL)
 | |
| 	  0x4d49        Info-ZIP VMS (VAX or Alpha)
 | |
| 	  0x5356        AOS/VS (binary ACL)
 | |
| 	  0x5455        extended timestamp
 | |
| 	  0x5855        Info-ZIP Unix (original; also OS/2, NT, etc.)
 | |
| 	  0x6542        BeOS (BeBox, PowerMac, etc.)
 | |
| 	  0x756e        ASi Unix
 | |
| 	  0x7855        Info-ZIP Unix (new)
 | |
| 	  0xfb4a        SMS/QDOS
 | |
| 
 | |
| The following are detailed descriptions of the known extra-field block types:
 | |
| 
 | |
| 	 -OS/2 Extended Attributes Extra Field:
 | |
| 	  ====================================
 | |
| 
 | |
| 	  The following is the layout of the OS/2 extended attributes "extra"
 | |
| 	  block.  (Last Revision 960922)
 | |
| 
 | |
| 	  Note: all fields stored in Intel low-byte/high-byte order.
 | |
| 
 | |
| 	  Local-header version:
 | |
| 
 | |
| 	  Value		Size		Description
 | |
| 	  -----		----		-----------
 | |
|   (OS/2)  0x0009	Short		tag for this extra block type
 | |
| 	  TSize		Short		total data size for this block
 | |
| 	  BSize		Long		uncompressed EA data size
 | |
| 	  CType		Short		compression type
 | |
| 	  EACRC		Long		CRC value for uncompressed EA data
 | |
| 	  (var.)	variable	compressed EA data
 | |
| 
 | |
| 	  Central-header version:
 | |
| 
 | |
| 	  Value		Size		Description
 | |
| 	  -----		----		-----------
 | |
|   (OS/2)  0x0009	Short		tag for this extra block type
 | |
| 	  TSize		Short		total data size for this block
 | |
| 	  BSize		Long		size of uncompressed local EA data
 | |
| 
 | |
| 	  The value of CType is interpreted according to the "compression
 | |
| 	  method" section above; i.e., 0 for stored, 8 for deflated, etc.
 | |
| 
 | |
| 	  The OS/2 extended attribute structure (FEA2LIST) is compressed and
 | |
| 	  then stored in its entirety within this structure.  There will only
 | |
| 	  ever be one block of data in the variable-length field.
 | |
| 
 | |
| 
 | |
| 	 -OS/2 Access Control List Extra Field:
 | |
| 	  ====================================
 | |
| 
 | |
| 	  The following is the layout of the OS/2 ACL extra block.
 | |
| 	  (Last Revision 960922)
 | |
| 
 | |
| 	  Local-header version:
 | |
| 
 | |
| 	  Value		Size		Description
 | |
| 	  -----		----		-----------
 | |
|   (ACL)   0x4c41	Short		tag for this extra block type
 | |
| 	  TSize		Short		total data size for this block
 | |
| 	  BSize		Long		uncompressed ACL data size
 | |
| 	  CType		Short		compression type
 | |
| 	  EACRC		Long		CRC value for uncompressed ACL data
 | |
| 	  (var.)	variable	compressed ACL data
 | |
| 
 | |
| 	  Central-header version:
 | |
| 
 | |
| 	  Value		Size		Description
 | |
| 	  -----		----		-----------
 | |
|   (ACL)   0x4c41	Short		tag for this extra block type
 | |
| 	  TSize		Short		total data size for this block
 | |
| 	  BSize		Long		size of uncompressed local ACL data
 | |
| 
 | |
| 	  The value of CType is interpreted according to the "compression
 | |
| 	  method" section above; i.e., 0 for stored, 8 for deflated, etc.
 | |
| 
 | |
| 	  The uncompressed ACL data consist of a text header of the form
 | |
| 	  "ACL1:%hX,%hd\n", where the first field is the OS/2 ACCINFO acc_attr
 | |
| 	  member and the second is acc_count, followed by acc_count strings
 | |
| 	  of the form "%s,%hx\n", where the first field is acl_ugname (user
 | |
| 	  group name) and the second acl_access.  This block type will be
 | |
| 	  extended for other operating systems as needed.
 | |
| 
 | |
| 
 | |
| 	 -Windows NT Security Descriptor Extra Field:
 | |
| 	  ==========================================
 | |
| 
 | |
| 	  The following is the layout of the NT Security Descriptor (another
 | |
| 	  type of ACL) extra block.  (Last Revision 960922)
 | |
| 
 | |
| 	  Local-header version:
 | |
| 
 | |
| 	  Value		Size		Description
 | |
| 	  -----		----		-----------
 | |
|   (SD)    0x4453	Short		tag for this extra block type
 | |
| 	  TSize		Short		total data size for this block
 | |
| 	  BSize		Long		uncompressed SD data size
 | |
| 	  Version	Byte		version of uncompressed SD data format
 | |
| 	  CType		Short		compression type
 | |
| 	  EACRC		Long		CRC value for uncompressed SD data
 | |
| 	  (var.)	variable	compressed SD data
 | |
| 
 | |
| 	  Central-header version:
 | |
| 
 | |
| 	  Value		Size		Description
 | |
| 	  -----		----		-----------
 | |
|   (SD)    0x4453	Short		tag for this extra block type
 | |
| 	  TSize		Short		total data size for this block
 | |
| 	  BSize		Long		size of uncompressed local SD data
 | |
| 	  Version	Byte		version of uncompressed SD data format
 | |
| 
 | |
| 	  The value of CType is interpreted according to the "compression
 | |
| 	  method" section above; i.e., 0 for stored, 8 for deflated, etc.
 | |
| 	  Version specifies how the compressed data are to be interpreted
 | |
| 	  and allows for future expansion of this extra field type.  Currently
 | |
| 	  only version 0 is defined.
 | |
| 
 | |
| 	  For version 0, the compressed data are to be interpreted as a single
 | |
| 	  valid Windows NT SECURITY_DESCRIPTOR data structure, in self-relative
 | |
| 	  format.
 | |
| 
 | |
| 
 | |
| 	 -PKWARE VAX/VMS Extra Field:
 | |
| 	  ==========================
 | |
| 
 | |
| 	  The following is the layout of PKWARE's VAX/VMS attributes "extra"
 | |
| 	  block.  (Last Revision 12/17/91)
 | |
| 
 | |
| 	  Note: all fields stored in Intel low-byte/high-byte order.
 | |
| 
 | |
| 	  Value		Size		Description
 | |
| 	  -----		----		-----------
 | |
|   (VMS)   0x000c        Short           Tag for this "extra" block type
 | |
| 	  TSize         Short           Total Data Size for this block
 | |
| 	  CRC           Long            32-bit CRC for remainder of the block
 | |
| 	  Tag1          Short           VMS attribute tag value #1
 | |
| 	  Size1         Short           Size of attribute #1, in bytes
 | |
| 	  (var.)        Size1           Attribute #1 data
 | |
| 	  .
 | |
| 	  .
 | |
| 	  .
 | |
| 	  TagN          Short           VMS attribute tage value #N
 | |
| 	  SizeN         Short           Size of attribute #N, in bytes
 | |
| 	  (var.)        SizeN           Attribute #N data
 | |
| 
 | |
| 	  Rules:
 | |
| 
 | |
| 	  1. There will be one or more of attributes present, which will
 | |
| 	     each be preceded by the above TagX & SizeX values.  These
 | |
| 	     values are identical to the ATR$C_XXXX and ATR$S_XXXX constants
 | |
| 	     which are defined in ATR.H under VMS C.  Neither of these values
 | |
| 	     will ever be zero.
 | |
| 
 | |
| 	  2. No word alignment or padding is performed.
 | |
| 
 | |
| 	  3. A well-behaved PKZIP/VMS program should never produce more than
 | |
| 	     one sub-block with the same TagX value.  Also, there will never
 | |
| 	     be more than one "extra" block of type 0x000c in a particular
 | |
| 	     directory record.
 | |
| 
 | |
| 
 | |
| 	 -Info-ZIP VMS Extra Field:
 | |
| 	  ========================
 | |
| 
 | |
| 	  The following is the layout of Info-ZIP's VMS attributes extra
 | |
| 	  block for VAX or Alpha AXP.  The local-header and central-header
 | |
| 	  versions are identical.  (Last Revision 960922)
 | |
| 
 | |
| 	  Value		Size		Description
 | |
| 	  -----		----		-----------
 | |
|   (VMS2)  0x4d49	Short		tag for this extra block type
 | |
| 	  TSize		Short		total data size for this block
 | |
| 	  ID		Long		block ID
 | |
| 	  Flags		Short		info bytes
 | |
| 	  BSize		Short		uncompressed block size
 | |
| 	  Reserved	Long		(reserved)
 | |
| 	  (var.)	variable	compressed VMS file-attributes block
 | |
| 
 | |
| 	  The block ID is one of the following unterminated strings:
 | |
| 
 | |
| 		"VFAB"		struct FAB
 | |
| 		"VALL"		struct XABALL
 | |
| 		"VFHC"		struct XABFHC
 | |
| 		"VDAT"		struct XABDAT
 | |
| 		"VRDT"		struct XABRDT
 | |
| 		"VPRO"		struct XABPRO
 | |
| 		"VKEY"		struct XABKEY
 | |
| 		"VMSV"		version (e.g., "V6.1"; truncated at hyphen)
 | |
| 		"VNAM"		reserved
 | |
| 
 | |
| 	  The lower three bits of Flags indicate the compression method.  The
 | |
| 	  currently defined methods are:
 | |
| 
 | |
| 		0	stored (not compressed)
 | |
| 		1	simple "RLE"
 | |
| 		2	deflated
 | |
| 
 | |
| 	  The "RLE" method simply replaces zero-valued bytes with zero-valued
 | |
| 	  bits and non-zero-valued bytes with a "1" bit followed by the byte
 | |
| 	  value.
 | |
| 
 | |
| 	  The variable-length compressed data contains only the data corre-
 | |
| 	  sponding to the indicated structure or string.  Typically multiple
 | |
| 	  VMS2 extra fields are present (each with a unique block type).
 | |
| 
 | |
| 
 | |
| 	 -Info-ZIP Macintosh Extra Field:
 | |
| 	  ==============================
 | |
| 
 | |
| 	  The following is the layout of the (old) Info-ZIP resource-fork extra
 | |
| 	  block for Macintosh.  The local-header and central-header versions
 | |
| 	  are identical.  (Last Revision 960922)
 | |
| 
 | |
| 	  Value		Size		Description
 | |
| 	  -----		----		-----------
 | |
|   (Mac)   0x07c8	Short		tag for this extra block type
 | |
| 	  TSize		Short		total data size for this block
 | |
| 	  "JLEE"	beLong		extra-field signature
 | |
| 	  FInfo		16 bytes	Macintosh FInfo structure
 | |
| 	  CrDat		beLong		HParamBlockRec fileParam.ioFlCrDat
 | |
| 	  MdDat		beLong		HParamBlockRec fileParam.ioFlMdDat
 | |
| 	  Flags		beLong		info bits
 | |
| 	  DirID		beLong		HParamBlockRec fileParam.ioDirID
 | |
| 	  VolName	28 bytes	volume name (optional)
 | |
| 
 | |
| 	  All fields but the first two are in native Macintosh format
 | |
| 	  (big-endian Motorola order, not little-endian Intel).  The least
 | |
| 	  significant bit of Flags is 1 if the file is a data fork, 0 other-
 | |
| 	  wise.  In addition, if this extra field is present, the filename
 | |
| 	  has an extra 'd' or 'r' appended to indicate data fork or resource
 | |
| 	  fork.  The 28-byte VolName field may be omitted.
 | |
| 
 | |
| 
 | |
| 	 -ZipIt Macintosh Extra Field:
 | |
| 	  ===========================
 | |
| 
 | |
| 	  The following is the layout of the ZipIt extra block for Macintosh.
 | |
| 	  The local-header and central-header versions are identical.
 | |
| 	  (Last Revision 970130)
 | |
| 
 | |
| 	  Value		Size		Description
 | |
| 	  -----		----		-----------
 | |
|   (Mac2)  0x2605	Short		tag for this extra block type
 | |
| 	  TSize		Short		total data size for this block
 | |
| 	  "ZPIT"	beLong		extra-field signature
 | |
| 	  FnLen		Byte		length of FileName
 | |
| 	  FileName	variable	full Macintosh filename
 | |
| 	  FileType	beLong		four-byte Mac file type string
 | |
| 	  Creator	beLong		four-byte Mac creator string
 | |
| 
 | |
| 
 | |
| 	 -Acorn SparkFS Extra Field:
 | |
| 	  =========================
 | |
| 
 | |
| 	  The following is the layout of David Pilling's SparkFS extra block
 | |
| 	  for Acorn RISC OS.  The local-header and central-header versions are
 | |
| 	  identical.  (Last Revision 960922)
 | |
| 
 | |
| 	  Value		Size		Description
 | |
| 	  -----		----		-----------
 | |
|   (Acorn) 0x4341	Short		tag for this extra block type
 | |
| 	  TSize		Short		total data size for this block
 | |
| 	  "ARC0"	Long		extra-field signature
 | |
| 	  LoadAddr	Long		load address or file type
 | |
| 	  ExecAddr	Long		exec address
 | |
| 	  Attr		Long		file permissions
 | |
| 	  Zero		Long		reserved; always zero
 | |
| 
 | |
| 	  The following bits of Attr are associated with the given file
 | |
| 	  permissions:
 | |
| 
 | |
| 		bit 0		user-writable ('W')
 | |
| 		bit 1		user-readable ('R')
 | |
| 		bit 2		reserved
 | |
| 		bit 3		locked ('L')
 | |
| 		bit 4		publicly writable ('w')
 | |
| 		bit 5		publicly readable ('r')
 | |
| 		bit 6		reserved
 | |
| 		bit 7		reserved
 | |
| 
 | |
| 
 | |
| 	 -VM/CMS Extra Field:
 | |
| 	  ==================
 | |
| 
 | |
| 	  The following is the layout of the file-attributes extra block for
 | |
| 	  VM/CMS.  The local-header and central-header versions are
 | |
| 	  identical.  (Last Revision 960922)
 | |
| 
 | |
| 	  Value		Size		Description
 | |
| 	  -----		----		-----------
 | |
|  (VM/CMS) 0x4704	Short		tag for this extra block type
 | |
| 	  TSize		Short		total data size for this block
 | |
| 	  flData	variable	file attributes data
 | |
| 
 | |
| 	  flData is an uncompressed fldata_t struct.
 | |
| 
 | |
| 
 | |
| 	 -MVS Extra Field:
 | |
| 	  ===============
 | |
| 
 | |
| 	  The following is the layout of the file-attributes extra block for
 | |
| 	  MVS.  The local-header and central-header versions are identical.
 | |
| 	  (Last Revision 960922)
 | |
| 
 | |
| 	  Value		Size		Description
 | |
| 	  -----		----		-----------
 | |
|   (MVS)   0x470f	Short		tag for this extra block type
 | |
| 	  TSize		Short		total data size for this block
 | |
| 	  flData	variable	file attributes data
 | |
| 
 | |
| 	  flData is an uncompressed fldata_t struct.
 | |
| 
 | |
| 
 | |
| 	 -Extended Timestamp Extra Field:
 | |
| 	  ==============================
 | |
| 
 | |
| 	  The following is the layout of the extended-timestamp extra block.
 | |
| 	  (Last Revision 970118)
 | |
| 
 | |
| 	  Local-header version:
 | |
| 
 | |
| 	  Value		Size		Description
 | |
| 	  -----		----		-----------
 | |
|   (time)  0x5455	Short		tag for this extra block type
 | |
| 	  TSize		Short		total data size for this block
 | |
| 	  Flags		Byte		info bits
 | |
| 	  (ModTime)	Long		time of last modification (UTC/GMT)
 | |
| 	  (AcTime)	Long		time of last access (UTC/GMT)
 | |
| 	  (CrTime)	Long		time of original creation (UTC/GMT)
 | |
| 
 | |
| 	  Central-header version:
 | |
| 
 | |
| 	  Value		Size		Description
 | |
| 	  -----		----		-----------
 | |
|   (time)  0x5455	Short		tag for this extra block type
 | |
| 	  TSize		Short		total data size for this block
 | |
| 	  Flags		Byte		info bits (refers to local header!)
 | |
| 	  (ModTime)	Long		time of last modification (UTC/GMT)
 | |
| 
 | |
| 	  The central-header extra field contains the modification time only,
 | |
| 	  or no timestamp at all.  TSize is used to flag its presence or
 | |
| 	  absence.  But note:
 | |
| 
 | |
| 	      If "Flags" indicates that Modtime is present in the local header
 | |
| 	      field, it MUST be present in the central header field, too!
 | |
| 	      This correspondence is required because the modification time
 | |
| 	      value may be used to support trans-timezone freshening and
 | |
| 	      updating operations with zip archives.
 | |
| 
 | |
| 	  The time values are in standard Unix signed-long format, indicating
 | |
| 	  the number of seconds since 1 January 1970 00:00:00.  The times
 | |
| 	  are relative to Coordinated Universal Time (UTC), also sometimes
 | |
| 	  referred to as Greenwich Mean Time (GMT).  To convert to local time,
 | |
| 	  the software must know the local timezone offset from UTC/GMT.
 | |
| 
 | |
| 	  The lower three bits of Flags in both headers indicate which time-
 | |
| 	  stamps are present in the LOCAL extra field:
 | |
| 
 | |
| 		bit 0		if set, modification time is present
 | |
| 		bit 1		if set, access time is present
 | |
| 		bit 2		if set, creation time is present
 | |
| 		bits 3-7	reserved for additional timestamps; not set
 | |
| 
 | |
| 	  Those times that are present will appear in the order indicated, but
 | |
| 	  any combination of times may be omitted.  (Creation time may be
 | |
| 	  present without access time, for example.)  TSize should equal
 | |
| 	  (1 + 4*(number of set bits in Flags)), as the block is currently
 | |
| 	  defined.  Other timestamps may be added in the future.
 | |
| 
 | |
| 
 | |
| 	 -Info-ZIP Unix Extra Field (type 1):
 | |
| 	  ==================================
 | |
| 
 | |
| 	  The following is the layout of the old Info-ZIP extra block for
 | |
| 	  Unix.  It has been replaced by the extended-timestamp extra block
 | |
| 	  (0x5455) and the Unix type 2 extra block (0x7855).
 | |
| 	  (Last Revision 970118)
 | |
| 
 | |
| 	  Local-header version:
 | |
| 
 | |
| 	  Value		Size		Description
 | |
| 	  -----		----		-----------
 | |
|   (Unix1) 0x5855	Short		tag for this extra block type
 | |
| 	  TSize		Short		total data size for this block
 | |
| 	  ModTime	Long		time of last modification (UTC/GMT)
 | |
| 	  AcTime	Long		time of last access (UTC/GMT)
 | |
| 	  UID		Short		Unix user ID
 | |
| 	  GID		Short		Unix group ID
 | |
| 
 | |
| 	  Central-header version:
 | |
| 
 | |
| 	  Value		Size		Description
 | |
| 	  -----		----		-----------
 | |
|   (Unix1) 0x5855	Short		tag for this extra block type
 | |
| 	  TSize		Short		total data size for this block
 | |
| 	  ModTime	Long		time of last modification (GMT/UTC)
 | |
| 	  AcTime	Long		time of last access (GMT/UTC)
 | |
| 
 | |
| 	  The file modification and access times are in standard Unix signed-
 | |
| 	  long format, indicating the number of seconds since 1 January 1970
 | |
| 	  00:00:00.  The times are relative to Coordinated Universal Time
 | |
| 	  (UTC), also sometimes referred to as Greenwich Mean Time (GMT).  To
 | |
| 	  convert to local time, the software must know the local timezone
 | |
| 	  offset from UTC/GMT.  The modification time may be used by non-Unix
 | |
| 	  systems to support inter-timezone freshening and updating of zip
 | |
| 	  archives.
 | |
| 
 | |
| 	  The local-header extra block may optionally contain UID and GID
 | |
| 	  info for the file.  The local-header TSize value is the only
 | |
| 	  indication of this.  Note that Unix UIDs and GIDs are usually
 | |
| 	  specific to a particular machine, and they generally require root
 | |
| 	  access to restore.
 | |
| 
 | |
| 	  This extra field type is obsolete, but it has been in use since
 | |
| 	  mid-1994.  Therefore future archiving software should continue to
 | |
| 	  support it.  Some guidelines:
 | |
| 
 | |
| 	      An archive member should either contain the old "Unix1"
 | |
| 	      extra field block or the new extra field types "time" and/or
 | |
| 	      "Unix2".
 | |
| 
 | |
| 	      If both the old "Unix1" block type and one or both of the new
 | |
| 	      block types "time" and "Unix2" are found, the "Unix1" block
 | |
| 	      should be considered invalid and ignored.
 | |
| 
 | |
| 	      Unarchiving software should recognize both old and new extra
 | |
| 	      field block types, but the info from new types overrides the
 | |
| 	      old "Unix1" field.
 | |
| 
 | |
| 	      Archiving software should recognize "Unix1" extra fields for
 | |
| 	      timestamp comparison but never create it for updated, freshened
 | |
| 	      or new archive members.  When copying existing members to a new
 | |
| 	      archive, any "Unix1" extra field blocks should be converted to
 | |
| 	      the new "time" and/or "Unix2" types.
 | |
| 
 | |
| 
 | |
| 	 -Info-ZIP Unix Extra Field (type 2):
 | |
| 	  ==================================
 | |
| 
 | |
| 	  The following is the layout of the new Info-ZIP extra block for
 | |
| 	  Unix.  (Last Revision 960922)
 | |
| 
 | |
| 	  Local-header version:
 | |
| 
 | |
| 	  Value		Size		Description
 | |
| 	  -----		----		-----------
 | |
|   (Unix2) 0x7855	Short		tag for this extra block type
 | |
| 	  TSize		Short		total data size for this block
 | |
| 	  UID		Short		Unix user ID
 | |
| 	  GID		Short		Unix group ID
 | |
| 
 | |
| 	  Central-header version:
 | |
| 
 | |
| 	  Value		Size		Description
 | |
| 	  -----		----		-----------
 | |
|   (Unix2) 0x7855	Short		tag for this extra block type
 | |
| 	  TSize		Short		total data size for this block
 | |
| 
 | |
| 	  The data size of the central-header version is zero; it is used
 | |
| 	  solely as a flag that UID/GID info is present in the local-header
 | |
| 	  extra field.  If additional fields are ever added to the local
 | |
| 	  version, the central version may be extended to indicate this.
 | |
| 
 | |
| 	  Note that Unix UIDs and GIDs are usually specific to a particular
 | |
| 	  machine, and they generally require root access to restore.
 | |
| 
 | |
| 
 | |
| 	 -ASi Unix Extra Field:
 | |
| 	  ====================
 | |
| 
 | |
| 	  The following is the layout of the ASi extra block for Unix.  The
 | |
| 	  local-header and central-header versions are identical.
 | |
| 	  (Last Revision 960916)
 | |
| 
 | |
| 	  Value		Size		Description
 | |
| 	  -----		----		-----------
 | |
|   (Unix3) 0x756e	Short		tag for this extra block type
 | |
| 	  TSize		Short		total data size for this block
 | |
| 	  CRC		Long		CRC-32 of the remaining data
 | |
| 	  Mode		Short		file permissions
 | |
| 	  SizDev	Long		symlink'd size OR major/minor dev num
 | |
| 	  UID		Short		user ID
 | |
| 	  GID		Short		group ID
 | |
| 	  (var.)	variable	symbolic link filename
 | |
| 
 | |
| 	  Mode is the standard Unix st_mode field from struct stat, containing
 | |
| 	  user/group/other permissions, setuid/setgid and symlink info, etc.
 | |
| 
 | |
| 	  If Mode indicates that this file is a symbolic link, SizDev is the
 | |
| 	  size of the file to which the link points.  Otherwise, if the file
 | |
| 	  is a device, SizDev contains the standard Unix st_rdev field from
 | |
| 	  struct stat (includes the major and minor numbers of the device).
 | |
| 	  SizDev is undefined in other cases.
 | |
| 
 | |
| 	  If Mode indicates that the file is a symbolic link, the final field
 | |
| 	  will be the name of the file to which the link points.  The file-
 | |
| 	  name length can be inferred from TSize.
 | |
| 
 | |
| 	  [Note that TSize may incorrectly refer to the data size not counting
 | |
| 	   the CRC; i.e., it may be four bytes too small.]
 | |
| 
 | |
| 
 | |
| 	 -BeOS Extra Field:
 | |
| 	  ================
 | |
| 
 | |
| 	  The following is the layout of the file-attributes extra block for
 | |
| 	  BeOS.  (Last Revision 970531)
 | |
| 
 | |
| 	  Local-header version:
 | |
| 
 | |
| 	  Value		Size		Description
 | |
| 	  -----		----		-----------
 | |
|   (BeOS)  0x6542	Short		tag for this extra block type
 | |
| 	  TSize		Short		total data size for this block
 | |
| 	  BSize		Long		uncompressed file attribute data size
 | |
| 	  Flags		Byte		info bits
 | |
| 	  (CType)	Short		compression type
 | |
| 	  (CRC)		Long		CRC value for uncompressed file attribs
 | |
| 	  Attribs	variable	file attribute data
 | |
| 
 | |
| 	  Central-header version:
 | |
| 
 | |
| 	  Value		Size		Description
 | |
| 	  -----		----		-----------
 | |
|   (BeOS)  0x6542	Short		tag for this extra block type
 | |
| 	  TSize		Short		total data size for this block
 | |
| 	  BSize		Long		size of uncompressed local EF block data
 | |
| 	  Flags		Byte		info bits
 | |
| 
 | |
| 	  The least significant bit of Flags in both headers indicates whether
 | |
| 	  the LOCAL extra field is uncompressed (and therefore whether CType
 | |
| 	  and CRC are omitted):
 | |
| 
 | |
| 		bit 0		if set, Attribs is uncompressed (no CType, CRC)
 | |
| 		bits 1-7	reserved; if set, assume error or unknown data
 | |
| 
 | |
| 	  Currently the only supported compression types are deflated (type 8)
 | |
| 	  and stored (type 0); the latter is not used by Info-ZIP's Zip but is
 | |
| 	  supported by UnZip.
 | |
| 
 | |
| 	  Attribs is a BeOS-specific block of data in big-endian format with
 | |
| 	  the following structure (if compressed, uncompress it first):
 | |
| 
 | |
| 	      Value	Size		Description
 | |
| 	      -----	----		-----------
 | |
| 	      Name	variable	attribute name (null-terminated string)
 | |
| 	      Type	Long		attribute type (32-bit unsigned integer)
 | |
| 	      Size	Long Long	data size for this sub-block (64 bits)
 | |
| 	      Data	variable	attribute data
 | |
| 
 | |
| 	  The attribute structure is repeated for every attribute.  The Data
 | |
| 	  field may contain anything--text, flags, bitmaps, etc.
 | |
| 
 | |
| 
 | |
| 	 -SMS/QDOS Extra Field:
 | |
| 	  ====================
 | |
| 
 | |
| 	  The following is the layout of the file-attributes extra block for
 | |
| 	  SMS/QDOS.  The local-header and central-header versions are identical.
 | |
| 	  (Last Revision 960929)
 | |
| 
 | |
| 	  Value		Size		Description
 | |
| 	  -----		----		-----------
 | |
|   (QDOS)  0xfb4a	Short		tag for this extra block type
 | |
| 	  TSize		Short		total data size for this block
 | |
| 	  LongID	Long		extra-field signature
 | |
| 	  (ExtraID)	Long		additional signature/flag bytes
 | |
| 	  QDirect	64 bytes	qdirect structure
 | |
| 
 | |
| 	  LongID may be "QZHD" or "QDOS".  In the latter case, ExtraID will
 | |
| 	  be present.  Its first three bytes are "02\0"; the last byte is
 | |
| 	  currently undefined.
 | |
| 
 | |
| 	  QDirect contains the file's uncompressed directory info (qdirect
 | |
| 	  struct).  Its elements are in native (big-endian) format:
 | |
| 
 | |
| 	  d_length	beLong		file length
 | |
| 	  d_access	byte		file access type
 | |
| 	  d_type	byte		file type
 | |
| 	  d_datalen	beLong		data length
 | |
| 	  d_reserved	beLong		unused
 | |
| 	  d_szname	beShort		size of filename
 | |
| 	  d_name	36 bytes	filename
 | |
| 	  d_update	beLong		time of last update
 | |
| 	  d_refdate	beLong		file version number
 | |
| 	  d_backup	beLong		time of last backup (archive date)
 | |
| 
 | |
| 
 | |
| 	 -AOS/VS Extra Field:
 | |
| 	  ==================
 | |
| 
 | |
| 	  The following is the layout of the extra block for Data General
 | |
| 	  AOS/VS.  The local-header and central-header versions are identical.
 | |
| 	  (Last Revision 961125)
 | |
| 
 | |
| 	  Value		Size		Description
 | |
| 	  -----		----		-----------
 | |
|   (AOSVS) 0x5356	Short		tag for this extra block type
 | |
| 	  TSize		Short		total data size for this block
 | |
| 	  "FCI\0"	Long		extra-field signature
 | |
| 	  Version	Byte		version of AOS/VS extra block (10 = 1.0)
 | |
| 	  Fstat		variable	fstat packet
 | |
| 	  AclBuf	variable	raw ACL data ($MXACL bytes)
 | |
| 
 | |
| 	  Fstat contains the file's uncompressed fstat packet, which is one of
 | |
| 	  the following:
 | |
| 
 | |
| 		normal fstat packet		(P_FSTAT struct)
 | |
| 		DIR/CPD fstat packet		(P_FSTAT_DIR struct)
 | |
| 		unit (device) fstat packet	(P_FSTAT_UNIT struct)
 | |
| 		IPC file fstat packet		(P_FSTAT_IPC struct)
 | |
| 
 | |
| 	  AclBuf contains the raw ACL data; its length is $MXACL.
 | |
| 
 | |
| 
 | |
|          -FWKCS MD5 Extra Field:
 | |
|           =====================
 | |
| 
 | |
| 	  The following is the layout of the optional extra block used by the
 | |
| 	  FWKCS utility.  There is no local-header version; the following
 | |
| 	  applies only to the central header.  (Last Revision 961207)
 | |
| 
 | |
| 	  Central-header version:
 | |
| 
 | |
| 	  Value		Size		Description
 | |
| 	  -----		----		-----------
 | |
|   (MD5)   0x4b46	Short		tag for this extra block type
 | |
| 	  TSize		Short		total data size for this block (19)
 | |
| 	  "MD5"		3 bytes		extra-field signature
 | |
| 	  MD5hash	16 bytes	128-bit MD5 hash of uncompressed data
 | |
| 
 | |
| 	  The MD5 hash in this extra block is used to automatically identify
 | |
| 	  files independent of their filenames; it is an an enhanced contents-
 | |
| 	  signature.  Adding or removing this block should preserve the PKWARE
 | |
| 	  AV (Authenticity Verification) signature.
 | |
| 
 | |
| 	  ``The MD5 algorithm is being placed in the public domain for review
 | |
| 	  and possible adoption as a standard.'' (Ron Rivest, MIT Laboratory
 | |
| 	  for Computer Science and RSA Data Security, Inc., April 1992, RFC
 | |
| 	  1321, 11.76-77).  FWKCS is a trademark of Frederick W. Kantor.
 |