Updated unrar to 3.7.8, patch by Ioan Molnar - thanks!
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22584 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Executable → Regular
@@ -46,9 +46,13 @@ bool Archive::GetComment(Array<byte> *CmtData,Array<wchar> *CmtDataW)
|
|||||||
uint UnpCmtLength;
|
uint UnpCmtLength;
|
||||||
if (OldFormat)
|
if (OldFormat)
|
||||||
{
|
{
|
||||||
|
#ifdef NOCRYPT
|
||||||
|
return(false);
|
||||||
|
#else
|
||||||
UnpCmtLength=GetByte()+(GetByte()<<8);
|
UnpCmtLength=GetByte()+(GetByte()<<8);
|
||||||
CmtLength-=2;
|
CmtLength-=2;
|
||||||
DataIO.SetCmt13Encryption();
|
DataIO.SetCmt13Encryption();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
UnpCmtLength=CommHead.UnpSize;
|
UnpCmtLength=CommHead.UnpSize;
|
||||||
|
|||||||
@@ -957,7 +957,7 @@ void CommandData::OutHelp()
|
|||||||
#endif
|
#endif
|
||||||
#ifndef _WIN_32
|
#ifndef _WIN_32
|
||||||
static MSGID Win32Only[]={
|
static MSGID Win32Only[]={
|
||||||
MCHelpSwIEML,MCHelpSwVD,MCHelpSwAC,MCHelpSwAO,MCHelpSwOS,MCHelpSwIOFF,
|
MCHelpSwIEML,MCHelpSwVD,MCHelpSwAO,MCHelpSwOS,MCHelpSwIOFF,
|
||||||
MCHelpSwEP2,MCHelpSwOC
|
MCHelpSwEP2,MCHelpSwOC
|
||||||
};
|
};
|
||||||
bool Found=false;
|
bool Found=false;
|
||||||
@@ -974,6 +974,10 @@ void CommandData::OutHelp()
|
|||||||
if (Help[I]==MCHelpSwOW)
|
if (Help[I]==MCHelpSwOW)
|
||||||
continue;
|
continue;
|
||||||
#endif
|
#endif
|
||||||
|
#if !defined(_WIN_32) && !defined(_EMX)
|
||||||
|
if (Help[I]==MCHelpSwAC)
|
||||||
|
continue;
|
||||||
|
#endif
|
||||||
#ifndef SAVE_LINKS
|
#ifndef SAVE_LINKS
|
||||||
if (Help[I]==MCHelpSwOL)
|
if (Help[I]==MCHelpSwOL)
|
||||||
continue;
|
continue;
|
||||||
@@ -1035,7 +1039,7 @@ bool CommandData::ExclCheck(char *CheckName,bool CheckFullPath)
|
|||||||
return(true);
|
return(true);
|
||||||
if (InclArgs->ItemsCount()==0)
|
if (InclArgs->ItemsCount()==0)
|
||||||
return(false);
|
return(false);
|
||||||
if (ExclCheckArgs(InclArgs,CheckName,CheckFullPath,MATCH_WILDSUBPATH))
|
if (ExclCheckArgs(InclArgs,CheckName,false,MATCH_WILDSUBPATH))
|
||||||
return(false);
|
return(false);
|
||||||
return(true);
|
return(true);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -326,12 +326,13 @@ void PASCAL RARSetProcessDataProc(HANDLE hArcData,PROCESSDATAPROC ProcessDataPro
|
|||||||
Data->Cmd.ProcessDataProc=ProcessDataProc;
|
Data->Cmd.ProcessDataProc=ProcessDataProc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef NOCRYPT
|
||||||
void PASCAL RARSetPassword(HANDLE hArcData,char *Password)
|
void PASCAL RARSetPassword(HANDLE hArcData,char *Password)
|
||||||
{
|
{
|
||||||
DataSet *Data=(DataSet *)hArcData;
|
DataSet *Data=(DataSet *)hArcData;
|
||||||
strncpyz(Data->Cmd.Password,Password,ASIZE(Data->Cmd.Password));
|
strncpyz(Data->Cmd.Password,Password,ASIZE(Data->Cmd.Password));
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
int PASCAL RARGetDllVersion()
|
int PASCAL RARGetDllVersion()
|
||||||
|
|||||||
@@ -143,6 +143,11 @@ EXTRACT_ARC_CODE CmdExtract::ExtractArchive(CommandData *Cmd)
|
|||||||
|
|
||||||
Arc.ViewComment();
|
Arc.ViewComment();
|
||||||
|
|
||||||
|
// RAR can close a corrupt encrypted archive
|
||||||
|
if (!Arc.IsOpened())
|
||||||
|
return(EXTRACT_ARC_NEXT);
|
||||||
|
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
int Size=Arc.ReadHeader();
|
int Size=Arc.ReadHeader();
|
||||||
|
|||||||
@@ -253,10 +253,12 @@ void File::Flush()
|
|||||||
|
|
||||||
bool File::Delete()
|
bool File::Delete()
|
||||||
{
|
{
|
||||||
if (HandleType!=FILE_HANDLENORMAL || !AllowDelete)
|
if (HandleType!=FILE_HANDLENORMAL)
|
||||||
return(false);
|
return(false);
|
||||||
if (hFile!=BAD_HANDLE)
|
if (hFile!=BAD_HANDLE)
|
||||||
Close();
|
Close();
|
||||||
|
if (!AllowDelete)
|
||||||
|
return(false);
|
||||||
return(DelFile(FileName,FileNameW));
|
return(DelFile(FileName,FileNameW));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ MKDIR_CODE MakeDir(const char *Name,const wchar *NameW,uint Attr)
|
|||||||
|
|
||||||
bool CreatePath(const char *Path,const wchar *PathW,bool SkipLastName)
|
bool CreatePath(const char *Path,const wchar *PathW,bool SkipLastName)
|
||||||
{
|
{
|
||||||
#ifdef _WIN_32
|
#if defined(_WIN_32) || defined(_EMX)
|
||||||
uint DirAttr=0;
|
uint DirAttr=0;
|
||||||
#else
|
#else
|
||||||
uint DirAttr=0777;
|
uint DirAttr=0777;
|
||||||
@@ -211,6 +211,7 @@ Int64 GetFreeDisk(const char *Name)
|
|||||||
return(1457664);
|
return(1457664);
|
||||||
#elif defined(_EMX)
|
#elif defined(_EMX)
|
||||||
int Drive=(!isalpha(Name[0]) || Name[1]!=':') ? 0:etoupper(Name[0])-'A'+1;
|
int Drive=(!isalpha(Name[0]) || Name[1]!=':') ? 0:etoupper(Name[0])-'A'+1;
|
||||||
|
#ifndef _DJGPP
|
||||||
if (_osmode == OS2_MODE)
|
if (_osmode == OS2_MODE)
|
||||||
{
|
{
|
||||||
FSALLOCATE fsa;
|
FSALLOCATE fsa;
|
||||||
@@ -221,12 +222,17 @@ Int64 GetFreeDisk(const char *Name)
|
|||||||
return(FreeSize);
|
return(FreeSize);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
union REGS regs,outregs;
|
union REGS regs,outregs;
|
||||||
memset(®s,0,sizeof(regs));
|
memset(®s,0,sizeof(regs));
|
||||||
regs.h.ah=0x36;
|
regs.h.ah=0x36;
|
||||||
regs.h.dl=Drive;
|
regs.h.dl=Drive;
|
||||||
|
#ifdef _DJGPP
|
||||||
|
int86 (0x21,®s,&outregs);
|
||||||
|
#else
|
||||||
_int86 (0x21,®s,&outregs);
|
_int86 (0x21,®s,&outregs);
|
||||||
|
#endif
|
||||||
if (outregs.x.ax==0xffff)
|
if (outregs.x.ax==0xffff)
|
||||||
return(1457664);
|
return(1457664);
|
||||||
Int64 FreeSize=outregs.x.ax*outregs.x.cx;
|
Int64 FreeSize=outregs.x.ax*outregs.x.cx;
|
||||||
|
|||||||
@@ -162,7 +162,7 @@ bool FindFile::FastFind(const char *FindMask,const wchar *FindMaskW,struct FindD
|
|||||||
return(false);
|
return(false);
|
||||||
}
|
}
|
||||||
#ifdef _DJGPP
|
#ifdef _DJGPP
|
||||||
fd->FileAttr=chmod(FindMask,0);
|
fd->FileAttr=_chmod(FindMask,0);
|
||||||
#elif defined(_EMX)
|
#elif defined(_EMX)
|
||||||
fd->FileAttr=st.st_attr;
|
fd->FileAttr=st.st_attr;
|
||||||
#else
|
#else
|
||||||
|
|||||||
@@ -38,6 +38,11 @@ void ListArchive(CommandData *Cmd)
|
|||||||
if (!Bare)
|
if (!Bare)
|
||||||
{
|
{
|
||||||
Arc.ViewComment();
|
Arc.ViewComment();
|
||||||
|
|
||||||
|
// RAR can close a corrupt encrypted archive
|
||||||
|
if (!Arc.IsOpened())
|
||||||
|
break;
|
||||||
|
|
||||||
mprintf("\n");
|
mprintf("\n");
|
||||||
if (Arc.Solid)
|
if (Arc.Solid)
|
||||||
mprintf(St(MListSolid));
|
mprintf(St(MListSolid));
|
||||||
|
|||||||
@@ -527,6 +527,16 @@ inline void ModelPPM::ClearMask()
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// reset PPM variables after data error allowing safe resuming
|
||||||
|
// of further data processing
|
||||||
|
void ModelPPM::CleanUp()
|
||||||
|
{
|
||||||
|
SubAlloc.StopSubAllocator();
|
||||||
|
SubAlloc.StartSubAllocator(1);
|
||||||
|
StartModelRare(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool ModelPPM::DecodeInit(Unpack *UnpackRead,int &EscChar)
|
bool ModelPPM::DecodeInit(Unpack *UnpackRead,int &EscChar)
|
||||||
{
|
{
|
||||||
int MaxOrder=UnpackRead->GetChar();
|
int MaxOrder=UnpackRead->GetChar();
|
||||||
|
|||||||
@@ -124,6 +124,7 @@ class ModelPPM
|
|||||||
inline void ClearMask();
|
inline void ClearMask();
|
||||||
public:
|
public:
|
||||||
ModelPPM();
|
ModelPPM();
|
||||||
|
void CleanUp(); // reset PPM variables after data error
|
||||||
bool DecodeInit(Unpack *UnpackRead,int &EscChar);
|
bool DecodeInit(Unpack *UnpackRead,int &EscChar);
|
||||||
int DecodeChar();
|
int DecodeChar();
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -334,6 +334,7 @@ bool EnumConfigPaths(char *Path,int Number)
|
|||||||
strcpy(RARFileName,Path);
|
strcpy(RARFileName,Path);
|
||||||
if (Number!=0)
|
if (Number!=0)
|
||||||
return(false);
|
return(false);
|
||||||
|
#ifndef _DJGPP
|
||||||
if (_osmode==OS2_MODE)
|
if (_osmode==OS2_MODE)
|
||||||
{
|
{
|
||||||
PTIB ptib;
|
PTIB ptib;
|
||||||
@@ -342,6 +343,7 @@ bool EnumConfigPaths(char *Path,int Number)
|
|||||||
DosQueryModuleName(ppib->pib_hmte,NM,Path);
|
DosQueryModuleName(ppib->pib_hmte,NM,Path);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
#endif
|
||||||
strcpy(Path,RARFileName);
|
strcpy(Path,RARFileName);
|
||||||
RemoveNameFromPath(Path);
|
RemoveNameFromPath(Path);
|
||||||
return(true);
|
return(true);
|
||||||
@@ -476,8 +478,12 @@ bool IsNameUsable(const char *Name)
|
|||||||
if (Name[0] && Name[1] && strchr(Name+2,':')!=NULL)
|
if (Name[0] && Name[1] && strchr(Name+2,':')!=NULL)
|
||||||
return(false);
|
return(false);
|
||||||
for (const char *s=Name;*s!=0;s=charnext(s))
|
for (const char *s=Name;*s!=0;s=charnext(s))
|
||||||
|
{
|
||||||
if (*s<32)
|
if (*s<32)
|
||||||
return(false);
|
return(false);
|
||||||
|
if (*s==' ' && IsPathDiv(s[1]))
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
return(*Name!=0 && strpbrk(Name,"?*<>|\"")==NULL);
|
return(*Name!=0 && strpbrk(Name,"?*<>|\"")==NULL);
|
||||||
}
|
}
|
||||||
@@ -496,6 +502,8 @@ void MakeNameUsable(char *Name,bool Extended)
|
|||||||
#ifndef _UNIX
|
#ifndef _UNIX
|
||||||
if (s-Name>1 && *s==':')
|
if (s-Name>1 && *s==':')
|
||||||
*s='_';
|
*s='_';
|
||||||
|
if (*s==' ' && IsPathDiv(s[1]))
|
||||||
|
*s='_';
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+11
-5
@@ -179,8 +179,10 @@ bool RarVM::ExecuteCode(VM_PreparedCommand *PreparedCode,int CodeSize)
|
|||||||
VM_PreparedCommand *Cmd=PreparedCode;
|
VM_PreparedCommand *Cmd=PreparedCode;
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
|
#ifndef NORARVM
|
||||||
uint *Op1=GetOperand(&Cmd->Op1);
|
uint *Op1=GetOperand(&Cmd->Op1);
|
||||||
uint *Op2=GetOperand(&Cmd->Op2);
|
uint *Op2=GetOperand(&Cmd->Op2);
|
||||||
|
#endif
|
||||||
switch(Cmd->OpCode)
|
switch(Cmd->OpCode)
|
||||||
{
|
{
|
||||||
#ifndef NORARVM
|
#ifndef NORARVM
|
||||||
@@ -506,7 +508,7 @@ bool RarVM::ExecuteCode(VM_PreparedCommand *PreparedCode,int CodeSize)
|
|||||||
SET_VALUE(Cmd->ByteMode,Op1,Result);
|
SET_VALUE(Cmd->ByteMode,Op1,Result);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif // for #ifndef NORARVM
|
||||||
case VM_RET:
|
case VM_RET:
|
||||||
if (R[7]>=VM_MEMSIZE)
|
if (R[7]>=VM_MEMSIZE)
|
||||||
return(true);
|
return(true);
|
||||||
@@ -767,6 +769,8 @@ void RarVM::Optimize(VM_PreparedProgram *Prg)
|
|||||||
case VM_CMP:
|
case VM_CMP:
|
||||||
Cmd->OpCode=Cmd->ByteMode ? VM_CMPB:VM_CMPD;
|
Cmd->OpCode=Cmd->ByteMode ? VM_CMPB:VM_CMPD;
|
||||||
continue;
|
continue;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
if ((VM_CmdFlags[Cmd->OpCode] & VMCF_CHFLAGS)==0)
|
if ((VM_CmdFlags[Cmd->OpCode] & VMCF_CHFLAGS)==0)
|
||||||
continue;
|
continue;
|
||||||
@@ -801,6 +805,8 @@ void RarVM::Optimize(VM_PreparedProgram *Prg)
|
|||||||
case VM_NEG:
|
case VM_NEG:
|
||||||
Cmd->OpCode=Cmd->ByteMode ? VM_NEGB:VM_NEGD;
|
Cmd->OpCode=Cmd->ByteMode ? VM_NEGB:VM_NEGD;
|
||||||
continue;
|
continue;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -843,12 +849,12 @@ void RarVM::ExecuteStandardFilter(VM_StandardFilters FilterType)
|
|||||||
int DataSize=R[4];
|
int DataSize=R[4];
|
||||||
uint FileOffset=R[6];
|
uint FileOffset=R[6];
|
||||||
|
|
||||||
if (DataSize>=VM_GLOBALMEMADDR)
|
if (DataSize>=VM_GLOBALMEMADDR || DataSize<4)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
const int FileSize=0x1000000;
|
const int FileSize=0x1000000;
|
||||||
byte CmpByte2=FilterType==VMSF_E8E9 ? 0xe9:0xe8;
|
byte CmpByte2=FilterType==VMSF_E8E9 ? 0xe9:0xe8;
|
||||||
for (uint CurPos=0;CurPos<DataSize-4;)
|
for (int CurPos=0;CurPos<DataSize-4;)
|
||||||
{
|
{
|
||||||
byte CurByte=*(Data++);
|
byte CurByte=*(Data++);
|
||||||
CurPos++;
|
CurPos++;
|
||||||
@@ -889,10 +895,10 @@ void RarVM::ExecuteStandardFilter(VM_StandardFilters FilterType)
|
|||||||
int DataSize=R[4];
|
int DataSize=R[4];
|
||||||
uint FileOffset=R[6];
|
uint FileOffset=R[6];
|
||||||
|
|
||||||
if (DataSize>=VM_GLOBALMEMADDR)
|
if (DataSize>=VM_GLOBALMEMADDR || DataSize<21)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
uint CurPos=0;
|
int CurPos=0;
|
||||||
|
|
||||||
FileOffset>>=4;
|
FileOffset>>=4;
|
||||||
|
|
||||||
|
|||||||
@@ -62,9 +62,13 @@ int ComprDataIO::UnpRead(byte *Addr,uint Count)
|
|||||||
PackedCRC=CRC(PackedCRC,ReadAddr,ReadSize);
|
PackedCRC=CRC(PackedCRC,ReadAddr,ReadSize);
|
||||||
}
|
}
|
||||||
CurUnpRead+=RetCode;
|
CurUnpRead+=RetCode;
|
||||||
ReadAddr+=RetCode;
|
|
||||||
TotalRead+=RetCode;
|
TotalRead+=RetCode;
|
||||||
|
#ifndef NOVOLUME
|
||||||
|
// these variable are not used below in NOVOLUME mode, so it is better
|
||||||
|
// to exclude these commands to avoid compiler warnings
|
||||||
|
ReadAddr+=RetCode;
|
||||||
Count-=RetCode;
|
Count-=RetCode;
|
||||||
|
#endif
|
||||||
UnpPackedSize-=RetCode;
|
UnpPackedSize-=RetCode;
|
||||||
if (UnpPackedSize == 0 && UnpVolume)
|
if (UnpPackedSize == 0 && UnpVolume)
|
||||||
{
|
{
|
||||||
@@ -230,7 +234,7 @@ void ComprDataIO::SetEncryption(int Method,char *Password,byte *Salt,bool Encryp
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifndef SFX_MODULE
|
#if !defined(SFX_MODULE) && !defined(NOCRYPT)
|
||||||
void ComprDataIO::SetAV15Encryption()
|
void ComprDataIO::SetAV15Encryption()
|
||||||
{
|
{
|
||||||
Decryption=15;
|
Decryption=15;
|
||||||
@@ -239,7 +243,7 @@ void ComprDataIO::SetAV15Encryption()
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifndef SFX_MODULE
|
#if !defined(SFX_MODULE) && !defined(NOCRYPT)
|
||||||
void ComprDataIO::SetCmt13Encryption()
|
void ComprDataIO::SetCmt13Encryption()
|
||||||
{
|
{
|
||||||
Decryption=13;
|
Decryption=13;
|
||||||
|
|||||||
@@ -47,6 +47,7 @@
|
|||||||
Steve Reid SHA-1 hash function
|
Steve Reid SHA-1 hash function
|
||||||
Marcus Herbert makefile.unix file
|
Marcus Herbert makefile.unix file
|
||||||
Tomasz Klim fixes for libunrar.so
|
Tomasz Klim fixes for libunrar.so
|
||||||
|
Robert Riebisch makefile.dj and patches for DJGPP
|
||||||
|
|
||||||
|
|
||||||
4. Legal stuff
|
4. Legal stuff
|
||||||
|
|||||||
@@ -154,8 +154,19 @@ int ScanTree::FindProc(FindData *FindData)
|
|||||||
bool Error=FindData->Error;
|
bool Error=FindData->Error;
|
||||||
|
|
||||||
#ifdef _WIN_32
|
#ifdef _WIN_32
|
||||||
if (Error && strstr(CurMask,"System Volume Information\\")!=NULL)
|
if (Error)
|
||||||
Error=false;
|
{
|
||||||
|
// Do not display an error if we cannot scan contents of reparse
|
||||||
|
// point. Vista contains a lot of reparse (or junction) points,
|
||||||
|
// which are not accessible.
|
||||||
|
if ((FindData->FileAttr & FILE_ATTRIBUTE_REPARSE_POINT)!=0)
|
||||||
|
Error=false;
|
||||||
|
|
||||||
|
// Do not display an error if we cannot scan contents of
|
||||||
|
// "System Volume Information" folder. Normally it is not accessible.
|
||||||
|
if (strstr(CurMask,"System Volume Information\\")!=NULL)
|
||||||
|
Error=false;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (Cmd!=NULL && Cmd->ExclCheck(CurMask,true))
|
if (Cmd!=NULL && Cmd->ExclCheck(CurMask,true))
|
||||||
|
|||||||
@@ -12,11 +12,6 @@ void InitSystemOptions(int SleepTime)
|
|||||||
|
|
||||||
#if !defined(SFX_MODULE) && !defined(_WIN_CE)
|
#if !defined(SFX_MODULE) && !defined(_WIN_CE)
|
||||||
|
|
||||||
#if defined(_WIN_32) && !defined(BELOW_NORMAL_PRIORITY_CLASS)
|
|
||||||
#define BELOW_NORMAL_PRIORITY_CLASS 0x00004000
|
|
||||||
#define ABOVE_NORMAL_PRIORITY_CLASS 0x00008000
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void SetPriority(int Priority)
|
void SetPriority(int Priority)
|
||||||
{
|
{
|
||||||
#ifdef _WIN_32
|
#ifdef _WIN_32
|
||||||
@@ -61,6 +56,11 @@ void SetPriority(int Priority)
|
|||||||
}
|
}
|
||||||
SetPriorityClass(GetCurrentProcess(),PriorityClass);
|
SetPriorityClass(GetCurrentProcess(),PriorityClass);
|
||||||
SetThreadPriority(GetCurrentThread(),PriorityLevel);
|
SetThreadPriority(GetCurrentThread(),PriorityLevel);
|
||||||
|
|
||||||
|
// background mode for Vista, too slow for real life use
|
||||||
|
// if (WinNT()>=6 && Priority==1)
|
||||||
|
// SetPriorityClass(GetCurrentProcess(),PROCESS_MODE_BACKGROUND_BEGIN);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -79,12 +79,6 @@ void Wait()
|
|||||||
|
|
||||||
#if defined(_WIN_32) && !defined(_WIN_CE) && !defined(SFX_MODULE) && !defined(SHELL_EXT)
|
#if defined(_WIN_32) && !defined(_WIN_CE) && !defined(SFX_MODULE) && !defined(SHELL_EXT)
|
||||||
|
|
||||||
#ifndef SHTDN_REASON_MAJOR_APPLICATION
|
|
||||||
#define SHTDN_REASON_MAJOR_APPLICATION 0x00040000
|
|
||||||
#define SHTDN_REASON_FLAG_PLANNED 0x80000000
|
|
||||||
#define SHTDN_REASON_MINOR_MAINTENANCE 0x00000001
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void Shutdown()
|
void Shutdown()
|
||||||
{
|
{
|
||||||
HANDLE hToken;
|
HANDLE hToken;
|
||||||
|
|||||||
@@ -1,6 +1,22 @@
|
|||||||
#ifndef _RAR_SYSTEM_
|
#ifndef _RAR_SYSTEM_
|
||||||
#define _RAR_SYSTEM_
|
#define _RAR_SYSTEM_
|
||||||
|
|
||||||
|
#ifdef _WIN_32
|
||||||
|
#ifndef BELOW_NORMAL_PRIORITY_CLASS
|
||||||
|
#define BELOW_NORMAL_PRIORITY_CLASS 0x00004000
|
||||||
|
#define ABOVE_NORMAL_PRIORITY_CLASS 0x00008000
|
||||||
|
#endif
|
||||||
|
#ifndef PROCESS_MODE_BACKGROUND_BEGIN
|
||||||
|
#define PROCESS_MODE_BACKGROUND_BEGIN 0x00100000
|
||||||
|
#define PROCESS_MODE_BACKGROUND_END 0x00200000
|
||||||
|
#endif
|
||||||
|
#ifndef SHTDN_REASON_MAJOR_APPLICATION
|
||||||
|
#define SHTDN_REASON_MAJOR_APPLICATION 0x00040000
|
||||||
|
#define SHTDN_REASON_FLAG_PLANNED 0x80000000
|
||||||
|
#define SHTDN_REASON_MINOR_MAINTENANCE 0x00000001
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
void InitSystemOptions(int SleepTime);
|
void InitSystemOptions(int SleepTime);
|
||||||
void SetPriority(int Priority);
|
void SetPriority(int Priority);
|
||||||
void Wait();
|
void Wait();
|
||||||
|
|||||||
@@ -43,6 +43,12 @@ void Unpack::Init(byte *Window)
|
|||||||
ExternalWindow=true;
|
ExternalWindow=true;
|
||||||
}
|
}
|
||||||
UnpInitData(false);
|
UnpInitData(false);
|
||||||
|
|
||||||
|
#ifndef SFX_MODULE
|
||||||
|
// RAR 1.5 decompression initialization
|
||||||
|
OldUnpInitData(false);
|
||||||
|
InitHuff();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -190,9 +196,6 @@ void Unpack::Unpack29(bool Solid)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PPMError)
|
|
||||||
return;
|
|
||||||
|
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
UnpPtr&=MAXWINMASK;
|
UnpPtr&=MAXWINMASK;
|
||||||
@@ -218,7 +221,11 @@ void Unpack::Unpack29(bool Solid)
|
|||||||
int Ch=PPM.DecodeChar();
|
int Ch=PPM.DecodeChar();
|
||||||
if (Ch==-1)
|
if (Ch==-1)
|
||||||
{
|
{
|
||||||
PPMError=true;
|
PPM.CleanUp();
|
||||||
|
|
||||||
|
// turn off PPM compression mode in case of error, so UnRAR will
|
||||||
|
// call PPM.DecodeInit in case it needs to turn it on back later.
|
||||||
|
UnpBlockType=BLOCK_LZ;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (Ch==PPMEscChar)
|
if (Ch==PPMEscChar)
|
||||||
@@ -935,13 +942,18 @@ void Unpack::UnpInitData(int Solid)
|
|||||||
LastDist=LastLength=0;
|
LastDist=LastLength=0;
|
||||||
// memset(Window,0,MAXWINSIZE);
|
// memset(Window,0,MAXWINSIZE);
|
||||||
memset(UnpOldTable,0,sizeof(UnpOldTable));
|
memset(UnpOldTable,0,sizeof(UnpOldTable));
|
||||||
|
memset(&LD,0,sizeof(LD));
|
||||||
|
memset(&DD,0,sizeof(DD));
|
||||||
|
memset(&LDD,0,sizeof(LDD));
|
||||||
|
memset(&RD,0,sizeof(RD));
|
||||||
|
memset(&BD,0,sizeof(BD));
|
||||||
UnpPtr=WrPtr=0;
|
UnpPtr=WrPtr=0;
|
||||||
PPMEscChar=2;
|
PPMEscChar=2;
|
||||||
|
UnpBlockType=BLOCK_LZ;
|
||||||
|
|
||||||
InitFilters();
|
InitFilters();
|
||||||
}
|
}
|
||||||
InitBitInput();
|
InitBitInput();
|
||||||
PPMError=false;
|
|
||||||
WrittenFileSize=0;
|
WrittenFileSize=0;
|
||||||
ReadTop=0;
|
ReadTop=0;
|
||||||
ReadBorder=0;
|
ReadBorder=0;
|
||||||
|
|||||||
@@ -159,7 +159,6 @@ class Unpack:private BitInput
|
|||||||
bool UnpSomeRead;
|
bool UnpSomeRead;
|
||||||
Int64 WrittenFileSize;
|
Int64 WrittenFileSize;
|
||||||
bool FileExtracted;
|
bool FileExtracted;
|
||||||
bool PPMError;
|
|
||||||
|
|
||||||
int PrevLowDist,LowDistRepCount;
|
int PrevLowDist,LowDistRepCount;
|
||||||
|
|
||||||
|
|||||||
@@ -269,10 +269,12 @@ void Unpack::UnpInitData20(int Solid)
|
|||||||
{
|
{
|
||||||
if (!Solid)
|
if (!Solid)
|
||||||
{
|
{
|
||||||
UnpChannelDelta=UnpCurChannel=0;
|
UnpAudioBlock=UnpChannelDelta=UnpCurChannel=0;
|
||||||
UnpChannels=1;
|
UnpChannels=1;
|
||||||
|
|
||||||
memset(AudV,0,sizeof(AudV));
|
memset(AudV,0,sizeof(AudV));
|
||||||
memset(UnpOldTable20,0,sizeof(UnpOldTable20));
|
memset(UnpOldTable20,0,sizeof(UnpOldTable20));
|
||||||
|
memset(MD,0,sizeof(MD));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Executable → Regular
+3
-3
@@ -5,9 +5,9 @@ resource app_flags B_MULTIPLE_LAUNCH | B_BACKGROUND_APP;
|
|||||||
resource app_version {
|
resource app_version {
|
||||||
major = 3,
|
major = 3,
|
||||||
middle = 7,
|
middle = 7,
|
||||||
minor = 6,
|
minor = 8,
|
||||||
variety = 0,
|
variety = 0,
|
||||||
internal = 0,
|
internal = 0,
|
||||||
short_info = "3.76",
|
short_info = "3.78",
|
||||||
long_info = "3.76 Alexander Roshal"
|
long_info = "3.78 Alexander Roshal"
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#define RARVER_MAJOR 3
|
#define RARVER_MAJOR 3
|
||||||
#define RARVER_MINOR 70
|
#define RARVER_MINOR 71
|
||||||
#define RARVER_BETA 0
|
#define RARVER_BETA 1
|
||||||
#define RARVER_DAY 22
|
#define RARVER_DAY 10
|
||||||
#define RARVER_MONTH 5
|
#define RARVER_MONTH 9
|
||||||
#define RARVER_YEAR 2007
|
#define RARVER_YEAR 2007
|
||||||
|
|||||||
@@ -97,7 +97,7 @@ bool MergeArchive(Archive &Arc,ComprDataIO *DataIO,bool ShowFileName,char Comman
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else // RARDLL
|
||||||
|
|
||||||
#if !defined(SFX_MODULE) && !defined(_WIN_CE)
|
#if !defined(SFX_MODULE) && !defined(_WIN_CE)
|
||||||
if (!RecoveryDone)
|
if (!RecoveryDone)
|
||||||
@@ -123,8 +123,8 @@ bool MergeArchive(Archive &Arc,ComprDataIO *DataIO,bool ShowFileName,char Comman
|
|||||||
FailedOpen=true;
|
FailedOpen=true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
#endif // RARDLL
|
||||||
*NextNameW=0;
|
*NextNameW=0;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
if (FailedOpen)
|
if (FailedOpen)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user