1 : /* ***** BEGIN LICENSE BLOCK *****
2 : * Version: MPL 1.1/GPL 2.0/LGPL 2.1
3 : *
4 : * The contents of this file are subject to the Mozilla Public License Version
5 : * 1.1 (the "License"); you may not use this file except in compliance with
6 : * the License. You may obtain a copy of the License at
7 : * http://www.mozilla.org/MPL/
8 : *
9 : * Software distributed under the License is distributed on an "AS IS" basis,
10 : * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
11 : * for the specific language governing rights and limitations under the
12 : * License.
13 : *
14 : * The Original Code is Zip Writer Component.
15 : *
16 : * The Initial Developer of the Original Code is
17 : * Dave Townsend <dtownsend@oxymoronical.com>.
18 : *
19 : * Portions created by the Initial Developer are Copyright (C) 2007
20 : * the Initial Developer. All Rights Reserved.
21 : *
22 : * Contributor(s):
23 : *
24 : * Alternatively, the contents of this file may be used under the terms of
25 : * either the GNU General Public License Version 2 or later (the "GPL"), or
26 : * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
27 : * in which case the provisions of the GPL or the LGPL are applicable instead
28 : * of those above. If you wish to allow use of your version of this file only
29 : * under the terms of either the GPL or the LGPL, and not to allow others to
30 : * use your version of this file under the terms of the MPL, indicate your
31 : * decision by deleting the provisions above and replace them with the notice
32 : * and other provisions required by the GPL or the LGPL. If you do not delete
33 : * the provisions above, a recipient may use your version of this file under
34 : * the terms of any one of the MPL, the GPL or the LGPL.
35 : *
36 : * ***** END LICENSE BLOCK *****
37 : */
38 :
39 : #ifndef _nsZipHeader_h_
40 : #define _nsZipHeader_h_
41 :
42 : #include "nsString.h"
43 : #include "nsIOutputStream.h"
44 : #include "nsIInputStream.h"
45 : #include "nsIZipReader.h"
46 : #include "nsAutoPtr.h"
47 :
48 : // High word is S_IFREG, low word is DOS file attribute
49 : #define ZIP_ATTRS_FILE 0x80000000
50 : // High word is S_IFDIR, low word is DOS dir attribute
51 : #define ZIP_ATTRS_DIRECTORY 0x40000010
52 : #define PERMISSIONS_FILE 0644
53 : #define PERMISSIONS_DIR 0755
54 :
55 : // Combine file type attributes with unix style permissions
56 : #define ZIP_ATTRS(p, a) ((p & 0xfff) << 16) | a
57 :
58 : class nsZipHeader : public nsIZipEntry
59 : {
60 : public:
61 : NS_DECL_ISUPPORTS
62 : NS_DECL_NSIZIPENTRY
63 :
64 5745 : nsZipHeader() :
65 : mCRC(0),
66 : mCSize(0),
67 : mUSize(0),
68 : mEAttr(0),
69 : mOffset(0),
70 : mFieldLength(0),
71 : mLocalFieldLength(0),
72 : mVersionMade(0x0300 + 23), // Generated on Unix by v2.3 (matches infozip)
73 : mVersionNeeded(20), // Requires v2.0 to extract
74 : mFlags(0),
75 : mMethod(0),
76 : mTime(0),
77 : mDate(0),
78 : mDisk(0),
79 : mIAttr(0),
80 : mInited(false),
81 : mWriteOnClose(false),
82 : mExtraField(NULL),
83 5745 : mLocalExtraField(NULL)
84 : {
85 5745 : }
86 :
87 5745 : ~nsZipHeader()
88 11490 : {
89 5745 : mExtraField = NULL;
90 5745 : mLocalExtraField = NULL;
91 5745 : }
92 :
93 : PRUint32 mCRC;
94 : PRUint32 mCSize;
95 : PRUint32 mUSize;
96 : PRUint32 mEAttr;
97 : PRUint32 mOffset;
98 : PRUint32 mFieldLength;
99 : PRUint32 mLocalFieldLength;
100 : PRUint16 mVersionMade;
101 : PRUint16 mVersionNeeded;
102 : PRUint16 mFlags;
103 : PRUint16 mMethod;
104 : PRUint16 mTime;
105 : PRUint16 mDate;
106 : PRUint16 mDisk;
107 : PRUint16 mIAttr;
108 : bool mInited;
109 : bool mWriteOnClose;
110 : nsCString mName;
111 : nsCString mComment;
112 : nsAutoArrayPtr<PRUint8> mExtraField;
113 : nsAutoArrayPtr<PRUint8> mLocalExtraField;
114 :
115 : void Init(const nsACString & aPath, PRTime aDate, PRUint32 aAttr,
116 : PRUint32 aOffset);
117 : PRUint32 GetFileHeaderLength();
118 : nsresult WriteFileHeader(nsIOutputStream *aStream);
119 : PRUint32 GetCDSHeaderLength();
120 : nsresult WriteCDSHeader(nsIOutputStream *aStream);
121 : nsresult ReadCDSHeader(nsIInputStream *aStream);
122 : const PRUint8 * GetExtraField(PRUint16 aTag, bool aLocal, PRUint16 *aBlockSize);
123 : };
124 :
125 : #endif
|