xref: /aosp_15_r20/external/lzma/CPP/7zip/UI/Common/ArchiveExtractCallback.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // ArchiveExtractCallback.h
2*f6dc9357SAndroid Build Coastguard Worker 
3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_ARCHIVE_EXTRACT_CALLBACK_H
4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_ARCHIVE_EXTRACT_CALLBACK_H
5*f6dc9357SAndroid Build Coastguard Worker 
6*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/MyCom.h"
7*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/MyLinux.h"
8*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/Wildcard.h"
9*f6dc9357SAndroid Build Coastguard Worker 
10*f6dc9357SAndroid Build Coastguard Worker #include "../../IPassword.h"
11*f6dc9357SAndroid Build Coastguard Worker 
12*f6dc9357SAndroid Build Coastguard Worker #include "../../Common/FileStreams.h"
13*f6dc9357SAndroid Build Coastguard Worker #include "../../Common/ProgressUtils.h"
14*f6dc9357SAndroid Build Coastguard Worker #include "../../Common/StreamObjects.h"
15*f6dc9357SAndroid Build Coastguard Worker 
16*f6dc9357SAndroid Build Coastguard Worker #include "../../Archive/IArchive.h"
17*f6dc9357SAndroid Build Coastguard Worker 
18*f6dc9357SAndroid Build Coastguard Worker #include "ExtractMode.h"
19*f6dc9357SAndroid Build Coastguard Worker #include "IFileExtractCallback.h"
20*f6dc9357SAndroid Build Coastguard Worker #include "OpenArchive.h"
21*f6dc9357SAndroid Build Coastguard Worker 
22*f6dc9357SAndroid Build Coastguard Worker #include "HashCalc.h"
23*f6dc9357SAndroid Build Coastguard Worker 
24*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_SFX
25*f6dc9357SAndroid Build Coastguard Worker 
26*f6dc9357SAndroid Build Coastguard Worker Z7_CLASS_IMP_NOQIB_1(
27*f6dc9357SAndroid Build Coastguard Worker   COutStreamWithHash
28*f6dc9357SAndroid Build Coastguard Worker   , ISequentialOutStream
29*f6dc9357SAndroid Build Coastguard Worker )
30*f6dc9357SAndroid Build Coastguard Worker   bool _calculate;
31*f6dc9357SAndroid Build Coastguard Worker   CMyComPtr<ISequentialOutStream> _stream;
32*f6dc9357SAndroid Build Coastguard Worker   UInt64 _size;
33*f6dc9357SAndroid Build Coastguard Worker public:
34*f6dc9357SAndroid Build Coastguard Worker   IHashCalc *_hash;
35*f6dc9357SAndroid Build Coastguard Worker 
SetStream(ISequentialOutStream * stream)36*f6dc9357SAndroid Build Coastguard Worker   void SetStream(ISequentialOutStream *stream) { _stream = stream; }
ReleaseStream()37*f6dc9357SAndroid Build Coastguard Worker   void ReleaseStream() { _stream.Release(); }
38*f6dc9357SAndroid Build Coastguard Worker   void Init(bool calculate = true)
39*f6dc9357SAndroid Build Coastguard Worker   {
40*f6dc9357SAndroid Build Coastguard Worker     InitCRC();
41*f6dc9357SAndroid Build Coastguard Worker     _size = 0;
42*f6dc9357SAndroid Build Coastguard Worker     _calculate = calculate;
43*f6dc9357SAndroid Build Coastguard Worker   }
EnableCalc(bool calculate)44*f6dc9357SAndroid Build Coastguard Worker   void EnableCalc(bool calculate) { _calculate = calculate; }
InitCRC()45*f6dc9357SAndroid Build Coastguard Worker   void InitCRC() { _hash->InitForNewFile(); }
GetSize()46*f6dc9357SAndroid Build Coastguard Worker   UInt64 GetSize() const { return _size; }
47*f6dc9357SAndroid Build Coastguard Worker };
48*f6dc9357SAndroid Build Coastguard Worker 
49*f6dc9357SAndroid Build Coastguard Worker #endif
50*f6dc9357SAndroid Build Coastguard Worker 
51*f6dc9357SAndroid Build Coastguard Worker struct CExtractNtOptions
52*f6dc9357SAndroid Build Coastguard Worker {
53*f6dc9357SAndroid Build Coastguard Worker   CBoolPair NtSecurity;
54*f6dc9357SAndroid Build Coastguard Worker   CBoolPair SymLinks;
55*f6dc9357SAndroid Build Coastguard Worker   CBoolPair SymLinks_AllowDangerous;
56*f6dc9357SAndroid Build Coastguard Worker   CBoolPair HardLinks;
57*f6dc9357SAndroid Build Coastguard Worker   CBoolPair AltStreams;
58*f6dc9357SAndroid Build Coastguard Worker   bool ReplaceColonForAltStream;
59*f6dc9357SAndroid Build Coastguard Worker   bool WriteToAltStreamIfColon;
60*f6dc9357SAndroid Build Coastguard Worker 
61*f6dc9357SAndroid Build Coastguard Worker   bool ExtractOwner;
62*f6dc9357SAndroid Build Coastguard Worker 
63*f6dc9357SAndroid Build Coastguard Worker   bool PreAllocateOutFile;
64*f6dc9357SAndroid Build Coastguard Worker 
65*f6dc9357SAndroid Build Coastguard Worker   // used for hash arcs only, when we open external files
66*f6dc9357SAndroid Build Coastguard Worker   bool PreserveATime;
67*f6dc9357SAndroid Build Coastguard Worker   bool OpenShareForWrite;
68*f6dc9357SAndroid Build Coastguard Worker 
69*f6dc9357SAndroid Build Coastguard Worker   UInt64 MemLimit;
70*f6dc9357SAndroid Build Coastguard Worker 
71*f6dc9357SAndroid Build Coastguard Worker   CExtractNtOptions():
72*f6dc9357SAndroid Build Coastguard Worker       ReplaceColonForAltStream(false),
73*f6dc9357SAndroid Build Coastguard Worker       WriteToAltStreamIfColon(false),
74*f6dc9357SAndroid Build Coastguard Worker       ExtractOwner(false),
75*f6dc9357SAndroid Build Coastguard Worker       PreserveATime(false),
76*f6dc9357SAndroid Build Coastguard Worker       OpenShareForWrite(false),
77*f6dc9357SAndroid Build Coastguard Worker       MemLimit((UInt64)(Int64)-1)
78*f6dc9357SAndroid Build Coastguard Worker   {
79*f6dc9357SAndroid Build Coastguard Worker     SymLinks.Val = true;
80*f6dc9357SAndroid Build Coastguard Worker     SymLinks_AllowDangerous.Val = false;
81*f6dc9357SAndroid Build Coastguard Worker     HardLinks.Val = true;
82*f6dc9357SAndroid Build Coastguard Worker     AltStreams.Val = true;
83*f6dc9357SAndroid Build Coastguard Worker 
84*f6dc9357SAndroid Build Coastguard Worker     PreAllocateOutFile =
85*f6dc9357SAndroid Build Coastguard Worker       #ifdef _WIN32
86*f6dc9357SAndroid Build Coastguard Worker         true;
87*f6dc9357SAndroid Build Coastguard Worker       #else
88*f6dc9357SAndroid Build Coastguard Worker         false;
89*f6dc9357SAndroid Build Coastguard Worker       #endif
90*f6dc9357SAndroid Build Coastguard Worker   }
91*f6dc9357SAndroid Build Coastguard Worker };
92*f6dc9357SAndroid Build Coastguard Worker 
93*f6dc9357SAndroid Build Coastguard Worker 
94*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_SFX
95*f6dc9357SAndroid Build Coastguard Worker #ifndef UNDER_CE
96*f6dc9357SAndroid Build Coastguard Worker #define SUPPORT_LINKS
97*f6dc9357SAndroid Build Coastguard Worker #endif
98*f6dc9357SAndroid Build Coastguard Worker #endif
99*f6dc9357SAndroid Build Coastguard Worker 
100*f6dc9357SAndroid Build Coastguard Worker 
101*f6dc9357SAndroid Build Coastguard Worker #ifdef SUPPORT_LINKS
102*f6dc9357SAndroid Build Coastguard Worker 
103*f6dc9357SAndroid Build Coastguard Worker struct CHardLinkNode
104*f6dc9357SAndroid Build Coastguard Worker {
105*f6dc9357SAndroid Build Coastguard Worker   UInt64 StreamId;
106*f6dc9357SAndroid Build Coastguard Worker   UInt64 INode;
107*f6dc9357SAndroid Build Coastguard Worker 
108*f6dc9357SAndroid Build Coastguard Worker   int Compare(const CHardLinkNode &a) const;
109*f6dc9357SAndroid Build Coastguard Worker };
110*f6dc9357SAndroid Build Coastguard Worker 
111*f6dc9357SAndroid Build Coastguard Worker class CHardLinks
112*f6dc9357SAndroid Build Coastguard Worker {
113*f6dc9357SAndroid Build Coastguard Worker public:
114*f6dc9357SAndroid Build Coastguard Worker   CRecordVector<CHardLinkNode> IDs;
115*f6dc9357SAndroid Build Coastguard Worker   CObjectVector<FString> Links;
116*f6dc9357SAndroid Build Coastguard Worker 
117*f6dc9357SAndroid Build Coastguard Worker   void Clear()
118*f6dc9357SAndroid Build Coastguard Worker   {
119*f6dc9357SAndroid Build Coastguard Worker     IDs.Clear();
120*f6dc9357SAndroid Build Coastguard Worker     Links.Clear();
121*f6dc9357SAndroid Build Coastguard Worker   }
122*f6dc9357SAndroid Build Coastguard Worker 
123*f6dc9357SAndroid Build Coastguard Worker   void PrepareLinks()
124*f6dc9357SAndroid Build Coastguard Worker   {
125*f6dc9357SAndroid Build Coastguard Worker     while (Links.Size() < IDs.Size())
126*f6dc9357SAndroid Build Coastguard Worker       Links.AddNew();
127*f6dc9357SAndroid Build Coastguard Worker   }
128*f6dc9357SAndroid Build Coastguard Worker };
129*f6dc9357SAndroid Build Coastguard Worker 
130*f6dc9357SAndroid Build Coastguard Worker #endif
131*f6dc9357SAndroid Build Coastguard Worker 
132*f6dc9357SAndroid Build Coastguard Worker #ifdef SUPPORT_ALT_STREAMS
133*f6dc9357SAndroid Build Coastguard Worker 
134*f6dc9357SAndroid Build Coastguard Worker struct CIndexToPathPair
135*f6dc9357SAndroid Build Coastguard Worker {
136*f6dc9357SAndroid Build Coastguard Worker   UInt32 Index;
137*f6dc9357SAndroid Build Coastguard Worker   FString Path;
138*f6dc9357SAndroid Build Coastguard Worker 
139*f6dc9357SAndroid Build Coastguard Worker   CIndexToPathPair(UInt32 index): Index(index) {}
140*f6dc9357SAndroid Build Coastguard Worker   CIndexToPathPair(UInt32 index, const FString &path): Index(index), Path(path) {}
141*f6dc9357SAndroid Build Coastguard Worker 
142*f6dc9357SAndroid Build Coastguard Worker   int Compare(const CIndexToPathPair &pair) const
143*f6dc9357SAndroid Build Coastguard Worker   {
144*f6dc9357SAndroid Build Coastguard Worker     return MyCompare(Index, pair.Index);
145*f6dc9357SAndroid Build Coastguard Worker   }
146*f6dc9357SAndroid Build Coastguard Worker };
147*f6dc9357SAndroid Build Coastguard Worker 
148*f6dc9357SAndroid Build Coastguard Worker #endif
149*f6dc9357SAndroid Build Coastguard Worker 
150*f6dc9357SAndroid Build Coastguard Worker 
151*f6dc9357SAndroid Build Coastguard Worker 
152*f6dc9357SAndroid Build Coastguard Worker struct CFiTimesCAM
153*f6dc9357SAndroid Build Coastguard Worker {
154*f6dc9357SAndroid Build Coastguard Worker   CFiTime CTime;
155*f6dc9357SAndroid Build Coastguard Worker   CFiTime ATime;
156*f6dc9357SAndroid Build Coastguard Worker   CFiTime MTime;
157*f6dc9357SAndroid Build Coastguard Worker 
158*f6dc9357SAndroid Build Coastguard Worker   bool CTime_Defined;
159*f6dc9357SAndroid Build Coastguard Worker   bool ATime_Defined;
160*f6dc9357SAndroid Build Coastguard Worker   bool MTime_Defined;
161*f6dc9357SAndroid Build Coastguard Worker 
162*f6dc9357SAndroid Build Coastguard Worker   bool IsSomeTimeDefined() const
163*f6dc9357SAndroid Build Coastguard Worker   {
164*f6dc9357SAndroid Build Coastguard Worker     return
165*f6dc9357SAndroid Build Coastguard Worker       CTime_Defined |
166*f6dc9357SAndroid Build Coastguard Worker       ATime_Defined |
167*f6dc9357SAndroid Build Coastguard Worker       MTime_Defined;
168*f6dc9357SAndroid Build Coastguard Worker   }
169*f6dc9357SAndroid Build Coastguard Worker };
170*f6dc9357SAndroid Build Coastguard Worker 
171*f6dc9357SAndroid Build Coastguard Worker struct CDirPathTime: public CFiTimesCAM
172*f6dc9357SAndroid Build Coastguard Worker {
173*f6dc9357SAndroid Build Coastguard Worker   FString Path;
174*f6dc9357SAndroid Build Coastguard Worker 
175*f6dc9357SAndroid Build Coastguard Worker   bool SetDirTime() const;
176*f6dc9357SAndroid Build Coastguard Worker };
177*f6dc9357SAndroid Build Coastguard Worker 
178*f6dc9357SAndroid Build Coastguard Worker 
179*f6dc9357SAndroid Build Coastguard Worker #ifdef SUPPORT_LINKS
180*f6dc9357SAndroid Build Coastguard Worker 
181*f6dc9357SAndroid Build Coastguard Worker struct CLinkInfo
182*f6dc9357SAndroid Build Coastguard Worker {
183*f6dc9357SAndroid Build Coastguard Worker   // bool isCopyLink;
184*f6dc9357SAndroid Build Coastguard Worker   bool isHardLink;
185*f6dc9357SAndroid Build Coastguard Worker   bool isJunction;
186*f6dc9357SAndroid Build Coastguard Worker   bool isRelative;
187*f6dc9357SAndroid Build Coastguard Worker   bool isWSL;
188*f6dc9357SAndroid Build Coastguard Worker   UString linkPath;
189*f6dc9357SAndroid Build Coastguard Worker 
190*f6dc9357SAndroid Build Coastguard Worker   bool IsSymLink() const { return !isHardLink; }
191*f6dc9357SAndroid Build Coastguard Worker 
192*f6dc9357SAndroid Build Coastguard Worker   CLinkInfo():
193*f6dc9357SAndroid Build Coastguard Worker     // IsCopyLink(false),
194*f6dc9357SAndroid Build Coastguard Worker     isHardLink(false),
195*f6dc9357SAndroid Build Coastguard Worker     isJunction(false),
196*f6dc9357SAndroid Build Coastguard Worker     isRelative(false),
197*f6dc9357SAndroid Build Coastguard Worker     isWSL(false)
198*f6dc9357SAndroid Build Coastguard Worker     {}
199*f6dc9357SAndroid Build Coastguard Worker 
200*f6dc9357SAndroid Build Coastguard Worker   void Clear()
201*f6dc9357SAndroid Build Coastguard Worker   {
202*f6dc9357SAndroid Build Coastguard Worker     // IsCopyLink = false;
203*f6dc9357SAndroid Build Coastguard Worker     isHardLink = false;
204*f6dc9357SAndroid Build Coastguard Worker     isJunction = false;
205*f6dc9357SAndroid Build Coastguard Worker     isRelative = false;
206*f6dc9357SAndroid Build Coastguard Worker     isWSL = false;
207*f6dc9357SAndroid Build Coastguard Worker     linkPath.Empty();
208*f6dc9357SAndroid Build Coastguard Worker   }
209*f6dc9357SAndroid Build Coastguard Worker 
210*f6dc9357SAndroid Build Coastguard Worker   bool Parse(const Byte *data, size_t dataSize, bool isLinuxData);
211*f6dc9357SAndroid Build Coastguard Worker };
212*f6dc9357SAndroid Build Coastguard Worker 
213*f6dc9357SAndroid Build Coastguard Worker #endif // SUPPORT_LINKS
214*f6dc9357SAndroid Build Coastguard Worker 
215*f6dc9357SAndroid Build Coastguard Worker 
216*f6dc9357SAndroid Build Coastguard Worker #ifndef _WIN32
217*f6dc9357SAndroid Build Coastguard Worker 
218*f6dc9357SAndroid Build Coastguard Worker struct COwnerInfo
219*f6dc9357SAndroid Build Coastguard Worker {
220*f6dc9357SAndroid Build Coastguard Worker   bool Id_Defined;
221*f6dc9357SAndroid Build Coastguard Worker   UInt32 Id;
222*f6dc9357SAndroid Build Coastguard Worker   AString Name;
223*f6dc9357SAndroid Build Coastguard Worker 
224*f6dc9357SAndroid Build Coastguard Worker   void Clear()
225*f6dc9357SAndroid Build Coastguard Worker   {
226*f6dc9357SAndroid Build Coastguard Worker     Id_Defined = false;
227*f6dc9357SAndroid Build Coastguard Worker     Id = 0;
228*f6dc9357SAndroid Build Coastguard Worker     Name.Empty();
229*f6dc9357SAndroid Build Coastguard Worker   }
230*f6dc9357SAndroid Build Coastguard Worker };
231*f6dc9357SAndroid Build Coastguard Worker 
232*f6dc9357SAndroid Build Coastguard Worker #endif
233*f6dc9357SAndroid Build Coastguard Worker 
234*f6dc9357SAndroid Build Coastguard Worker 
235*f6dc9357SAndroid Build Coastguard Worker class CArchiveExtractCallback Z7_final:
236*f6dc9357SAndroid Build Coastguard Worker   public IArchiveExtractCallback,
237*f6dc9357SAndroid Build Coastguard Worker   public IArchiveExtractCallbackMessage2,
238*f6dc9357SAndroid Build Coastguard Worker   public ICryptoGetTextPassword,
239*f6dc9357SAndroid Build Coastguard Worker   public ICompressProgressInfo,
240*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_SFX
241*f6dc9357SAndroid Build Coastguard Worker   public IArchiveUpdateCallbackFile,
242*f6dc9357SAndroid Build Coastguard Worker   public IArchiveGetDiskProperty,
243*f6dc9357SAndroid Build Coastguard Worker   public IArchiveRequestMemoryUseCallback,
244*f6dc9357SAndroid Build Coastguard Worker #endif
245*f6dc9357SAndroid Build Coastguard Worker   public CMyUnknownImp
246*f6dc9357SAndroid Build Coastguard Worker {
247*f6dc9357SAndroid Build Coastguard Worker   /* IArchiveExtractCallback, */
248*f6dc9357SAndroid Build Coastguard Worker   Z7_COM_QI_BEGIN2(IArchiveExtractCallbackMessage2)
249*f6dc9357SAndroid Build Coastguard Worker   Z7_COM_QI_ENTRY(ICryptoGetTextPassword)
250*f6dc9357SAndroid Build Coastguard Worker   Z7_COM_QI_ENTRY(ICompressProgressInfo)
251*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_SFX
252*f6dc9357SAndroid Build Coastguard Worker   Z7_COM_QI_ENTRY(IArchiveUpdateCallbackFile)
253*f6dc9357SAndroid Build Coastguard Worker   Z7_COM_QI_ENTRY(IArchiveGetDiskProperty)
254*f6dc9357SAndroid Build Coastguard Worker   Z7_COM_QI_ENTRY(IArchiveRequestMemoryUseCallback)
255*f6dc9357SAndroid Build Coastguard Worker #endif
256*f6dc9357SAndroid Build Coastguard Worker   Z7_COM_QI_END
257*f6dc9357SAndroid Build Coastguard Worker   Z7_COM_ADDREF_RELEASE
258*f6dc9357SAndroid Build Coastguard Worker 
259*f6dc9357SAndroid Build Coastguard Worker   Z7_IFACE_COM7_IMP(IProgress)
260*f6dc9357SAndroid Build Coastguard Worker   Z7_IFACE_COM7_IMP(IArchiveExtractCallback)
261*f6dc9357SAndroid Build Coastguard Worker   Z7_IFACE_COM7_IMP(IArchiveExtractCallbackMessage2)
262*f6dc9357SAndroid Build Coastguard Worker   Z7_IFACE_COM7_IMP(ICryptoGetTextPassword)
263*f6dc9357SAndroid Build Coastguard Worker   Z7_IFACE_COM7_IMP(ICompressProgressInfo)
264*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_SFX
265*f6dc9357SAndroid Build Coastguard Worker   Z7_IFACE_COM7_IMP(IArchiveUpdateCallbackFile)
266*f6dc9357SAndroid Build Coastguard Worker   Z7_IFACE_COM7_IMP(IArchiveGetDiskProperty)
267*f6dc9357SAndroid Build Coastguard Worker   Z7_IFACE_COM7_IMP(IArchiveRequestMemoryUseCallback)
268*f6dc9357SAndroid Build Coastguard Worker #endif
269*f6dc9357SAndroid Build Coastguard Worker 
270*f6dc9357SAndroid Build Coastguard Worker   // bool Write_CTime;
271*f6dc9357SAndroid Build Coastguard Worker   // bool Write_ATime;
272*f6dc9357SAndroid Build Coastguard Worker   // bool Write_MTime;
273*f6dc9357SAndroid Build Coastguard Worker   bool _stdOutMode;
274*f6dc9357SAndroid Build Coastguard Worker   bool _testMode;
275*f6dc9357SAndroid Build Coastguard Worker   bool _removePartsForAltStreams;
276*f6dc9357SAndroid Build Coastguard Worker public:
277*f6dc9357SAndroid Build Coastguard Worker   bool Is_elimPrefix_Mode;
278*f6dc9357SAndroid Build Coastguard Worker private:
279*f6dc9357SAndroid Build Coastguard Worker 
280*f6dc9357SAndroid Build Coastguard Worker   const CArc *_arc;
281*f6dc9357SAndroid Build Coastguard Worker   CExtractNtOptions _ntOptions;
282*f6dc9357SAndroid Build Coastguard Worker 
283*f6dc9357SAndroid Build Coastguard Worker   bool _encrypted;
284*f6dc9357SAndroid Build Coastguard Worker   bool _isSplit;
285*f6dc9357SAndroid Build Coastguard Worker   bool _curSize_Defined;
286*f6dc9357SAndroid Build Coastguard Worker   bool _fileLength_WasSet;
287*f6dc9357SAndroid Build Coastguard Worker 
288*f6dc9357SAndroid Build Coastguard Worker   bool _isRenamed;
289*f6dc9357SAndroid Build Coastguard Worker   bool _extractMode;
290*f6dc9357SAndroid Build Coastguard Worker   // bool _is_SymLink_in_Data;
291*f6dc9357SAndroid Build Coastguard Worker   bool _is_SymLink_in_Data_Linux; // false = WIN32, true = LINUX
292*f6dc9357SAndroid Build Coastguard Worker   bool _needSetAttrib;
293*f6dc9357SAndroid Build Coastguard Worker   bool _isSymLinkCreated;
294*f6dc9357SAndroid Build Coastguard Worker   bool _itemFailure;
295*f6dc9357SAndroid Build Coastguard Worker   bool _some_pathParts_wereRemoved;
296*f6dc9357SAndroid Build Coastguard Worker 
297*f6dc9357SAndroid Build Coastguard Worker   bool _multiArchives;
298*f6dc9357SAndroid Build Coastguard Worker   bool _keepAndReplaceEmptyDirPrefixes; // replace them to "_";
299*f6dc9357SAndroid Build Coastguard Worker #if defined(_WIN32) && !defined(UNDER_CE) && !defined(Z7_SFX)
300*f6dc9357SAndroid Build Coastguard Worker   bool _saclEnabled;
301*f6dc9357SAndroid Build Coastguard Worker #endif
302*f6dc9357SAndroid Build Coastguard Worker 
303*f6dc9357SAndroid Build Coastguard Worker   NExtract::NPathMode::EEnum _pathMode;
304*f6dc9357SAndroid Build Coastguard Worker   NExtract::NOverwriteMode::EEnum _overwriteMode;
305*f6dc9357SAndroid Build Coastguard Worker 
306*f6dc9357SAndroid Build Coastguard Worker   CMyComPtr<IFolderArchiveExtractCallback> _extractCallback2;
307*f6dc9357SAndroid Build Coastguard Worker   const NWildcard::CCensorNode *_wildcardCensor; // we need wildcard for single pass mode (stdin)
308*f6dc9357SAndroid Build Coastguard Worker   // CMyComPtr<ICompressProgressInfo> _compressProgress;
309*f6dc9357SAndroid Build Coastguard Worker   // CMyComPtr<IArchiveExtractCallbackMessage2> _callbackMessage;
310*f6dc9357SAndroid Build Coastguard Worker   CMyComPtr<IFolderArchiveExtractCallback2> _folderArchiveExtractCallback2;
311*f6dc9357SAndroid Build Coastguard Worker   CMyComPtr<ICryptoGetTextPassword> _cryptoGetTextPassword;
312*f6dc9357SAndroid Build Coastguard Worker 
313*f6dc9357SAndroid Build Coastguard Worker   FString _dirPathPrefix;
314*f6dc9357SAndroid Build Coastguard Worker   FString _dirPathPrefix_Full;
315*f6dc9357SAndroid Build Coastguard Worker 
316*f6dc9357SAndroid Build Coastguard Worker   #ifndef Z7_SFX
317*f6dc9357SAndroid Build Coastguard Worker 
318*f6dc9357SAndroid Build Coastguard Worker   CMyComPtr<IFolderExtractToStreamCallback> ExtractToStreamCallback;
319*f6dc9357SAndroid Build Coastguard Worker   CMyComPtr<IArchiveRequestMemoryUseCallback> _requestMemoryUseCallback;
320*f6dc9357SAndroid Build Coastguard Worker 
321*f6dc9357SAndroid Build Coastguard Worker   #endif
322*f6dc9357SAndroid Build Coastguard Worker 
323*f6dc9357SAndroid Build Coastguard Worker   CReadArcItem _item;
324*f6dc9357SAndroid Build Coastguard Worker   FString _diskFilePath;
325*f6dc9357SAndroid Build Coastguard Worker 
326*f6dc9357SAndroid Build Coastguard Worker   struct CProcessedFileInfo
327*f6dc9357SAndroid Build Coastguard Worker   {
328*f6dc9357SAndroid Build Coastguard Worker     CArcTime CTime;
329*f6dc9357SAndroid Build Coastguard Worker     CArcTime ATime;
330*f6dc9357SAndroid Build Coastguard Worker     CArcTime MTime;
331*f6dc9357SAndroid Build Coastguard Worker     UInt32 Attrib;
332*f6dc9357SAndroid Build Coastguard Worker     bool Attrib_Defined;
333*f6dc9357SAndroid Build Coastguard Worker 
334*f6dc9357SAndroid Build Coastguard Worker    #ifndef _WIN32
335*f6dc9357SAndroid Build Coastguard Worker     COwnerInfo Owner;
336*f6dc9357SAndroid Build Coastguard Worker     COwnerInfo Group;
337*f6dc9357SAndroid Build Coastguard Worker    #endif
338*f6dc9357SAndroid Build Coastguard Worker 
339*f6dc9357SAndroid Build Coastguard Worker     bool IsReparse() const
340*f6dc9357SAndroid Build Coastguard Worker     {
341*f6dc9357SAndroid Build Coastguard Worker       return (Attrib_Defined && (Attrib & FILE_ATTRIBUTE_REPARSE_POINT) != 0);
342*f6dc9357SAndroid Build Coastguard Worker     }
343*f6dc9357SAndroid Build Coastguard Worker 
344*f6dc9357SAndroid Build Coastguard Worker     bool IsLinuxSymLink() const
345*f6dc9357SAndroid Build Coastguard Worker     {
346*f6dc9357SAndroid Build Coastguard Worker       return (Attrib_Defined && MY_LIN_S_ISLNK(Attrib >> 16));
347*f6dc9357SAndroid Build Coastguard Worker     }
348*f6dc9357SAndroid Build Coastguard Worker 
349*f6dc9357SAndroid Build Coastguard Worker     void SetFromPosixAttrib(UInt32 a)
350*f6dc9357SAndroid Build Coastguard Worker     {
351*f6dc9357SAndroid Build Coastguard Worker       // here we set only part of combined attribute required by SetFileAttrib() call
352*f6dc9357SAndroid Build Coastguard Worker       #ifdef _WIN32
353*f6dc9357SAndroid Build Coastguard Worker       // Windows sets FILE_ATTRIBUTE_NORMAL, if we try to set 0 as attribute.
354*f6dc9357SAndroid Build Coastguard Worker       Attrib = MY_LIN_S_ISDIR(a) ?
355*f6dc9357SAndroid Build Coastguard Worker           FILE_ATTRIBUTE_DIRECTORY :
356*f6dc9357SAndroid Build Coastguard Worker           FILE_ATTRIBUTE_ARCHIVE;
357*f6dc9357SAndroid Build Coastguard Worker       if ((a & 0222) == 0) // (& S_IWUSR) in p7zip
358*f6dc9357SAndroid Build Coastguard Worker         Attrib |= FILE_ATTRIBUTE_READONLY;
359*f6dc9357SAndroid Build Coastguard Worker       // 22.00 : we need type bits for (MY_LIN_S_IFLNK) for IsLinuxSymLink()
360*f6dc9357SAndroid Build Coastguard Worker       a &= MY_LIN_S_IFMT;
361*f6dc9357SAndroid Build Coastguard Worker       if (a == MY_LIN_S_IFLNK)
362*f6dc9357SAndroid Build Coastguard Worker         Attrib |= (a << 16);
363*f6dc9357SAndroid Build Coastguard Worker       #else
364*f6dc9357SAndroid Build Coastguard Worker       Attrib = (a << 16) | FILE_ATTRIBUTE_UNIX_EXTENSION;
365*f6dc9357SAndroid Build Coastguard Worker       #endif
366*f6dc9357SAndroid Build Coastguard Worker       Attrib_Defined = true;
367*f6dc9357SAndroid Build Coastguard Worker     }
368*f6dc9357SAndroid Build Coastguard Worker   } _fi;
369*f6dc9357SAndroid Build Coastguard Worker 
370*f6dc9357SAndroid Build Coastguard Worker   UInt64 _position;
371*f6dc9357SAndroid Build Coastguard Worker   UInt64 _curSize;
372*f6dc9357SAndroid Build Coastguard Worker   UInt64 _fileLength_that_WasSet;
373*f6dc9357SAndroid Build Coastguard Worker   UInt32 _index;
374*f6dc9357SAndroid Build Coastguard Worker 
375*f6dc9357SAndroid Build Coastguard Worker // #ifdef SUPPORT_ALT_STREAMS
376*f6dc9357SAndroid Build Coastguard Worker #if defined(_WIN32) && !defined(UNDER_CE)
377*f6dc9357SAndroid Build Coastguard Worker   DWORD _altStream_NeedRestore_AttribVal;
378*f6dc9357SAndroid Build Coastguard Worker   FString _altStream_NeedRestore_Attrib_for_parentFsPath;
379*f6dc9357SAndroid Build Coastguard Worker #endif
380*f6dc9357SAndroid Build Coastguard Worker // #endif
381*f6dc9357SAndroid Build Coastguard Worker 
382*f6dc9357SAndroid Build Coastguard Worker   COutFileStream *_outFileStreamSpec;
383*f6dc9357SAndroid Build Coastguard Worker   CMyComPtr<ISequentialOutStream> _outFileStream;
384*f6dc9357SAndroid Build Coastguard Worker 
385*f6dc9357SAndroid Build Coastguard Worker   CByteBuffer _outMemBuf;
386*f6dc9357SAndroid Build Coastguard Worker   CBufPtrSeqOutStream *_bufPtrSeqOutStream_Spec;
387*f6dc9357SAndroid Build Coastguard Worker   CMyComPtr<ISequentialOutStream> _bufPtrSeqOutStream;
388*f6dc9357SAndroid Build Coastguard Worker 
389*f6dc9357SAndroid Build Coastguard Worker  #ifndef Z7_SFX
390*f6dc9357SAndroid Build Coastguard Worker   COutStreamWithHash *_hashStreamSpec;
391*f6dc9357SAndroid Build Coastguard Worker   CMyComPtr<ISequentialOutStream> _hashStream;
392*f6dc9357SAndroid Build Coastguard Worker   bool _hashStreamWasUsed;
393*f6dc9357SAndroid Build Coastguard Worker 
394*f6dc9357SAndroid Build Coastguard Worker   bool _use_baseParentFolder_mode;
395*f6dc9357SAndroid Build Coastguard Worker   UInt32 _baseParentFolder;
396*f6dc9357SAndroid Build Coastguard Worker  #endif
397*f6dc9357SAndroid Build Coastguard Worker 
398*f6dc9357SAndroid Build Coastguard Worker   UStringVector _removePathParts;
399*f6dc9357SAndroid Build Coastguard Worker 
400*f6dc9357SAndroid Build Coastguard Worker   UInt64 _packTotal;
401*f6dc9357SAndroid Build Coastguard Worker   UInt64 _progressTotal;
402*f6dc9357SAndroid Build Coastguard Worker   // bool _progressTotal_Defined;
403*f6dc9357SAndroid Build Coastguard Worker 
404*f6dc9357SAndroid Build Coastguard Worker   CObjectVector<CDirPathTime> _extractedFolders;
405*f6dc9357SAndroid Build Coastguard Worker 
406*f6dc9357SAndroid Build Coastguard Worker   #ifndef _WIN32
407*f6dc9357SAndroid Build Coastguard Worker   // CObjectVector<NWindows::NFile::NDir::CDelayedSymLink> _delayedSymLinks;
408*f6dc9357SAndroid Build Coastguard Worker   #endif
409*f6dc9357SAndroid Build Coastguard Worker 
410*f6dc9357SAndroid Build Coastguard Worker   void CreateComplexDirectory(const UStringVector &dirPathParts, FString &fullPath);
411*f6dc9357SAndroid Build Coastguard Worker   HRESULT GetTime(UInt32 index, PROPID propID, CArcTime &ft);
412*f6dc9357SAndroid Build Coastguard Worker   HRESULT GetUnpackSize();
413*f6dc9357SAndroid Build Coastguard Worker 
414*f6dc9357SAndroid Build Coastguard Worker   FString Hash_GetFullFilePath();
415*f6dc9357SAndroid Build Coastguard Worker 
416*f6dc9357SAndroid Build Coastguard Worker   void SetAttrib();
417*f6dc9357SAndroid Build Coastguard Worker 
418*f6dc9357SAndroid Build Coastguard Worker public:
419*f6dc9357SAndroid Build Coastguard Worker   HRESULT SendMessageError(const char *message, const FString &path);
420*f6dc9357SAndroid Build Coastguard Worker   HRESULT SendMessageError_with_Error(HRESULT errorCode, const char *message, const FString &path);
421*f6dc9357SAndroid Build Coastguard Worker   HRESULT SendMessageError_with_LastError(const char *message, const FString &path);
422*f6dc9357SAndroid Build Coastguard Worker   HRESULT SendMessageError2(HRESULT errorCode, const char *message, const FString &path1, const FString &path2);
423*f6dc9357SAndroid Build Coastguard Worker 
424*f6dc9357SAndroid Build Coastguard Worker #if defined(_WIN32) && !defined(UNDER_CE) && !defined(Z7_SFX)
425*f6dc9357SAndroid Build Coastguard Worker   NExtract::NZoneIdMode::EEnum ZoneMode;
426*f6dc9357SAndroid Build Coastguard Worker   CByteBuffer ZoneBuf;
427*f6dc9357SAndroid Build Coastguard Worker #endif
428*f6dc9357SAndroid Build Coastguard Worker 
429*f6dc9357SAndroid Build Coastguard Worker   CMyComPtr2_Create<ICompressProgressInfo, CLocalProgress> LocalProgressSpec;
430*f6dc9357SAndroid Build Coastguard Worker 
431*f6dc9357SAndroid Build Coastguard Worker   UInt64 NumFolders;
432*f6dc9357SAndroid Build Coastguard Worker   UInt64 NumFiles;
433*f6dc9357SAndroid Build Coastguard Worker   UInt64 NumAltStreams;
434*f6dc9357SAndroid Build Coastguard Worker   UInt64 UnpackSize;
435*f6dc9357SAndroid Build Coastguard Worker   UInt64 AltStreams_UnpackSize;
436*f6dc9357SAndroid Build Coastguard Worker 
437*f6dc9357SAndroid Build Coastguard Worker   FString DirPathPrefix_for_HashFiles;
438*f6dc9357SAndroid Build Coastguard Worker 
439*f6dc9357SAndroid Build Coastguard Worker   CArchiveExtractCallback();
440*f6dc9357SAndroid Build Coastguard Worker 
441*f6dc9357SAndroid Build Coastguard Worker   void InitForMulti(bool multiArchives,
442*f6dc9357SAndroid Build Coastguard Worker       NExtract::NPathMode::EEnum pathMode,
443*f6dc9357SAndroid Build Coastguard Worker       NExtract::NOverwriteMode::EEnum overwriteMode,
444*f6dc9357SAndroid Build Coastguard Worker       NExtract::NZoneIdMode::EEnum zoneMode,
445*f6dc9357SAndroid Build Coastguard Worker       bool keepAndReplaceEmptyDirPrefixes)
446*f6dc9357SAndroid Build Coastguard Worker   {
447*f6dc9357SAndroid Build Coastguard Worker     _multiArchives = multiArchives;
448*f6dc9357SAndroid Build Coastguard Worker     _pathMode = pathMode;
449*f6dc9357SAndroid Build Coastguard Worker     _overwriteMode = overwriteMode;
450*f6dc9357SAndroid Build Coastguard Worker #if defined(_WIN32) && !defined(UNDER_CE) && !defined(Z7_SFX)
451*f6dc9357SAndroid Build Coastguard Worker      ZoneMode = zoneMode;
452*f6dc9357SAndroid Build Coastguard Worker #else
453*f6dc9357SAndroid Build Coastguard Worker      UNUSED_VAR(zoneMode)
454*f6dc9357SAndroid Build Coastguard Worker #endif
455*f6dc9357SAndroid Build Coastguard Worker     _keepAndReplaceEmptyDirPrefixes = keepAndReplaceEmptyDirPrefixes;
456*f6dc9357SAndroid Build Coastguard Worker     NumFolders = NumFiles = NumAltStreams = UnpackSize = AltStreams_UnpackSize = 0;
457*f6dc9357SAndroid Build Coastguard Worker   }
458*f6dc9357SAndroid Build Coastguard Worker 
459*f6dc9357SAndroid Build Coastguard Worker   #ifndef Z7_SFX
460*f6dc9357SAndroid Build Coastguard Worker 
461*f6dc9357SAndroid Build Coastguard Worker   void SetHashMethods(IHashCalc *hash)
462*f6dc9357SAndroid Build Coastguard Worker   {
463*f6dc9357SAndroid Build Coastguard Worker     if (!hash)
464*f6dc9357SAndroid Build Coastguard Worker       return;
465*f6dc9357SAndroid Build Coastguard Worker     _hashStreamSpec = new COutStreamWithHash;
466*f6dc9357SAndroid Build Coastguard Worker     _hashStream = _hashStreamSpec;
467*f6dc9357SAndroid Build Coastguard Worker     _hashStreamSpec->_hash = hash;
468*f6dc9357SAndroid Build Coastguard Worker   }
469*f6dc9357SAndroid Build Coastguard Worker 
470*f6dc9357SAndroid Build Coastguard Worker   #endif
471*f6dc9357SAndroid Build Coastguard Worker 
472*f6dc9357SAndroid Build Coastguard Worker   void InitBeforeNewArchive();
473*f6dc9357SAndroid Build Coastguard Worker 
474*f6dc9357SAndroid Build Coastguard Worker   void Init(
475*f6dc9357SAndroid Build Coastguard Worker       const CExtractNtOptions &ntOptions,
476*f6dc9357SAndroid Build Coastguard Worker       const NWildcard::CCensorNode *wildcardCensor,
477*f6dc9357SAndroid Build Coastguard Worker       const CArc *arc,
478*f6dc9357SAndroid Build Coastguard Worker       IFolderArchiveExtractCallback *extractCallback2,
479*f6dc9357SAndroid Build Coastguard Worker       bool stdOutMode, bool testMode,
480*f6dc9357SAndroid Build Coastguard Worker       const FString &directoryPath,
481*f6dc9357SAndroid Build Coastguard Worker       const UStringVector &removePathParts, bool removePartsForAltStreams,
482*f6dc9357SAndroid Build Coastguard Worker       UInt64 packSize);
483*f6dc9357SAndroid Build Coastguard Worker 
484*f6dc9357SAndroid Build Coastguard Worker 
485*f6dc9357SAndroid Build Coastguard Worker   #ifdef SUPPORT_LINKS
486*f6dc9357SAndroid Build Coastguard Worker 
487*f6dc9357SAndroid Build Coastguard Worker private:
488*f6dc9357SAndroid Build Coastguard Worker   CHardLinks _hardLinks;
489*f6dc9357SAndroid Build Coastguard Worker   CLinkInfo _link;
490*f6dc9357SAndroid Build Coastguard Worker 
491*f6dc9357SAndroid Build Coastguard Worker   // FString _copyFile_Path;
492*f6dc9357SAndroid Build Coastguard Worker   // HRESULT MyCopyFile(ISequentialOutStream *outStream);
493*f6dc9357SAndroid Build Coastguard Worker   HRESULT Link(const FString &fullProcessedPath);
494*f6dc9357SAndroid Build Coastguard Worker   HRESULT ReadLink();
495*f6dc9357SAndroid Build Coastguard Worker 
496*f6dc9357SAndroid Build Coastguard Worker public:
497*f6dc9357SAndroid Build Coastguard Worker   // call PrepareHardLinks() after Init()
498*f6dc9357SAndroid Build Coastguard Worker   HRESULT PrepareHardLinks(const CRecordVector<UInt32> *realIndices);  // NULL means all items
499*f6dc9357SAndroid Build Coastguard Worker 
500*f6dc9357SAndroid Build Coastguard Worker   #endif
501*f6dc9357SAndroid Build Coastguard Worker 
502*f6dc9357SAndroid Build Coastguard Worker 
503*f6dc9357SAndroid Build Coastguard Worker   #ifdef SUPPORT_ALT_STREAMS
504*f6dc9357SAndroid Build Coastguard Worker   CObjectVector<CIndexToPathPair> _renamedFiles;
505*f6dc9357SAndroid Build Coastguard Worker   #endif
506*f6dc9357SAndroid Build Coastguard Worker 
507*f6dc9357SAndroid Build Coastguard Worker   // call it after Init()
508*f6dc9357SAndroid Build Coastguard Worker 
509*f6dc9357SAndroid Build Coastguard Worker   #ifndef Z7_SFX
510*f6dc9357SAndroid Build Coastguard Worker   void SetBaseParentFolderIndex(UInt32 indexInArc)
511*f6dc9357SAndroid Build Coastguard Worker   {
512*f6dc9357SAndroid Build Coastguard Worker     _baseParentFolder = indexInArc;
513*f6dc9357SAndroid Build Coastguard Worker     _use_baseParentFolder_mode = true;
514*f6dc9357SAndroid Build Coastguard Worker   }
515*f6dc9357SAndroid Build Coastguard Worker   #endif
516*f6dc9357SAndroid Build Coastguard Worker 
517*f6dc9357SAndroid Build Coastguard Worker   HRESULT CloseArc();
518*f6dc9357SAndroid Build Coastguard Worker 
519*f6dc9357SAndroid Build Coastguard Worker private:
520*f6dc9357SAndroid Build Coastguard Worker   void ClearExtractedDirsInfo()
521*f6dc9357SAndroid Build Coastguard Worker   {
522*f6dc9357SAndroid Build Coastguard Worker     _extractedFolders.Clear();
523*f6dc9357SAndroid Build Coastguard Worker     #ifndef _WIN32
524*f6dc9357SAndroid Build Coastguard Worker     // _delayedSymLinks.Clear();
525*f6dc9357SAndroid Build Coastguard Worker     #endif
526*f6dc9357SAndroid Build Coastguard Worker   }
527*f6dc9357SAndroid Build Coastguard Worker 
528*f6dc9357SAndroid Build Coastguard Worker   HRESULT Read_fi_Props();
529*f6dc9357SAndroid Build Coastguard Worker   void CorrectPathParts();
530*f6dc9357SAndroid Build Coastguard Worker   void GetFiTimesCAM(CFiTimesCAM &pt);
531*f6dc9357SAndroid Build Coastguard Worker   void CreateFolders();
532*f6dc9357SAndroid Build Coastguard Worker 
533*f6dc9357SAndroid Build Coastguard Worker   HRESULT CheckExistFile(FString &fullProcessedPath, bool &needExit);
534*f6dc9357SAndroid Build Coastguard Worker   HRESULT GetExtractStream(CMyComPtr<ISequentialOutStream> &outStreamLoc, bool &needExit);
535*f6dc9357SAndroid Build Coastguard Worker   HRESULT GetItem(UInt32 index);
536*f6dc9357SAndroid Build Coastguard Worker 
537*f6dc9357SAndroid Build Coastguard Worker   HRESULT CloseFile();
538*f6dc9357SAndroid Build Coastguard Worker   HRESULT CloseReparseAndFile();
539*f6dc9357SAndroid Build Coastguard Worker   HRESULT CloseReparseAndFile2();
540*f6dc9357SAndroid Build Coastguard Worker   HRESULT SetDirsTimes();
541*f6dc9357SAndroid Build Coastguard Worker 
542*f6dc9357SAndroid Build Coastguard Worker   const void *NtReparse_Data;
543*f6dc9357SAndroid Build Coastguard Worker   UInt32 NtReparse_Size;
544*f6dc9357SAndroid Build Coastguard Worker 
545*f6dc9357SAndroid Build Coastguard Worker   #ifdef SUPPORT_LINKS
546*f6dc9357SAndroid Build Coastguard Worker   HRESULT SetFromLinkPath(
547*f6dc9357SAndroid Build Coastguard Worker       const FString &fullProcessedPath,
548*f6dc9357SAndroid Build Coastguard Worker       const CLinkInfo &linkInfo,
549*f6dc9357SAndroid Build Coastguard Worker       bool &linkWasSet);
550*f6dc9357SAndroid Build Coastguard Worker   #endif
551*f6dc9357SAndroid Build Coastguard Worker };
552*f6dc9357SAndroid Build Coastguard Worker 
553*f6dc9357SAndroid Build Coastguard Worker 
554*f6dc9357SAndroid Build Coastguard Worker struct CArchiveExtractCallback_Closer
555*f6dc9357SAndroid Build Coastguard Worker {
556*f6dc9357SAndroid Build Coastguard Worker   CArchiveExtractCallback *_ref;
557*f6dc9357SAndroid Build Coastguard Worker 
558*f6dc9357SAndroid Build Coastguard Worker   CArchiveExtractCallback_Closer(CArchiveExtractCallback *ref): _ref(ref) {}
559*f6dc9357SAndroid Build Coastguard Worker 
560*f6dc9357SAndroid Build Coastguard Worker   HRESULT Close()
561*f6dc9357SAndroid Build Coastguard Worker   {
562*f6dc9357SAndroid Build Coastguard Worker     HRESULT res = S_OK;
563*f6dc9357SAndroid Build Coastguard Worker     if (_ref)
564*f6dc9357SAndroid Build Coastguard Worker     {
565*f6dc9357SAndroid Build Coastguard Worker       res = _ref->CloseArc();
566*f6dc9357SAndroid Build Coastguard Worker       _ref = NULL;
567*f6dc9357SAndroid Build Coastguard Worker     }
568*f6dc9357SAndroid Build Coastguard Worker     return res;
569*f6dc9357SAndroid Build Coastguard Worker   }
570*f6dc9357SAndroid Build Coastguard Worker 
571*f6dc9357SAndroid Build Coastguard Worker   ~CArchiveExtractCallback_Closer()
572*f6dc9357SAndroid Build Coastguard Worker   {
573*f6dc9357SAndroid Build Coastguard Worker     Close();
574*f6dc9357SAndroid Build Coastguard Worker   }
575*f6dc9357SAndroid Build Coastguard Worker };
576*f6dc9357SAndroid Build Coastguard Worker 
577*f6dc9357SAndroid Build Coastguard Worker 
578*f6dc9357SAndroid Build Coastguard Worker bool CensorNode_CheckPath(const NWildcard::CCensorNode &node, const CReadArcItem &item);
579*f6dc9357SAndroid Build Coastguard Worker 
580*f6dc9357SAndroid Build Coastguard Worker bool Is_ZoneId_StreamName(const wchar_t *s);
581*f6dc9357SAndroid Build Coastguard Worker void ReadZoneFile_Of_BaseFile(CFSTR fileName, CByteBuffer &buf);
582*f6dc9357SAndroid Build Coastguard Worker bool WriteZoneFile_To_BaseFile(CFSTR fileName, const CByteBuffer &buf);
583*f6dc9357SAndroid Build Coastguard Worker 
584*f6dc9357SAndroid Build Coastguard Worker #endif
585