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