xref: /aosp_15_r20/external/lzma/CPP/7zip/Archive/HfsHandler.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // HfsHandler.h
2*f6dc9357SAndroid Build Coastguard Worker 
3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_HFS_HANDLER_H
4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_HFS_HANDLER_H
5*f6dc9357SAndroid Build Coastguard Worker 
6*f6dc9357SAndroid Build Coastguard Worker #include "../../Windows/PropVariant.h"
7*f6dc9357SAndroid Build Coastguard Worker 
8*f6dc9357SAndroid Build Coastguard Worker #include "../Compress/LzfseDecoder.h"
9*f6dc9357SAndroid Build Coastguard Worker #include "../Compress/ZlibDecoder.h"
10*f6dc9357SAndroid Build Coastguard Worker 
11*f6dc9357SAndroid Build Coastguard Worker namespace NArchive {
12*f6dc9357SAndroid Build Coastguard Worker namespace NHfs {
13*f6dc9357SAndroid Build Coastguard Worker 
14*f6dc9357SAndroid Build Coastguard Worker static const UInt32 k_decmpfs_HeaderSize = 16;
15*f6dc9357SAndroid Build Coastguard Worker 
16*f6dc9357SAndroid Build Coastguard Worker struct CCompressHeader
17*f6dc9357SAndroid Build Coastguard Worker {
18*f6dc9357SAndroid Build Coastguard Worker   UInt64 UnpackSize;
19*f6dc9357SAndroid Build Coastguard Worker   UInt32 Method;
20*f6dc9357SAndroid Build Coastguard Worker   Byte DataPos;
21*f6dc9357SAndroid Build Coastguard Worker   bool IsCorrect;
22*f6dc9357SAndroid Build Coastguard Worker   bool IsSupported;
23*f6dc9357SAndroid Build Coastguard Worker   bool IsResource;
24*f6dc9357SAndroid Build Coastguard Worker 
IsMethod_Compressed_InlineCCompressHeader25*f6dc9357SAndroid Build Coastguard Worker   bool IsMethod_Compressed_Inline() const { return DataPos == k_decmpfs_HeaderSize; }
IsMethod_Uncompressed_InlineCCompressHeader26*f6dc9357SAndroid Build Coastguard Worker   bool IsMethod_Uncompressed_Inline() const { return DataPos == k_decmpfs_HeaderSize + 1; }
IsMethod_ResourceCCompressHeader27*f6dc9357SAndroid Build Coastguard Worker   bool IsMethod_Resource() const { return IsResource; }
28*f6dc9357SAndroid Build Coastguard Worker 
29*f6dc9357SAndroid Build Coastguard Worker   void Parse(const Byte *p, size_t size);
30*f6dc9357SAndroid Build Coastguard Worker 
ClearCCompressHeader31*f6dc9357SAndroid Build Coastguard Worker   void Clear()
32*f6dc9357SAndroid Build Coastguard Worker   {
33*f6dc9357SAndroid Build Coastguard Worker     UnpackSize = 0;
34*f6dc9357SAndroid Build Coastguard Worker     Method = 0;
35*f6dc9357SAndroid Build Coastguard Worker     DataPos = 0;
36*f6dc9357SAndroid Build Coastguard Worker     IsCorrect = false;
37*f6dc9357SAndroid Build Coastguard Worker     IsSupported = false;
38*f6dc9357SAndroid Build Coastguard Worker     IsResource = false;
39*f6dc9357SAndroid Build Coastguard Worker   }
40*f6dc9357SAndroid Build Coastguard Worker 
CCompressHeaderCCompressHeader41*f6dc9357SAndroid Build Coastguard Worker   CCompressHeader() { Clear(); }
42*f6dc9357SAndroid Build Coastguard Worker 
43*f6dc9357SAndroid Build Coastguard Worker   void MethodToProp(NWindows::NCOM::CPropVariant &prop) const;
44*f6dc9357SAndroid Build Coastguard Worker };
45*f6dc9357SAndroid Build Coastguard Worker 
46*f6dc9357SAndroid Build Coastguard Worker void MethodsMaskToProp(UInt32 methodsMask, NWindows::NCOM::CPropVariant &prop);
47*f6dc9357SAndroid Build Coastguard Worker 
48*f6dc9357SAndroid Build Coastguard Worker 
49*f6dc9357SAndroid Build Coastguard Worker class CDecoder
50*f6dc9357SAndroid Build Coastguard Worker {
51*f6dc9357SAndroid Build Coastguard Worker   CMyComPtr2_Create<ICompressCoder, NCompress::NZlib::CDecoder> _zlibDecoder;
52*f6dc9357SAndroid Build Coastguard Worker   CMyComPtr2_Create<ICompressCoder, NCompress::NLzfse::CDecoder> _lzfseDecoder;
53*f6dc9357SAndroid Build Coastguard Worker 
54*f6dc9357SAndroid Build Coastguard Worker   CByteBuffer _tableBuf;
55*f6dc9357SAndroid Build Coastguard Worker   CByteBuffer _buf;
56*f6dc9357SAndroid Build Coastguard Worker 
57*f6dc9357SAndroid Build Coastguard Worker   HRESULT ExtractResourceFork_ZLIB(
58*f6dc9357SAndroid Build Coastguard Worker       ISequentialInStream *inStream, ISequentialOutStream *realOutStream,
59*f6dc9357SAndroid Build Coastguard Worker       UInt64 forkSize, UInt64 unpackSize,
60*f6dc9357SAndroid Build Coastguard Worker       UInt64 progressStart, IArchiveExtractCallback *extractCallback);
61*f6dc9357SAndroid Build Coastguard Worker 
62*f6dc9357SAndroid Build Coastguard Worker   HRESULT ExtractResourceFork_LZFSE(
63*f6dc9357SAndroid Build Coastguard Worker       ISequentialInStream *inStream, ISequentialOutStream *realOutStream,
64*f6dc9357SAndroid Build Coastguard Worker       UInt64 forkSize, UInt64 unpackSize,
65*f6dc9357SAndroid Build Coastguard Worker       UInt64 progressStart, IArchiveExtractCallback *extractCallback);
66*f6dc9357SAndroid Build Coastguard Worker 
67*f6dc9357SAndroid Build Coastguard Worker   HRESULT ExtractResourceFork_ZBM(
68*f6dc9357SAndroid Build Coastguard Worker       ISequentialInStream *inStream, ISequentialOutStream *realOutStream,
69*f6dc9357SAndroid Build Coastguard Worker       UInt64 forkSize, UInt64 unpackSize,
70*f6dc9357SAndroid Build Coastguard Worker       UInt64 progressStart, IArchiveExtractCallback *extractCallback);
71*f6dc9357SAndroid Build Coastguard Worker 
72*f6dc9357SAndroid Build Coastguard Worker public:
73*f6dc9357SAndroid Build Coastguard Worker 
74*f6dc9357SAndroid Build Coastguard Worker   HRESULT Extract(
75*f6dc9357SAndroid Build Coastguard Worker       ISequentialInStream *inStreamFork, ISequentialOutStream *realOutStream,
76*f6dc9357SAndroid Build Coastguard Worker       UInt64 forkSize,
77*f6dc9357SAndroid Build Coastguard Worker       const CCompressHeader &compressHeader,
78*f6dc9357SAndroid Build Coastguard Worker       const CByteBuffer *data,
79*f6dc9357SAndroid Build Coastguard Worker       UInt64 progressStart, IArchiveExtractCallback *extractCallback,
80*f6dc9357SAndroid Build Coastguard Worker       int &opRes);
81*f6dc9357SAndroid Build Coastguard Worker 
82*f6dc9357SAndroid Build Coastguard Worker   CDecoder(bool IsAdlerOptional);
83*f6dc9357SAndroid Build Coastguard Worker };
84*f6dc9357SAndroid Build Coastguard Worker 
85*f6dc9357SAndroid Build Coastguard Worker }}
86*f6dc9357SAndroid Build Coastguard Worker 
87*f6dc9357SAndroid Build Coastguard Worker #endif
88