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