68 lines
2.1 KiB
C++
68 lines
2.1 KiB
C++
#ifndef _RAR_EXTRACT_
|
|
#define _RAR_EXTRACT_
|
|
|
|
enum EXTRACT_ARC_CODE {EXTRACT_ARC_NEXT,EXTRACT_ARC_REPEAT};
|
|
|
|
class CmdExtract
|
|
{
|
|
private:
|
|
EXTRACT_ARC_CODE ExtractArchive();
|
|
bool ExtractFileCopy(File &New,wchar *ArcName,wchar *NameNew,wchar *NameExisting,size_t NameExistingSize);
|
|
void ExtrPrepareName(Archive &Arc,const wchar *ArcFileName,wchar *DestName,size_t DestSize);
|
|
#ifdef RARDLL
|
|
bool ExtrDllGetPassword();
|
|
#else
|
|
bool ExtrGetPassword(Archive &Arc,const wchar *ArcFileName);
|
|
#endif
|
|
#if defined(_WIN_ALL) && !defined(SFX_MODULE)
|
|
void ConvertDosPassword(Archive &Arc,SecPassword &DestPwd);
|
|
#endif
|
|
void ExtrCreateDir(Archive &Arc,const wchar *ArcFileName);
|
|
bool ExtrCreateFile(Archive &Arc,File &CurFile);
|
|
bool CheckUnpVer(Archive &Arc,const wchar *ArcFileName);
|
|
#ifndef SFX_MODULE
|
|
bool DetectStartVolume(const wchar *VolName,bool NewNumbering);
|
|
void GetFirstVolIfFullSet(const wchar *SrcName,bool NewNumbering,wchar *DestName,size_t DestSize);
|
|
#endif
|
|
|
|
RarTime StartTime; // Time when extraction started.
|
|
|
|
CommandData *Cmd;
|
|
|
|
ComprDataIO DataIO;
|
|
Unpack *Unp;
|
|
unsigned long TotalFileCount;
|
|
|
|
unsigned long FileCount;
|
|
unsigned long MatchedArgs;
|
|
bool FirstFile;
|
|
bool AllMatchesExact;
|
|
bool ReconstructDone;
|
|
bool UseExactVolName;
|
|
|
|
// If any non-zero solid file was successfully unpacked before current.
|
|
// If true and if current encrypted file is broken, obviously
|
|
// the password is correct and we can report broken CRC without
|
|
// any wrong password hints.
|
|
bool AnySolidDataUnpackedWell;
|
|
|
|
wchar ArcName[NM];
|
|
|
|
bool GlobalPassword;
|
|
bool PrevProcessed; // If previous file was successfully extracted or tested.
|
|
wchar DestFileName[NM];
|
|
bool PasswordCancelled;
|
|
#if defined(_WIN_ALL) && !defined(SFX_MODULE) && !defined(SILENT)
|
|
bool Fat32,NotFat32;
|
|
#endif
|
|
public:
|
|
CmdExtract(CommandData *Cmd);
|
|
~CmdExtract();
|
|
void DoExtract();
|
|
void ExtractArchiveInit(Archive &Arc);
|
|
bool ExtractCurrentFile(Archive &Arc,size_t HeaderSize,bool &Repeat);
|
|
static void UnstoreFile(ComprDataIO &DataIO,int64 DestUnpSize);
|
|
};
|
|
|
|
#endif
|