1baa3858d3f5d128a5c8466b700098109edcad5f2repo sync// DirItem.h 2baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 3baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#ifndef __DIR_ITEM_H 4baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#define __DIR_ITEM_H 5baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 6cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#include "../../../Common/MyString.h" 7cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 8cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#include "../../../Windows/FileFind.h" 9cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 10cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#include "../../Common/UniqBlocks.h" 11cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 12baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#include "../../Archive/IArchive.h" 13baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 14baa3858d3f5d128a5c8466b700098109edcad5f2repo syncstruct CDirItem 15baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 16baa3858d3f5d128a5c8466b700098109edcad5f2repo sync UInt64 Size; 17baa3858d3f5d128a5c8466b700098109edcad5f2repo sync FILETIME CTime; 18baa3858d3f5d128a5c8466b700098109edcad5f2repo sync FILETIME ATime; 19baa3858d3f5d128a5c8466b700098109edcad5f2repo sync FILETIME MTime; 20baa3858d3f5d128a5c8466b700098109edcad5f2repo sync UString Name; 21cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 22cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #if defined(_WIN32) && !defined(UNDER_CE) 23cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky // UString ShortName; 24cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky CByteBuffer ReparseData; 25cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky CByteBuffer ReparseData2; // fixed (reduced) absolute links 26cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 27cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool AreReparseData() const { return ReparseData.Size() != 0 || ReparseData2.Size() != 0; } 28cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #endif 29cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 30baa3858d3f5d128a5c8466b700098109edcad5f2repo sync UInt32 Attrib; 31baa3858d3f5d128a5c8466b700098109edcad5f2repo sync int PhyParent; 32baa3858d3f5d128a5c8466b700098109edcad5f2repo sync int LogParent; 33cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky int SecureIndex; 34cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 35cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool IsAltStream; 36baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 37cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky CDirItem(): PhyParent(-1), LogParent(-1), SecureIndex(-1), IsAltStream(false) {} 38baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool IsDir() const { return (Attrib & FILE_ATTRIBUTE_DIRECTORY) != 0 ; } 39baa3858d3f5d128a5c8466b700098109edcad5f2repo sync}; 40baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 41baa3858d3f5d128a5c8466b700098109edcad5f2repo syncclass CDirItems 42baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 43baa3858d3f5d128a5c8466b700098109edcad5f2repo sync UStringVector Prefixes; 44baa3858d3f5d128a5c8466b700098109edcad5f2repo sync CIntVector PhyParents; 45baa3858d3f5d128a5c8466b700098109edcad5f2repo sync CIntVector LogParents; 46baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 47baa3858d3f5d128a5c8466b700098109edcad5f2repo sync UString GetPrefixesPath(const CIntVector &parents, int index, const UString &name) const; 48cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 49cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void EnumerateDir(int phyParent, int logParent, const FString &phyPrefix); 50cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 51baa3858d3f5d128a5c8466b700098109edcad5f2repo syncpublic: 52baa3858d3f5d128a5c8466b700098109edcad5f2repo sync CObjectVector<CDirItem> Items; 53baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 54cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool SymLinks; 55cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 56cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool ScanAltStreams; 57cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky FStringVector ErrorPaths; 58cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky CRecordVector<DWORD> ErrorCodes; 59cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UInt64 TotalSize; 60baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 61baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 62cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #ifndef UNDER_CE 63cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void SetLinkInfo(CDirItem &dirItem, const NWindows::NFile::NFind::CFileInfo &fi, 64cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky const FString &phyPrefix); 65cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #endif 66baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 67cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void AddError(const FString &path, DWORD errorCode) 68cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky { 69cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky ErrorCodes.Add(errorCode); 70cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky ErrorPaths.Add(path); 71cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky } 72cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 73cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void AddError(const FString &path) 74cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky { 75cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky AddError(path, ::GetLastError()); 76cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky } 77cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 78cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #if defined(_WIN32) && !defined(UNDER_CE) 79cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 80cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky CUniqBlocks SecureBlocks; 81cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky CByteBuffer TempSecureBuf; 82cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool _saclEnabled; 83cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool ReadSecure; 84cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 85cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void AddSecurityItem(const FString &path, int &secureIndex); 86cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 87cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #endif 88cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 89cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky CDirItems(); 90cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 91cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky int GetNumFolders() const { return Prefixes.Size(); } 92cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UString GetPhyPath(unsigned index) const; 93cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UString GetLogPath(unsigned index) const; 94cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 95cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky unsigned AddPrefix(int phyParent, int logParent, const UString &prefix); 96cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void DeleteLastPrefix(); 97cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void EnumerateItems2( 98cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky const FString &phyPrefix, 99baa3858d3f5d128a5c8466b700098109edcad5f2repo sync const UString &logPrefix, 100cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky const FStringVector &filePaths, 101cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky FStringVector *requestedPaths); 102cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 103cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #if defined(_WIN32) && !defined(UNDER_CE) 104cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void FillFixedReparse(); 105cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #endif 106baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 107baa3858d3f5d128a5c8466b700098109edcad5f2repo sync void ReserveDown(); 108baa3858d3f5d128a5c8466b700098109edcad5f2repo sync}; 109baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 110baa3858d3f5d128a5c8466b700098109edcad5f2repo syncstruct CArcItem 111baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 112baa3858d3f5d128a5c8466b700098109edcad5f2repo sync UInt64 Size; 113baa3858d3f5d128a5c8466b700098109edcad5f2repo sync FILETIME MTime; 114baa3858d3f5d128a5c8466b700098109edcad5f2repo sync UString Name; 115baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool IsDir; 116cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool IsAltStream; 117baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool SizeDefined; 118baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool MTimeDefined; 119baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool Censored; 120baa3858d3f5d128a5c8466b700098109edcad5f2repo sync UInt32 IndexInServer; 121baa3858d3f5d128a5c8466b700098109edcad5f2repo sync int TimeType; 122baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 123cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky CArcItem(): IsDir(false), IsAltStream(false), SizeDefined(false), MTimeDefined(false), Censored(false), TimeType(-1) {} 124baa3858d3f5d128a5c8466b700098109edcad5f2repo sync}; 125baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 126baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#endif 127