xref: /aosp_15_r20/external/lzma/CPP/7zip/Common/FileStreams.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // FileStreams.h
2*f6dc9357SAndroid Build Coastguard Worker 
3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_FILE_STREAMS_H
4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_FILE_STREAMS_H
5*f6dc9357SAndroid Build Coastguard Worker 
6*f6dc9357SAndroid Build Coastguard Worker #ifdef _WIN32
7*f6dc9357SAndroid Build Coastguard Worker #define Z7_FILE_STREAMS_USE_WIN_FILE
8*f6dc9357SAndroid Build Coastguard Worker #endif
9*f6dc9357SAndroid Build Coastguard Worker 
10*f6dc9357SAndroid Build Coastguard Worker #include "../../Common/MyCom.h"
11*f6dc9357SAndroid Build Coastguard Worker #include "../../Common/MyString.h"
12*f6dc9357SAndroid Build Coastguard Worker 
13*f6dc9357SAndroid Build Coastguard Worker #include "../../Windows/FileIO.h"
14*f6dc9357SAndroid Build Coastguard Worker 
15*f6dc9357SAndroid Build Coastguard Worker #include "../IStream.h"
16*f6dc9357SAndroid Build Coastguard Worker 
17*f6dc9357SAndroid Build Coastguard Worker #include "UniqBlocks.h"
18*f6dc9357SAndroid Build Coastguard Worker 
19*f6dc9357SAndroid Build Coastguard Worker 
20*f6dc9357SAndroid Build Coastguard Worker class CInFileStream;
21*f6dc9357SAndroid Build Coastguard Worker 
22*f6dc9357SAndroid Build Coastguard Worker Z7_PURE_INTERFACES_BEGIN
DECLARE_INTERFACE(IInFileStream_Callback)23*f6dc9357SAndroid Build Coastguard Worker DECLARE_INTERFACE(IInFileStream_Callback)
24*f6dc9357SAndroid Build Coastguard Worker {
25*f6dc9357SAndroid Build Coastguard Worker   virtual HRESULT InFileStream_On_Error(UINT_PTR val, DWORD error) = 0;
26*f6dc9357SAndroid Build Coastguard Worker   virtual void InFileStream_On_Destroy(CInFileStream *stream, UINT_PTR val) = 0;
27*f6dc9357SAndroid Build Coastguard Worker };
28*f6dc9357SAndroid Build Coastguard Worker Z7_PURE_INTERFACES_END
29*f6dc9357SAndroid Build Coastguard Worker 
30*f6dc9357SAndroid Build Coastguard Worker 
31*f6dc9357SAndroid Build Coastguard Worker /*
32*f6dc9357SAndroid Build Coastguard Worker Z7_CLASS_IMP_COM_5(
33*f6dc9357SAndroid Build Coastguard Worker   CInFileStream
34*f6dc9357SAndroid Build Coastguard Worker   , IInStream
35*f6dc9357SAndroid Build Coastguard Worker   , IStreamGetSize
36*f6dc9357SAndroid Build Coastguard Worker   , IStreamGetProps
37*f6dc9357SAndroid Build Coastguard Worker   , IStreamGetProps2
38*f6dc9357SAndroid Build Coastguard Worker   , IStreamGetProp
39*f6dc9357SAndroid Build Coastguard Worker )
40*f6dc9357SAndroid Build Coastguard Worker */
Z7_class_final(CInFileStream)41*f6dc9357SAndroid Build Coastguard Worker Z7_class_final(CInFileStream) :
42*f6dc9357SAndroid Build Coastguard Worker   public IInStream,
43*f6dc9357SAndroid Build Coastguard Worker   public IStreamGetSize,
44*f6dc9357SAndroid Build Coastguard Worker   public IStreamGetProps,
45*f6dc9357SAndroid Build Coastguard Worker   public IStreamGetProps2,
46*f6dc9357SAndroid Build Coastguard Worker   public IStreamGetProp,
47*f6dc9357SAndroid Build Coastguard Worker   public CMyUnknownImp
48*f6dc9357SAndroid Build Coastguard Worker {
49*f6dc9357SAndroid Build Coastguard Worker   Z7_COM_UNKNOWN_IMP_6(
50*f6dc9357SAndroid Build Coastguard Worker       IInStream,
51*f6dc9357SAndroid Build Coastguard Worker       ISequentialInStream,
52*f6dc9357SAndroid Build Coastguard Worker       IStreamGetSize,
53*f6dc9357SAndroid Build Coastguard Worker       IStreamGetProps,
54*f6dc9357SAndroid Build Coastguard Worker       IStreamGetProps2,
55*f6dc9357SAndroid Build Coastguard Worker       IStreamGetProp)
56*f6dc9357SAndroid Build Coastguard Worker 
57*f6dc9357SAndroid Build Coastguard Worker   Z7_IFACE_COM7_IMP(ISequentialInStream)
58*f6dc9357SAndroid Build Coastguard Worker   Z7_IFACE_COM7_IMP(IInStream)
59*f6dc9357SAndroid Build Coastguard Worker public:
60*f6dc9357SAndroid Build Coastguard Worker   Z7_IFACE_COM7_IMP(IStreamGetSize)
61*f6dc9357SAndroid Build Coastguard Worker private:
62*f6dc9357SAndroid Build Coastguard Worker   Z7_IFACE_COM7_IMP(IStreamGetProps)
63*f6dc9357SAndroid Build Coastguard Worker public:
64*f6dc9357SAndroid Build Coastguard Worker   Z7_IFACE_COM7_IMP(IStreamGetProps2)
65*f6dc9357SAndroid Build Coastguard Worker   Z7_IFACE_COM7_IMP(IStreamGetProp)
66*f6dc9357SAndroid Build Coastguard Worker 
67*f6dc9357SAndroid Build Coastguard Worker private:
68*f6dc9357SAndroid Build Coastguard Worker   NWindows::NFile::NIO::CInFile File;
69*f6dc9357SAndroid Build Coastguard Worker public:
70*f6dc9357SAndroid Build Coastguard Worker 
71*f6dc9357SAndroid Build Coastguard Worker   #ifdef Z7_FILE_STREAMS_USE_WIN_FILE
72*f6dc9357SAndroid Build Coastguard Worker 
73*f6dc9357SAndroid Build Coastguard Worker   #ifdef Z7_DEVICE_FILE
74*f6dc9357SAndroid Build Coastguard Worker   UInt64 VirtPos;
75*f6dc9357SAndroid Build Coastguard Worker   UInt64 PhyPos;
76*f6dc9357SAndroid Build Coastguard Worker   UInt64 BufStartPos;
77*f6dc9357SAndroid Build Coastguard Worker   Byte *Buf;
78*f6dc9357SAndroid Build Coastguard Worker   UInt32 BufSize;
79*f6dc9357SAndroid Build Coastguard Worker   #endif
80*f6dc9357SAndroid Build Coastguard Worker 
81*f6dc9357SAndroid Build Coastguard Worker   #endif
82*f6dc9357SAndroid Build Coastguard Worker 
83*f6dc9357SAndroid Build Coastguard Worker  #ifdef _WIN32
84*f6dc9357SAndroid Build Coastguard Worker   BY_HANDLE_FILE_INFORMATION _info;
85*f6dc9357SAndroid Build Coastguard Worker  #else
86*f6dc9357SAndroid Build Coastguard Worker   struct stat _info;
87*f6dc9357SAndroid Build Coastguard Worker   UInt32 _uid;
88*f6dc9357SAndroid Build Coastguard Worker   UInt32 _gid;
89*f6dc9357SAndroid Build Coastguard Worker   UString OwnerName;
90*f6dc9357SAndroid Build Coastguard Worker   UString OwnerGroup;
91*f6dc9357SAndroid Build Coastguard Worker   bool StoreOwnerId;
92*f6dc9357SAndroid Build Coastguard Worker   bool StoreOwnerName;
93*f6dc9357SAndroid Build Coastguard Worker  #endif
94*f6dc9357SAndroid Build Coastguard Worker 
95*f6dc9357SAndroid Build Coastguard Worker   bool _info_WasLoaded;
96*f6dc9357SAndroid Build Coastguard Worker   bool SupportHardLinks;
97*f6dc9357SAndroid Build Coastguard Worker   IInFileStream_Callback *Callback;
98*f6dc9357SAndroid Build Coastguard Worker   UINT_PTR CallbackRef;
99*f6dc9357SAndroid Build Coastguard Worker 
100*f6dc9357SAndroid Build Coastguard Worker   CInFileStream();
101*f6dc9357SAndroid Build Coastguard Worker   ~CInFileStream();
102*f6dc9357SAndroid Build Coastguard Worker 
103*f6dc9357SAndroid Build Coastguard Worker   void Set_PreserveATime(bool v)
104*f6dc9357SAndroid Build Coastguard Worker   {
105*f6dc9357SAndroid Build Coastguard Worker     File.PreserveATime = v;
106*f6dc9357SAndroid Build Coastguard Worker   }
107*f6dc9357SAndroid Build Coastguard Worker 
108*f6dc9357SAndroid Build Coastguard Worker   bool GetLength(UInt64 &length) const throw()
109*f6dc9357SAndroid Build Coastguard Worker   {
110*f6dc9357SAndroid Build Coastguard Worker     return File.GetLength(length);
111*f6dc9357SAndroid Build Coastguard Worker   }
112*f6dc9357SAndroid Build Coastguard Worker 
113*f6dc9357SAndroid Build Coastguard Worker #if 0
114*f6dc9357SAndroid Build Coastguard Worker   bool OpenStdIn();
115*f6dc9357SAndroid Build Coastguard Worker #endif
116*f6dc9357SAndroid Build Coastguard Worker 
117*f6dc9357SAndroid Build Coastguard Worker   bool Open(CFSTR fileName)
118*f6dc9357SAndroid Build Coastguard Worker   {
119*f6dc9357SAndroid Build Coastguard Worker     _info_WasLoaded = false;
120*f6dc9357SAndroid Build Coastguard Worker     return File.Open(fileName);
121*f6dc9357SAndroid Build Coastguard Worker   }
122*f6dc9357SAndroid Build Coastguard Worker 
123*f6dc9357SAndroid Build Coastguard Worker   bool OpenShared(CFSTR fileName, bool shareForWrite)
124*f6dc9357SAndroid Build Coastguard Worker   {
125*f6dc9357SAndroid Build Coastguard Worker     _info_WasLoaded = false;
126*f6dc9357SAndroid Build Coastguard Worker     return File.OpenShared(fileName, shareForWrite);
127*f6dc9357SAndroid Build Coastguard Worker   }
128*f6dc9357SAndroid Build Coastguard Worker };
129*f6dc9357SAndroid Build Coastguard Worker 
130*f6dc9357SAndroid Build Coastguard Worker // bool CreateStdInStream(CMyComPtr<ISequentialInStream> &str);
131*f6dc9357SAndroid Build Coastguard Worker 
132*f6dc9357SAndroid Build Coastguard Worker Z7_CLASS_IMP_NOQIB_1(
133*f6dc9357SAndroid Build Coastguard Worker   CStdInFileStream
134*f6dc9357SAndroid Build Coastguard Worker   , ISequentialInStream
135*f6dc9357SAndroid Build Coastguard Worker )
136*f6dc9357SAndroid Build Coastguard Worker };
137*f6dc9357SAndroid Build Coastguard Worker 
138*f6dc9357SAndroid Build Coastguard Worker 
139*f6dc9357SAndroid Build Coastguard Worker Z7_CLASS_IMP_COM_1(
140*f6dc9357SAndroid Build Coastguard Worker   COutFileStream
141*f6dc9357SAndroid Build Coastguard Worker   , IOutStream
142*f6dc9357SAndroid Build Coastguard Worker )
143*f6dc9357SAndroid Build Coastguard Worker   Z7_IFACE_COM7_IMP(ISequentialOutStream)
144*f6dc9357SAndroid Build Coastguard Worker public:
145*f6dc9357SAndroid Build Coastguard Worker 
146*f6dc9357SAndroid Build Coastguard Worker   NWindows::NFile::NIO::COutFile File;
147*f6dc9357SAndroid Build Coastguard Worker 
148*f6dc9357SAndroid Build Coastguard Worker   bool Create_NEW(CFSTR fileName)
149*f6dc9357SAndroid Build Coastguard Worker   {
150*f6dc9357SAndroid Build Coastguard Worker     ProcessedSize = 0;
151*f6dc9357SAndroid Build Coastguard Worker     return File.Create_NEW(fileName);
152*f6dc9357SAndroid Build Coastguard Worker   }
153*f6dc9357SAndroid Build Coastguard Worker 
154*f6dc9357SAndroid Build Coastguard Worker   bool Create_ALWAYS(CFSTR fileName)
155*f6dc9357SAndroid Build Coastguard Worker   {
156*f6dc9357SAndroid Build Coastguard Worker     ProcessedSize = 0;
157*f6dc9357SAndroid Build Coastguard Worker     return File.Create_ALWAYS(fileName);
158*f6dc9357SAndroid Build Coastguard Worker   }
159*f6dc9357SAndroid Build Coastguard Worker 
160*f6dc9357SAndroid Build Coastguard Worker   bool Open_EXISTING(CFSTR fileName)
161*f6dc9357SAndroid Build Coastguard Worker   {
162*f6dc9357SAndroid Build Coastguard Worker     ProcessedSize = 0;
163*f6dc9357SAndroid Build Coastguard Worker     return File.Open_EXISTING(fileName);
164*f6dc9357SAndroid Build Coastguard Worker   }
165*f6dc9357SAndroid Build Coastguard Worker 
166*f6dc9357SAndroid Build Coastguard Worker   bool Create_ALWAYS_or_Open_ALWAYS(CFSTR fileName, bool createAlways)
167*f6dc9357SAndroid Build Coastguard Worker   {
168*f6dc9357SAndroid Build Coastguard Worker     ProcessedSize = 0;
169*f6dc9357SAndroid Build Coastguard Worker     return File.Create_ALWAYS_or_Open_ALWAYS(fileName, createAlways);
170*f6dc9357SAndroid Build Coastguard Worker   }
171*f6dc9357SAndroid Build Coastguard Worker 
172*f6dc9357SAndroid Build Coastguard Worker   HRESULT Close();
173*f6dc9357SAndroid Build Coastguard Worker 
174*f6dc9357SAndroid Build Coastguard Worker   UInt64 ProcessedSize;
175*f6dc9357SAndroid Build Coastguard Worker 
176*f6dc9357SAndroid Build Coastguard Worker   bool SetTime(const CFiTime *cTime, const CFiTime *aTime, const CFiTime *mTime)
177*f6dc9357SAndroid Build Coastguard Worker   {
178*f6dc9357SAndroid Build Coastguard Worker     return File.SetTime(cTime, aTime, mTime);
179*f6dc9357SAndroid Build Coastguard Worker   }
180*f6dc9357SAndroid Build Coastguard Worker   bool SetMTime(const CFiTime *mTime) {  return File.SetMTime(mTime); }
181*f6dc9357SAndroid Build Coastguard Worker 
182*f6dc9357SAndroid Build Coastguard Worker   bool SeekToBegin_bool()
183*f6dc9357SAndroid Build Coastguard Worker   {
184*f6dc9357SAndroid Build Coastguard Worker     #ifdef Z7_FILE_STREAMS_USE_WIN_FILE
185*f6dc9357SAndroid Build Coastguard Worker     return File.SeekToBegin();
186*f6dc9357SAndroid Build Coastguard Worker     #else
187*f6dc9357SAndroid Build Coastguard Worker     return File.seekToBegin() == 0;
188*f6dc9357SAndroid Build Coastguard Worker     #endif
189*f6dc9357SAndroid Build Coastguard Worker   }
190*f6dc9357SAndroid Build Coastguard Worker 
191*f6dc9357SAndroid Build Coastguard Worker   HRESULT GetSize(UInt64 *size);
192*f6dc9357SAndroid Build Coastguard Worker };
193*f6dc9357SAndroid Build Coastguard Worker 
194*f6dc9357SAndroid Build Coastguard Worker 
195*f6dc9357SAndroid Build Coastguard Worker Z7_CLASS_IMP_NOQIB_1(
196*f6dc9357SAndroid Build Coastguard Worker   CStdOutFileStream
197*f6dc9357SAndroid Build Coastguard Worker   , ISequentialOutStream
198*f6dc9357SAndroid Build Coastguard Worker )
199*f6dc9357SAndroid Build Coastguard Worker   UInt64 _size;
200*f6dc9357SAndroid Build Coastguard Worker public:
201*f6dc9357SAndroid Build Coastguard Worker   UInt64 GetSize() const { return _size; }
202*f6dc9357SAndroid Build Coastguard Worker   CStdOutFileStream(): _size(0) {}
203*f6dc9357SAndroid Build Coastguard Worker };
204*f6dc9357SAndroid Build Coastguard Worker 
205*f6dc9357SAndroid Build Coastguard Worker #endif
206