1 #ifndef _RAR_EXTRACT_ 2 #define _RAR_EXTRACT_ 3 4 enum EXTRACT_ARC_CODE {EXTRACT_ARC_NEXT,EXTRACT_ARC_REPEAT}; 5 6 class CmdExtract 7 { 8 private: 9 EXTRACT_ARC_CODE ExtractArchive(); 10 bool ExtractFileCopy(File &New,wchar *ArcName,wchar *NameNew,wchar *NameExisting,size_t NameExistingSize); 11 void ExtrPrepareName(Archive &Arc,const wchar *ArcFileName,wchar *DestName,size_t DestSize); 12 #ifdef RARDLL 13 bool ExtrDllGetPassword(); 14 #else 15 bool ExtrGetPassword(Archive &Arc,const wchar *ArcFileName); 16 #endif 17 #if defined(_WIN_ALL) && !defined(SFX_MODULE) 18 void ConvertDosPassword(Archive &Arc,SecPassword &DestPwd); 19 #endif 20 void ExtrCreateDir(Archive &Arc,const wchar *ArcFileName); 21 bool ExtrCreateFile(Archive &Arc,File &CurFile); 22 bool CheckUnpVer(Archive &Arc,const wchar *ArcFileName); 23 #ifndef SFX_MODULE 24 bool DetectStartVolume(const wchar *VolName,bool NewNumbering); 25 void GetFirstVolIfFullSet(const wchar *SrcName,bool NewNumbering,wchar *DestName,size_t DestSize); 26 #endif 27 28 RarTime StartTime; // Time when extraction started. 29 30 CommandData *Cmd; 31 32 ComprDataIO DataIO; 33 Unpack *Unp; 34 unsigned long TotalFileCount; 35 36 unsigned long FileCount; 37 unsigned long MatchedArgs; 38 bool FirstFile; 39 bool AllMatchesExact; 40 bool ReconstructDone; 41 bool UseExactVolName; 42 43 // If any non-zero solid file was successfully unpacked before current. 44 // If true and if current encrypted file is broken, obviously 45 // the password is correct and we can report broken CRC without 46 // any wrong password hints. 47 bool AnySolidDataUnpackedWell; 48 49 wchar ArcName[NM]; 50 51 bool GlobalPassword; 52 bool PrevProcessed; // If previous file was successfully extracted or tested. 53 wchar DestFileName[NM]; 54 bool PasswordCancelled; 55 #if defined(_WIN_ALL) && !defined(SFX_MODULE) && !defined(SILENT) 56 bool Fat32,NotFat32; 57 #endif 58 public: 59 CmdExtract(CommandData *Cmd); 60 ~CmdExtract(); 61 void DoExtract(); 62 void ExtractArchiveInit(Archive &Arc); 63 bool ExtractCurrentFile(Archive &Arc,size_t HeaderSize,bool &Repeat); 64 static void UnstoreFile(ComprDataIO &DataIO,int64 DestUnpSize); 65 }; 66 67 #endif 68