2013-10-04 15:13:30 +00:00
|
|
|
#ifndef _RAR_ARCHIVE_
|
|
|
|
#define _RAR_ARCHIVE_
|
|
|
|
|
|
|
|
typedef ComprDataIO File;
|
|
|
|
#include "rawread.hpp"
|
|
|
|
|
2014-09-20 13:52:10 +00:00
|
|
|
enum RARFORMAT {RARFMT_NONE,RARFMT14,RARFMT15,RARFMT50,RARFMT_FUTURE};
|
|
|
|
|
2013-10-04 15:13:30 +00:00
|
|
|
class Archive:public File
|
|
|
|
{
|
|
|
|
private:
|
2014-09-20 13:52:10 +00:00
|
|
|
void ConvertFileHeader(FileHeader *hd);
|
|
|
|
void WriteBlock50(HEADER_TYPE HeaderType,BaseBlock *wb,bool OnlySetSize,bool NonFinalWrite);
|
|
|
|
unrar_err_t ReadHeader14(size_t *ReadSize);
|
|
|
|
unrar_err_t ReadHeader15(size_t *ReadSize);
|
|
|
|
unrar_err_t ReadHeader50(size_t *ReadSize);
|
|
|
|
unrar_err_t ProcessExtra50(RawRead *Raw,size_t ExtraSize,BaseBlock *bb);
|
2013-10-04 15:13:30 +00:00
|
|
|
|
|
|
|
RawRead Raw;
|
|
|
|
|
2014-09-20 13:52:10 +00:00
|
|
|
HEADER_TYPE CurHeaderType;
|
|
|
|
|
2013-10-04 15:13:30 +00:00
|
|
|
public:
|
|
|
|
Archive();
|
2014-09-20 13:52:10 +00:00
|
|
|
RARFORMAT IsSignature(const byte *D,size_t Size);
|
2013-10-04 15:13:30 +00:00
|
|
|
unrar_err_t IsArchive();
|
2014-09-20 13:52:10 +00:00
|
|
|
size_t SearchBlock(HEADER_TYPE HeaderType);
|
|
|
|
size_t SearchSubBlock(const wchar *Type);
|
|
|
|
size_t SearchRR();
|
|
|
|
unrar_err_t ReadHeader(size_t *ReadSize);
|
2013-10-04 15:13:30 +00:00
|
|
|
void SeekToNext();
|
|
|
|
bool IsArcDir();
|
|
|
|
bool IsArcLabel();
|
2014-09-20 13:52:10 +00:00
|
|
|
int64 GetStartPos();
|
|
|
|
HEADER_TYPE GetHeaderType() {return(CurHeaderType);};
|
2013-10-04 15:13:30 +00:00
|
|
|
|
|
|
|
BaseBlock ShortBlock;
|
2014-09-20 13:52:10 +00:00
|
|
|
MarkHeader MarkHead;
|
|
|
|
MainHeader MainHead;
|
|
|
|
FileHeader FileHead;
|
|
|
|
EndArcHeader EndArcHead;
|
2013-10-04 15:13:30 +00:00
|
|
|
SubBlockHeader SubBlockHead;
|
|
|
|
FileHeader SubHead;
|
|
|
|
ProtectHeader ProtectHead;
|
|
|
|
|
2014-09-20 13:52:10 +00:00
|
|
|
int64 CurBlockPos;
|
|
|
|
int64 NextBlockPos;
|
2013-10-04 15:13:30 +00:00
|
|
|
|
2014-09-20 13:52:10 +00:00
|
|
|
RARFORMAT Format;
|
2013-10-04 15:13:30 +00:00
|
|
|
bool Solid;
|
|
|
|
enum { SFXSize = 0 }; // self-extracting not supported
|
|
|
|
ushort HeaderCRC;
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|