1baa3858d3f5d128a5c8466b700098109edcad5f2repo sync// ArchiveExtractCallback.h 2baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 3baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#ifndef __ARCHIVE_EXTRACT_CALLBACK_H 4baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#define __ARCHIVE_EXTRACT_CALLBACK_H 5baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 6cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#include "../../../Common/MyCom.h" 7cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#include "../../../Common/Wildcard.h" 8baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 9baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#include "../../IPassword.h" 10baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 11baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#include "../../Common/FileStreams.h" 12baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#include "../../Common/ProgressUtils.h" 13baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 14baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#include "../../Archive/IArchive.h" 15baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 16baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#include "ExtractMode.h" 17baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#include "IFileExtractCallback.h" 18baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#include "OpenArchive.h" 19baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 20cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#include "HashCalc.h" 21cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 22cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#ifndef _SFX 23cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 24cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyclass COutStreamWithHash: 25cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky public ISequentialOutStream, 26cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky public CMyUnknownImp 27cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{ 28cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky CMyComPtr<ISequentialOutStream> _stream; 29cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UInt64 _size; 30cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool _calculate; 31cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckypublic: 32cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky IHashCalc *_hash; 33cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 34cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky MY_UNKNOWN_IMP 35cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); 36cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void SetStream(ISequentialOutStream *stream) { _stream = stream; } 37cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void ReleaseStream() { _stream.Release(); } 38cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void Init(bool calculate = true) 39cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky { 40cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky InitCRC(); 41cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky _size = 0; 42cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky _calculate = calculate; 43cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky } 44cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void EnableCalc(bool calculate) { _calculate = calculate; } 45cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void InitCRC() { _hash->InitForNewFile(); } 46cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UInt64 GetSize() const { return _size; } 47cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}; 48cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 49cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#endif 50cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 51cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckystruct CExtractNtOptions 52cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{ 53cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky CBoolPair NtSecurity; 54cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky CBoolPair SymLinks; 55cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky CBoolPair HardLinks; 56cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky CBoolPair AltStreams; 57cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool ReplaceColonForAltStream; 58cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool WriteToAltStreamIfColon; 59cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 60cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky CExtractNtOptions(): 61cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky ReplaceColonForAltStream(false), 62cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky WriteToAltStreamIfColon(false) 63cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky { 64cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky SymLinks.Val = true; 65cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky HardLinks.Val = true; 66cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky AltStreams.Val = true; 67cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky } 68cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}; 69cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 70cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#ifndef _SFX 71cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 72cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyclass CGetProp: 73cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky public IGetProp, 74cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky public CMyUnknownImp 75cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{ 76cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckypublic: 77cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky const CArc *Arc; 78cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UInt32 IndexInArc; 79f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka // UString Name; // relative path 80cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 81cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky MY_UNKNOWN_IMP1(IGetProp) 82cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky INTERFACE_IGetProp(;) 83cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}; 84cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 85cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#endif 86cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 87cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#ifndef _SFX 88cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#ifndef UNDER_CE 89cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 90cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#define SUPPORT_LINKS 91cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 92cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#endif 93cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#endif 94cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 95cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 96cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#ifdef SUPPORT_LINKS 97cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 98cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckystruct CHardLinkNode 99cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{ 100cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UInt64 StreamId; 101cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UInt64 INode; 102cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 103cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky int Compare(const CHardLinkNode &a) const; 104cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}; 105cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 106cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyclass CHardLinks 107cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{ 108cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckypublic: 109cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky CRecordVector<CHardLinkNode> IDs; 110cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky CObjectVector<FString> Links; 111cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 112cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void Clear() 113cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky { 114cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky IDs.Clear(); 115cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky Links.Clear(); 116cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky } 117cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 118cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void PrepareLinks() 119cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky { 120cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky while (Links.Size() < IDs.Size()) 121cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky Links.AddNew(); 122cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky } 123cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}; 124cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 125cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#endif 126cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 127f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka#ifdef SUPPORT_ALT_STREAMS 128f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 129f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osakastruct CIndexToPathPair 130f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka{ 131f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka UInt32 Index; 132f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka FString Path; 133f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 134f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka CIndexToPathPair(UInt32 index): Index(index) {} 135f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka CIndexToPathPair(UInt32 index, const FString &path): Index(index), Path(path) {} 136f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 137f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka int Compare(const CIndexToPathPair &pair) const 138f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka { 139f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka return MyCompare(Index, pair.Index); 140f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka } 141f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka}; 142f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 143f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka#endif 144f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 145baa3858d3f5d128a5c8466b700098109edcad5f2repo syncclass CArchiveExtractCallback: 146baa3858d3f5d128a5c8466b700098109edcad5f2repo sync public IArchiveExtractCallback, 147f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka public IArchiveExtractCallbackMessage, 148baa3858d3f5d128a5c8466b700098109edcad5f2repo sync public ICryptoGetTextPassword, 149baa3858d3f5d128a5c8466b700098109edcad5f2repo sync public ICompressProgressInfo, 150baa3858d3f5d128a5c8466b700098109edcad5f2repo sync public CMyUnknownImp 151baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 152baa3858d3f5d128a5c8466b700098109edcad5f2repo sync const CArc *_arc; 153cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky CExtractNtOptions _ntOptions; 154cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 155f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka const NWildcard::CCensorNode *_wildcardCensor; // we need wildcard for single pass mode (stdin) 156baa3858d3f5d128a5c8466b700098109edcad5f2repo sync CMyComPtr<IFolderArchiveExtractCallback> _extractCallback2; 157baa3858d3f5d128a5c8466b700098109edcad5f2repo sync CMyComPtr<ICompressProgressInfo> _compressProgress; 158baa3858d3f5d128a5c8466b700098109edcad5f2repo sync CMyComPtr<ICryptoGetTextPassword> _cryptoGetTextPassword; 159f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka CMyComPtr<IArchiveExtractCallbackMessage> _callbackMessage; 160f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka CMyComPtr<IFolderArchiveExtractCallback2> _folderArchiveExtractCallback2; 161f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 162f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka FString _dirPathPrefix; 163f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka FString _dirPathPrefix_Full; 164baa3858d3f5d128a5c8466b700098109edcad5f2repo sync NExtract::NPathMode::EEnum _pathMode; 165baa3858d3f5d128a5c8466b700098109edcad5f2repo sync NExtract::NOverwriteMode::EEnum _overwriteMode; 166baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 167cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #ifndef _SFX 168cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 169cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky CMyComPtr<IFolderExtractToStreamCallback> ExtractToStreamCallback; 170cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky CGetProp *GetProp_Spec; 171cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky CMyComPtr<IGetProp> GetProp; 172cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 173cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #endif 174cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 175f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka CReadArcItem _item; 176cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky FString _diskFilePath; 177baa3858d3f5d128a5c8466b700098109edcad5f2repo sync UInt64 _position; 178baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool _isSplit; 179baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 180baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool _extractMode; 181baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 182baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool WriteCTime; 183baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool WriteATime; 184baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool WriteMTime; 185baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 186baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool _encrypted; 187baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 188baa3858d3f5d128a5c8466b700098109edcad5f2repo sync struct CProcessedFileInfo 189baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 190baa3858d3f5d128a5c8466b700098109edcad5f2repo sync FILETIME CTime; 191baa3858d3f5d128a5c8466b700098109edcad5f2repo sync FILETIME ATime; 192baa3858d3f5d128a5c8466b700098109edcad5f2repo sync FILETIME MTime; 193baa3858d3f5d128a5c8466b700098109edcad5f2repo sync UInt32 Attrib; 194baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 195baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool CTimeDefined; 196baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool ATimeDefined; 197baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool MTimeDefined; 198baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool AttribDefined; 199baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } _fi; 200baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 201baa3858d3f5d128a5c8466b700098109edcad5f2repo sync UInt32 _index; 202baa3858d3f5d128a5c8466b700098109edcad5f2repo sync UInt64 _curSize; 203baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool _curSizeDefined; 204baa3858d3f5d128a5c8466b700098109edcad5f2repo sync COutFileStream *_outFileStreamSpec; 205baa3858d3f5d128a5c8466b700098109edcad5f2repo sync CMyComPtr<ISequentialOutStream> _outFileStream; 206baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 207cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #ifndef _SFX 208cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 209cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky COutStreamWithHash *_hashStreamSpec; 210cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky CMyComPtr<ISequentialOutStream> _hashStream; 211cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool _hashStreamWasUsed; 212cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 213cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #endif 214baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 215f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka bool _removePartsForAltStreams; 216baa3858d3f5d128a5c8466b700098109edcad5f2repo sync UStringVector _removePathParts; 217f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 218f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka #ifndef _SFX 219cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool _use_baseParentFolder_mode; 220cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UInt32 _baseParentFolder; 221f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka #endif 222baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 223baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool _stdOutMode; 224baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool _testMode; 225baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool _multiArchives; 226baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 227baa3858d3f5d128a5c8466b700098109edcad5f2repo sync CMyComPtr<ICompressProgressInfo> _localProgress; 228baa3858d3f5d128a5c8466b700098109edcad5f2repo sync UInt64 _packTotal; 229f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 230f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka UInt64 _progressTotal; 231f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka bool _progressTotal_Defined; 232baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 233cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky FStringVector _extractedFolderPaths; 234cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky CRecordVector<UInt32> _extractedFolderIndices; 235cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 236cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #if defined(_WIN32) && !defined(UNDER_CE) && !defined(_SFX) 237cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool _saclEnabled; 238cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #endif 239cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 240cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void CreateComplexDirectory(const UStringVector &dirPathParts, FString &fullPath); 241baa3858d3f5d128a5c8466b700098109edcad5f2repo sync HRESULT GetTime(int index, PROPID propID, FILETIME &filetime, bool &filetimeIsDefined); 242baa3858d3f5d128a5c8466b700098109edcad5f2repo sync HRESULT GetUnpackSize(); 243baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 244cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky HRESULT SendMessageError(const char *message, const FString &path); 245f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka HRESULT SendMessageError_with_LastError(const char *message, const FString &path); 246cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky HRESULT SendMessageError2(const char *message, const FString &path1, const FString &path2); 247cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 248baa3858d3f5d128a5c8466b700098109edcad5f2repo syncpublic: 249baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 250baa3858d3f5d128a5c8466b700098109edcad5f2repo sync CLocalProgress *LocalProgressSpec; 251baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 252baa3858d3f5d128a5c8466b700098109edcad5f2repo sync UInt64 NumFolders; 253baa3858d3f5d128a5c8466b700098109edcad5f2repo sync UInt64 NumFiles; 254cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UInt64 NumAltStreams; 255baa3858d3f5d128a5c8466b700098109edcad5f2repo sync UInt64 UnpackSize; 256cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UInt64 AltStreams_UnpackSize; 257baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 258f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka MY_UNKNOWN_IMP3(IArchiveExtractCallbackMessage, ICryptoGetTextPassword, ICompressProgressInfo) 259baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 260baa3858d3f5d128a5c8466b700098109edcad5f2repo sync INTERFACE_IArchiveExtractCallback(;) 261f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka INTERFACE_IArchiveExtractCallbackMessage(;) 262baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 263baa3858d3f5d128a5c8466b700098109edcad5f2repo sync STDMETHOD(SetRatioInfo)(const UInt64 *inSize, const UInt64 *outSize); 264baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 265baa3858d3f5d128a5c8466b700098109edcad5f2repo sync STDMETHOD(CryptoGetTextPassword)(BSTR *password); 266baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 267cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky CArchiveExtractCallback(); 268baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 269baa3858d3f5d128a5c8466b700098109edcad5f2repo sync void InitForMulti(bool multiArchives, 270baa3858d3f5d128a5c8466b700098109edcad5f2repo sync NExtract::NPathMode::EEnum pathMode, 271baa3858d3f5d128a5c8466b700098109edcad5f2repo sync NExtract::NOverwriteMode::EEnum overwriteMode) 272baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 273baa3858d3f5d128a5c8466b700098109edcad5f2repo sync _multiArchives = multiArchives; 274baa3858d3f5d128a5c8466b700098109edcad5f2repo sync _pathMode = pathMode; 275baa3858d3f5d128a5c8466b700098109edcad5f2repo sync _overwriteMode = overwriteMode; 276cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky NumFolders = NumFiles = NumAltStreams = UnpackSize = AltStreams_UnpackSize = 0; 277cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky } 278cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 279cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #ifndef _SFX 280cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 281cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void SetHashMethods(IHashCalc *hash) 282cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky { 283cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky if (!hash) 284cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky return; 285cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky _hashStreamSpec = new COutStreamWithHash; 286cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky _hashStream = _hashStreamSpec; 287cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky _hashStreamSpec->_hash = hash; 288baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 289baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 290cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #endif 291cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 292baa3858d3f5d128a5c8466b700098109edcad5f2repo sync void Init( 293cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky const CExtractNtOptions &ntOptions, 294baa3858d3f5d128a5c8466b700098109edcad5f2repo sync const NWildcard::CCensorNode *wildcardCensor, 295baa3858d3f5d128a5c8466b700098109edcad5f2repo sync const CArc *arc, 296baa3858d3f5d128a5c8466b700098109edcad5f2repo sync IFolderArchiveExtractCallback *extractCallback2, 297cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool stdOutMode, bool testMode, 298cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky const FString &directoryPath, 299f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka const UStringVector &removePathParts, bool removePartsForAltStreams, 300baa3858d3f5d128a5c8466b700098109edcad5f2repo sync UInt64 packSize); 301baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 302f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 303cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #ifdef SUPPORT_LINKS 304f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 305cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyprivate: 306cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky CHardLinks _hardLinks; 307f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka UString linkPath; 308f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 309f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka // FString _CopyFile_Path; 310f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka // HRESULT MyCopyFile(ISequentialOutStream *outStream); 311f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 312cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckypublic: 313cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky // call PrepareHardLinks() after Init() 314cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky HRESULT PrepareHardLinks(const CRecordVector<UInt32> *realIndices); // NULL means all items 315f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 316f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka #endif 317f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 318f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 319f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka #ifdef SUPPORT_ALT_STREAMS 320f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka CObjectVector<CIndexToPathPair> _renamedFiles; 321cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #endif 322cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 323cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky // call it after Init() 324cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 325f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka #ifndef _SFX 326cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void SetBaseParentFolderIndex(UInt32 indexInArc) 327cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky { 328cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky _baseParentFolder = indexInArc; 329f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka _use_baseParentFolder_mode = true; 330cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky } 331f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka #endif 332cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 333cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky HRESULT SetDirsTimes(); 334baa3858d3f5d128a5c8466b700098109edcad5f2repo sync}; 335baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 336f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osakabool CensorNode_CheckPath(const NWildcard::CCensorNode &node, const CReadArcItem &item); 337f955a79a9fffb09826cf7547f70d08c3798a2f50Tetsuo Osaka 338baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#endif 339