xref: /aosp_15_r20/external/lzma/CPP/7zip/Archive/Wim/WimHandler.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // WimHandler.h
2*f6dc9357SAndroid Build Coastguard Worker 
3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_ARCHIVE_WIM_HANDLER_H
4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_ARCHIVE_WIM_HANDLER_H
5*f6dc9357SAndroid Build Coastguard Worker 
6*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/MyCom.h"
7*f6dc9357SAndroid Build Coastguard Worker 
8*f6dc9357SAndroid Build Coastguard Worker #include "../Common/HandlerOut.h"
9*f6dc9357SAndroid Build Coastguard Worker 
10*f6dc9357SAndroid Build Coastguard Worker #include "WimIn.h"
11*f6dc9357SAndroid Build Coastguard Worker 
12*f6dc9357SAndroid Build Coastguard Worker namespace NArchive {
13*f6dc9357SAndroid Build Coastguard Worker namespace NWim {
14*f6dc9357SAndroid Build Coastguard Worker 
15*f6dc9357SAndroid Build Coastguard Worker const Int32 kNumImagesMaxUpdate = 1 << 10;
16*f6dc9357SAndroid Build Coastguard Worker 
17*f6dc9357SAndroid Build Coastguard Worker Z7_CLASS_IMP_CHandler_IInArchive_5(
18*f6dc9357SAndroid Build Coastguard Worker     IArchiveGetRawProps
19*f6dc9357SAndroid Build Coastguard Worker   , IArchiveGetRootProps
20*f6dc9357SAndroid Build Coastguard Worker   , IArchiveKeepModeForNextOpen
21*f6dc9357SAndroid Build Coastguard Worker   , ISetProperties
22*f6dc9357SAndroid Build Coastguard Worker   , IOutArchive
23*f6dc9357SAndroid Build Coastguard Worker )
24*f6dc9357SAndroid Build Coastguard Worker   CDatabase _db;
25*f6dc9357SAndroid Build Coastguard Worker   UInt32 _version;
26*f6dc9357SAndroid Build Coastguard Worker   UInt32 _bootIndex;
27*f6dc9357SAndroid Build Coastguard Worker 
28*f6dc9357SAndroid Build Coastguard Worker   CObjectVector<CVolume> _volumes;
29*f6dc9357SAndroid Build Coastguard Worker   CObjectVector<CWimXml> _xmls;
30*f6dc9357SAndroid Build Coastguard Worker   // unsigned _nameLenForStreams;
31*f6dc9357SAndroid Build Coastguard Worker 
32*f6dc9357SAndroid Build Coastguard Worker   unsigned _numXmlItems;
33*f6dc9357SAndroid Build Coastguard Worker   unsigned _numIgnoreItems;
34*f6dc9357SAndroid Build Coastguard Worker 
35*f6dc9357SAndroid Build Coastguard Worker   bool _isOldVersion;
36*f6dc9357SAndroid Build Coastguard Worker   bool _xmlInComments;
37*f6dc9357SAndroid Build Coastguard Worker 
38*f6dc9357SAndroid Build Coastguard Worker   bool _xmlError;
39*f6dc9357SAndroid Build Coastguard Worker   bool _isArc;
40*f6dc9357SAndroid Build Coastguard Worker   bool _unsupported;
41*f6dc9357SAndroid Build Coastguard Worker 
42*f6dc9357SAndroid Build Coastguard Worker   bool _set_use_ShowImageNumber;
43*f6dc9357SAndroid Build Coastguard Worker   bool _set_showImageNumber;
44*f6dc9357SAndroid Build Coastguard Worker   int _defaultImageNumber;
45*f6dc9357SAndroid Build Coastguard Worker 
46*f6dc9357SAndroid Build Coastguard Worker   bool _showImageNumber;
47*f6dc9357SAndroid Build Coastguard Worker   bool _keepMode_ShowImageNumber;
48*f6dc9357SAndroid Build Coastguard Worker   bool _disable_Sha1Check;
49*f6dc9357SAndroid Build Coastguard Worker 
50*f6dc9357SAndroid Build Coastguard Worker   UInt64 _phySize;
51*f6dc9357SAndroid Build Coastguard Worker   Int32 _firstVolumeIndex;
52*f6dc9357SAndroid Build Coastguard Worker 
53*f6dc9357SAndroid Build Coastguard Worker   CHandlerTimeOptions _timeOptions;
54*f6dc9357SAndroid Build Coastguard Worker 
InitDefaults()55*f6dc9357SAndroid Build Coastguard Worker   void InitDefaults()
56*f6dc9357SAndroid Build Coastguard Worker   {
57*f6dc9357SAndroid Build Coastguard Worker     _disable_Sha1Check = false;
58*f6dc9357SAndroid Build Coastguard Worker     _set_use_ShowImageNumber = false;
59*f6dc9357SAndroid Build Coastguard Worker     _set_showImageNumber = false;
60*f6dc9357SAndroid Build Coastguard Worker     _defaultImageNumber = -1;
61*f6dc9357SAndroid Build Coastguard Worker     _timeOptions.Init();
62*f6dc9357SAndroid Build Coastguard Worker   }
63*f6dc9357SAndroid Build Coastguard Worker 
IsUpdateSupported()64*f6dc9357SAndroid Build Coastguard Worker   bool IsUpdateSupported() const
65*f6dc9357SAndroid Build Coastguard Worker   {
66*f6dc9357SAndroid Build Coastguard Worker     if (ThereIsError()) return false;
67*f6dc9357SAndroid Build Coastguard Worker     if (_db.Images.Size() > kNumImagesMaxUpdate) return false;
68*f6dc9357SAndroid Build Coastguard Worker 
69*f6dc9357SAndroid Build Coastguard Worker     // Solid format is complicated. So we disable updating now.
70*f6dc9357SAndroid Build Coastguard Worker     if (!_db.Solids.IsEmpty()) return false;
71*f6dc9357SAndroid Build Coastguard Worker 
72*f6dc9357SAndroid Build Coastguard Worker     if (_volumes.Size() == 0)
73*f6dc9357SAndroid Build Coastguard Worker       return true;
74*f6dc9357SAndroid Build Coastguard Worker 
75*f6dc9357SAndroid Build Coastguard Worker     if (_volumes.Size() != 2) return false;
76*f6dc9357SAndroid Build Coastguard Worker     if (_volumes[0].Stream) return false;
77*f6dc9357SAndroid Build Coastguard Worker     if (_version != k_Version_NonSolid
78*f6dc9357SAndroid Build Coastguard Worker         // && _version != k_Version_Solid
79*f6dc9357SAndroid Build Coastguard Worker         ) return false;
80*f6dc9357SAndroid Build Coastguard Worker 
81*f6dc9357SAndroid Build Coastguard Worker     return true;
82*f6dc9357SAndroid Build Coastguard Worker   }
83*f6dc9357SAndroid Build Coastguard Worker 
ThereIsError()84*f6dc9357SAndroid Build Coastguard Worker   bool ThereIsError() const { return _xmlError || _db.ThereIsError(); }
85*f6dc9357SAndroid Build Coastguard Worker   HRESULT GetSecurity(UInt32 realIndex, const void **data, UInt32 *dataSize, UInt32 *propType);
86*f6dc9357SAndroid Build Coastguard Worker 
87*f6dc9357SAndroid Build Coastguard Worker   HRESULT GetOutProperty(IArchiveUpdateCallback *callback, UInt32 callbackIndex, Int32 arcIndex, PROPID propID, PROPVARIANT *value);
88*f6dc9357SAndroid Build Coastguard Worker   HRESULT        GetTime(IArchiveUpdateCallback *callback, UInt32 callbackIndex, Int32 arcIndex, PROPID propID, FILETIME &ft);
89*f6dc9357SAndroid Build Coastguard Worker public:
90*f6dc9357SAndroid Build Coastguard Worker   CHandler();
91*f6dc9357SAndroid Build Coastguard Worker };
92*f6dc9357SAndroid Build Coastguard Worker 
93*f6dc9357SAndroid Build Coastguard Worker }}
94*f6dc9357SAndroid Build Coastguard Worker 
95*f6dc9357SAndroid Build Coastguard Worker #endif
96