Mercurial > vba-linux
view src/win32/7zip/7z/CPP/7zip/Archive/Zip/ZipIn.h @ 1:f9f4f1b99eed
importing src directory
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Sat, 03 Mar 2012 10:31:27 -0600 |
parents | |
children |
line wrap: on
line source
1 // Archive/ZipIn.h3 #ifndef __ZIP_IN_H4 #define __ZIP_IN_H6 #include "../../../Common/MyCom.h"7 #include "../../IStream.h"9 #include "ZipHeader.h"10 #include "ZipItemEx.h"12 namespace NArchive {13 namespace NZip {15 class CInArchiveException16 {17 public:18 enum ECauseType19 {20 kUnexpectedEndOfArchive = 0,21 kArchiceHeaderCRCError,22 kFileHeaderCRCError,23 kIncorrectArchive,24 kDataDescroptorsAreNotSupported,25 kMultiVolumeArchiveAreNotSupported,26 kReadStreamError,27 kSeekStreamError28 }29 Cause;30 CInArchiveException(ECauseType cause): Cause(cause) {}31 };33 class CInArchiveInfo34 {35 public:36 UInt64 Base;37 UInt64 StartPosition;38 CByteBuffer Comment;39 CInArchiveInfo(): Base(0), StartPosition(0) {}40 void Clear()41 {42 Base = 0;43 StartPosition = 0;44 Comment.SetCapacity(0);45 }46 };48 class CProgressVirt49 {50 public:51 STDMETHOD(SetTotal)(UInt64 numFiles) PURE;52 STDMETHOD(SetCompleted)(UInt64 numFiles) PURE;53 };55 struct CCdInfo56 {57 // UInt64 NumEntries;58 UInt64 Size;59 UInt64 Offset;60 };62 class CInArchive63 {64 CMyComPtr<IInStream> m_Stream;65 UInt32 m_Signature;66 UInt64 m_StreamStartPosition;67 UInt64 m_Position;68 AString m_NameBuffer;70 HRESULT Seek(UInt64 offset);72 HRESULT FindAndReadMarker(IInStream *stream, const UInt64 *searchHeaderSizeLimit);73 bool ReadUInt32(UInt32 &signature);74 AString ReadFileName(UInt32 nameSize);76 HRESULT ReadBytes(void *data, UInt32 size, UInt32 *processedSize);77 bool ReadBytesAndTestSize(void *data, UInt32 size);78 void SafeReadBytes(void *data, UInt32 size);79 void ReadBuffer(CByteBuffer &buffer, UInt32 size);80 Byte ReadByte();81 UInt16 ReadUInt16();82 UInt32 ReadUInt32();83 UInt64 ReadUInt64();85 void IncreaseRealPosition(UInt64 addValue);87 void ReadExtra(UInt32 extraSize, CExtraBlock &extraBlock,88 UInt64 &unpackSize, UInt64 &packSize, UInt64 &localHeaderOffset, UInt32 &diskStartNumber);89 HRESULT ReadLocalItem(CItemEx &item);90 HRESULT ReadLocalItemDescriptor(CItemEx &item);91 HRESULT ReadCdItem(CItemEx &item);92 HRESULT TryEcd64(UInt64 offset, CCdInfo &cdInfo);93 HRESULT FindCd(CCdInfo &cdInfo);94 HRESULT TryReadCd(CObjectVector<CItemEx> &items, UInt64 cdOffset, UInt64 cdSize, CProgressVirt *progress);95 HRESULT ReadCd(CObjectVector<CItemEx> &items, UInt64 &cdOffset, UInt64 &cdSize, CProgressVirt *progress);96 HRESULT ReadLocalsAndCd(CObjectVector<CItemEx> &items, CProgressVirt *progress, UInt64 &cdOffset);97 public:98 CInArchiveInfo m_ArchiveInfo;99 bool IsZip64;101 HRESULT ReadHeaders(CObjectVector<CItemEx> &items, CProgressVirt *progress);102 HRESULT ReadLocalItemAfterCdItem(CItemEx &item);103 HRESULT ReadLocalItemAfterCdItemFull(CItemEx &item);104 HRESULT Open(IInStream *stream, const UInt64 *searchHeaderSizeLimit);105 void Close();106 void GetArchiveInfo(CInArchiveInfo &archiveInfo) const;107 bool SeekInArchive(UInt64 position);108 ISequentialInStream *CreateLimitedStream(UInt64 position, UInt64 size);109 IInStream* CreateStream();111 bool IsOpen() const { return m_Stream != NULL; }112 };114 }}116 #endif