diff --git a/Frameworks/File_Extractor/File_Extractor/unrar/arcread.cpp b/Frameworks/File_Extractor/File_Extractor/unrar/arcread.cpp
index 727b0ce3c..b29f38dad 100644
--- a/Frameworks/File_Extractor/File_Extractor/unrar/arcread.cpp
+++ b/Frameworks/File_Extractor/File_Extractor/unrar/arcread.cpp
@@ -33,7 +33,7 @@ unrar_err_t Archive::ReadHeader(size_t * ReadSize_)
if (Error!=unrar_ok)
return Error;
- if (ReadSize>0 & NextBlockPos<=CurBlockPos)
+ if (ReadSize>0 && NextBlockPos<=CurBlockPos)
return unrar_err_corrupt;
*ReadSize_ = ReadSize;
diff --git a/Frameworks/File_Extractor/File_Extractor/unrar/blake2s_sse.cpp b/Frameworks/File_Extractor/File_Extractor/unrar/blake2s_sse.cpp
index af34b01dc..3a94fbc13 100644
--- a/Frameworks/File_Extractor/File_Extractor/unrar/blake2s_sse.cpp
+++ b/Frameworks/File_Extractor/File_Extractor/unrar/blake2s_sse.cpp
@@ -1,5 +1,7 @@
// Based on public domain code written in 2012 by Samuel Neves
+#ifdef RAR_COMMON_HPP
+
extern const byte blake2s_sigma[10][16];
// Initialization vector.
@@ -125,3 +127,5 @@ static int blake2s_compress_sse( blake2s_state *S, const byte block[BLAKE2S_BLOC
STORE( &S->h[4], _mm_xor_si128( ff1, _mm_xor_si128( row[1], row[3] ) ) );
return 0;
}
+
+#endif
diff --git a/Frameworks/File_Extractor/File_Extractor/unrar/blake2sp.cpp b/Frameworks/File_Extractor/File_Extractor/unrar/blake2sp.cpp
index da645883b..d9f42e6a9 100644
--- a/Frameworks/File_Extractor/File_Extractor/unrar/blake2sp.cpp
+++ b/Frameworks/File_Extractor/File_Extractor/unrar/blake2sp.cpp
@@ -11,6 +11,8 @@
this software. If not, see .
*/
+#ifdef RAR_COMMON_HPP
+
#define PARALLELISM_DEGREE 8
void blake2sp_init( blake2sp_state *S )
@@ -151,3 +153,5 @@ void blake2sp_final( blake2sp_state *S, byte *digest )
blake2s_final( &S->R, digest );
}
+
+#endif
diff --git a/Frameworks/File_Extractor/File_Extractor/unrar/extract.cpp b/Frameworks/File_Extractor/File_Extractor/unrar/extract.cpp
index fc591b482..c1073005d 100644
--- a/Frameworks/File_Extractor/File_Extractor/unrar/extract.cpp
+++ b/Frameworks/File_Extractor/File_Extractor/unrar/extract.cpp
@@ -72,7 +72,7 @@ unrar_err_t CmdExtract::ExtractCurrentFile( bool SkipSolid, bool check_compatibi
Unp->DoUnpack(15,FileCount>1 && Arc.Solid);
else
#endif
- Unp->DoUnpack(Arc.FileHead.UnpVer,Arc.FileHead.Flags & LHD_SOLID);
+ Unp->DoUnpack(Arc.FileHead.UnpVer,!!(Arc.FileHead.Flags & LHD_SOLID));
}
// (no need to seek to next file)
@@ -100,7 +100,7 @@ unrar_err_t CmdExtract::ExtractCurrentFile( bool SkipSolid, bool check_compatibi
void CmdExtract::UnstoreFile(int64 DestUnpSize)
{
- Buffer.Alloc(Min(DestUnpSize,0x10000));
+ Buffer.Alloc((int)Min(DestUnpSize,0x10000));
while (1)
{
unsigned int Code=DataIO.UnpRead(&Buffer[0],(uint)Buffer.Size());
diff --git a/Frameworks/File_Extractor/File_Extractor/unrar/model.cpp b/Frameworks/File_Extractor/File_Extractor/unrar/model.cpp
index 0b2e5c343..4aca883b6 100644
--- a/Frameworks/File_Extractor/File_Extractor/unrar/model.cpp
+++ b/Frameworks/File_Extractor/File_Extractor/unrar/model.cpp
@@ -5,6 +5,8 @@
* Contents: model description and encoding/decoding routines *
****************************************************************************/
+#ifdef RAR_COMMON_HPP
+
static const int MAX_O=64; /* maximum allowed model order */
const uint TOP=1 << 24, BOT=1 << 15;
@@ -615,3 +617,5 @@ int ModelPPM::DecodeChar()
ARI_DEC_NORMALIZE(Coder.code,Coder.low,Coder.range,Coder.UnpackRead);
return(Symbol);
}
+
+#endif
diff --git a/Frameworks/File_Extractor/File_Extractor/unrar/pathfn.cpp b/Frameworks/File_Extractor/File_Extractor/unrar/pathfn.cpp
index 2a5649cd7..7c254a560 100644
--- a/Frameworks/File_Extractor/File_Extractor/unrar/pathfn.cpp
+++ b/Frameworks/File_Extractor/File_Extractor/unrar/pathfn.cpp
@@ -19,3 +19,38 @@ wchar* GetWideName(const char *Name,const wchar *NameW,wchar *DestW,size_t DestS
return(DestW);
}
+
+void UnixSlashToDos(const char *SrcName, char *DestName, size_t MaxLength)
+{
+ size_t Copied = 0;
+ for (; CopiedByteMode,Op2)+FC);
if (Cmd->ByteMode)
Result&=0xff;
- Flags=(ResultByteMode,Op1,Result);
}
break;
@@ -523,7 +523,7 @@ bool RarVM::ExecuteCode(VM_PreparedCommand *PreparedCode,uint CodeSize)
uint Result=GET_UINT32(Value1-GET_VALUE(Cmd->ByteMode,Op2)-FC);
if (Cmd->ByteMode)
Result&=0xff;
- Flags=(Result>Value1 || Result==Value1 && FC)|(Result==0 ? VM_FZ:(Result&VM_FS));
+ Flags=(Result>Value1 || (Result==Value1 && FC))|(Result==0 ? VM_FZ:(Result&VM_FS));
SET_VALUE(Cmd->ByteMode,Op1,Result);
}
break;
@@ -807,6 +807,8 @@ void RarVM::Optimize(VM_PreparedProgram *Prg)
case VM_CMP:
Cmd->OpCode=Cmd->ByteMode ? VM_CMPB:VM_CMPD;
continue;
+
+ default: break;
}
if ((VM_CmdFlags[Cmd->OpCode] & VMCF_CHFLAGS)==0)
continue;
@@ -850,6 +852,8 @@ void RarVM::Optimize(VM_PreparedProgram *Prg)
case VM_NEG:
Cmd->OpCode=Cmd->ByteMode ? VM_NEGB:VM_NEGD;
continue;
+
+ default: break;
}
}
}
diff --git a/Frameworks/File_Extractor/File_Extractor/unrar/strfn.cpp b/Frameworks/File_Extractor/File_Extractor/unrar/strfn.cpp
index 883346b96..50dfbb010 100644
--- a/Frameworks/File_Extractor/File_Extractor/unrar/strfn.cpp
+++ b/Frameworks/File_Extractor/File_Extractor/unrar/strfn.cpp
@@ -129,7 +129,7 @@ wchar etoupperw(wchar ch)
{
if (ch=='i')
return('I');
-#ifdef __APPLE__
+#if defined(__APPLE__) || defined(_MSC_VER)
return(toupper(ch));
#else
return(toupperw(ch));
@@ -234,7 +234,7 @@ bool LowAscii(const wchar *Str)
int wcsicompc(const wchar *Str1,const wchar *Str2)
{
-#if defined(_UNIX)
+#if defined(_UNIX) || defined(_MSC_VER)
return my_wcscmp(Str1,Str2);
#else
return wcsicomp(Str1,Str2);
@@ -247,7 +247,11 @@ char* strncpyz(char *dest, const char *src, size_t maxlen)
{
if (maxlen>0)
{
- strncpy(dest,src,maxlen-1);
+#if _MSC_VER >= 1300
+ strcpy_s(dest,maxlen-1,src);
+#else
+ strncpy(dest,src,maxlen-1);
+#endif
dest[maxlen-1]=0;
}
return dest;
@@ -273,7 +277,11 @@ char* strncatz(char* dest, const char* src, size_t maxlen)
{
size_t Length = strlen(dest);
if (Length + 1 < maxlen)
+#if _MSC_VER >= 1300
+ strcat_s(dest, maxlen - Length - 1, src);
+#else
strncat(dest, src, maxlen - Length - 1);
+#endif
return dest;
}
diff --git a/Frameworks/File_Extractor/File_Extractor/unrar/suballoc.cpp b/Frameworks/File_Extractor/File_Extractor/unrar/suballoc.cpp
index 751f7c5e7..0331c3037 100644
--- a/Frameworks/File_Extractor/File_Extractor/unrar/suballoc.cpp
+++ b/Frameworks/File_Extractor/File_Extractor/unrar/suballoc.cpp
@@ -105,9 +105,9 @@ void SubAllocator::InitSubAllocator()
int i, k;
memset(FreeList,0,sizeof(FreeList));
pText=HeapStart;
- uint Size2=FIXED_UNIT_SIZE*(SubAllocatorSize/8/FIXED_UNIT_SIZE*7);
+ uint Size2=(uint)(FIXED_UNIT_SIZE*(SubAllocatorSize/8/FIXED_UNIT_SIZE*7));
uint RealSize2=Size2/FIXED_UNIT_SIZE*UNIT_SIZE;
- uint Size1=SubAllocatorSize-Size2;
+ uint Size1=(uint)(SubAllocatorSize-Size2);
uint RealSize1=Size1/FIXED_UNIT_SIZE*UNIT_SIZE+Size1%FIXED_UNIT_SIZE;
#ifdef STRICT_ALIGNMENT_REQUIRED
if (Size1%FIXED_UNIT_SIZE!=0)
diff --git a/Frameworks/File_Extractor/File_Extractor/unrar/timefn.cpp b/Frameworks/File_Extractor/File_Extractor/unrar/timefn.cpp
index 27b34029f..faeba74ce 100644
--- a/Frameworks/File_Extractor/File_Extractor/unrar/timefn.cpp
+++ b/Frameworks/File_Extractor/File_Extractor/unrar/timefn.cpp
@@ -1,6 +1,7 @@
#include "rar.hpp"
#ifdef _WIN_ALL
+#include
RarTime& RarTime::operator =(FILETIME &ft)
{
_ULARGE_INTEGER ul = {ft.dwLowDateTime, ft.dwHighDateTime};
@@ -42,30 +43,8 @@ void RarTime::GetLocal(RarLocalTime *lt)
GetWin32(&ft);
FILETIME lft;
- if (WinNT() < WNT_VISTA)
- {
- // SystemTimeToTzSpecificLocalTime based code produces 1 hour error on XP.
- FileTimeToLocalFileTime(&ft,&lft);
- }
- else
- {
- // We use these functions instead of FileTimeToLocalFileTime according to
- // MSDN recommendation: "To account for daylight saving time
- // when converting a file time to a local time ..."
- SYSTEMTIME st1,st2;
- FileTimeToSystemTime(&ft,&st1);
- SystemTimeToTzSpecificLocalTime(NULL,&st1,&st2);
- SystemTimeToFileTime(&st2,&lft);
-
- // Correct precision loss (low 4 decimal digits) in FileTimeToSystemTime.
- FILETIME rft;
- SystemTimeToFileTime(&st1,&rft);
- int64 Corrected=INT32TO64(ft.dwHighDateTime,ft.dwLowDateTime)-
- INT32TO64(rft.dwHighDateTime,rft.dwLowDateTime)+
- INT32TO64(lft.dwHighDateTime,lft.dwLowDateTime);
- lft.dwLowDateTime=(DWORD)Corrected;
- lft.dwHighDateTime=(DWORD)(Corrected>>32);
- }
+ // SystemTimeToTzSpecificLocalTime based code produces 1 hour error on XP.
+ FileTimeToLocalFileTime(&ft,&lft);
SYSTEMTIME st;
FileTimeToSystemTime(&lft,&st);
@@ -91,8 +70,8 @@ void RarTime::GetLocal(RarLocalTime *lt)
// Calculate the time reminder, which is the part of time smaller
// than 1 second, represented in 100-nanosecond intervals.
- lt->Reminder=INT32TO64(lft.dwHighDateTime,lft.dwLowDateTime)-
- INT32TO64(zft.dwHighDateTime,zft.dwLowDateTime);
+ lt->Reminder=int32to64(lft.dwHighDateTime,lft.dwLowDateTime)-
+ int32to64(zft.dwHighDateTime,zft.dwLowDateTime);
#else
time_t ut=GetUnix();
struct tm *t;
@@ -131,28 +110,8 @@ void RarTime::SetLocal(RarLocalTime *lt)
FILETIME ft;
- if (WinNT() < WNT_VISTA)
- {
- // TzSpecificLocalTimeToSystemTime based code produces 1 hour error on XP.
- LocalFileTimeToFileTime(&lft,&ft);
- }
- else
- {
- // Reverse procedure which we do in GetLocal.
- SYSTEMTIME st1,st2;
- FileTimeToSystemTime(&lft,&st2);
- TzSpecificLocalTimeToSystemTime(NULL,&st2,&st1);
- SystemTimeToFileTime(&st1,&ft);
-
- // Correct precision loss (low 4 decimal digits) in FileTimeToSystemTime.
- FILETIME rft;
- SystemTimeToFileTime(&st2,&rft);
- int64 Corrected=INT32TO64(lft.dwHighDateTime,lft.dwLowDateTime)-
- INT32TO64(rft.dwHighDateTime,rft.dwLowDateTime)+
- INT32TO64(ft.dwHighDateTime,ft.dwLowDateTime);
- ft.dwLowDateTime=(DWORD)Corrected;
- ft.dwHighDateTime=(DWORD)(Corrected>>32);
- }
+ // TzSpecificLocalTimeToSystemTime based code produces 1 hour error on XP.
+ LocalFileTimeToFileTime(&lft,&ft);
*this=ft;
}
diff --git a/Frameworks/File_Extractor/File_Extractor/unrar/timefn.hpp b/Frameworks/File_Extractor/File_Extractor/unrar/timefn.hpp
index 93e34253d..892376a36 100644
--- a/Frameworks/File_Extractor/File_Extractor/unrar/timefn.hpp
+++ b/Frameworks/File_Extractor/File_Extractor/unrar/timefn.hpp
@@ -2,6 +2,9 @@
#define _RAR_TIMEFN_
#include
+#ifdef _WIN_ALL
+#include
+#endif
struct RarLocalTime
{
diff --git a/Frameworks/File_Extractor/File_Extractor/unrar/unpack.cpp b/Frameworks/File_Extractor/File_Extractor/unrar/unpack.cpp
index 943a40af5..8efa1f9e1 100644
--- a/Frameworks/File_Extractor/File_Extractor/unrar/unpack.cpp
+++ b/Frameworks/File_Extractor/File_Extractor/unrar/unpack.cpp
@@ -1,5 +1,7 @@
#include "rar.hpp"
+#define _RAR_UNPACK_CPP_
+
#include "coder.cpp"
#include "suballoc.cpp"
#include "model.cpp"
diff --git a/Frameworks/File_Extractor/File_Extractor/unrar/unpack15.cpp b/Frameworks/File_Extractor/File_Extractor/unrar/unpack15.cpp
index 0446ee50c..1328de946 100644
--- a/Frameworks/File_Extractor/File_Extractor/unrar/unpack15.cpp
+++ b/Frameworks/File_Extractor/File_Extractor/unrar/unpack15.cpp
@@ -1,3 +1,5 @@
+#ifdef RAR_COMMON_HPP
+
#define STARTL1 2
static unsigned int DecL1[]={0x8000,0xa000,0xc000,0xd000,0xe000,0xea00,
0xee00,0xf000,0xf200,0xf200,0xffff};
@@ -479,3 +481,5 @@ uint Unpack::DecodeNum(uint Num,uint StartPos,uint *DecTab,uint *PosTab)
Inp.faddbits(StartPos);
return(((Num-(I ? DecTab[I-1]:0))>>(16-StartPos))+PosTab[StartPos]);
}
+
+#endif
diff --git a/Frameworks/File_Extractor/File_Extractor/unrar/unpack20.cpp b/Frameworks/File_Extractor/File_Extractor/unrar/unpack20.cpp
index aca520935..f0b8e41e7 100644
--- a/Frameworks/File_Extractor/File_Extractor/unrar/unpack20.cpp
+++ b/Frameworks/File_Extractor/File_Extractor/unrar/unpack20.cpp
@@ -1,4 +1,4 @@
-#include "rar.hpp"
+#ifdef RAR_COMMON_HPP
void Unpack::CopyString20(uint Length,uint Distance)
{
@@ -368,3 +368,5 @@ byte Unpack::DecodeAudio(int Delta)
}
return((byte)Ch);
}
+
+#endif
diff --git a/Frameworks/File_Extractor/File_Extractor/unrar/unpack30.cpp b/Frameworks/File_Extractor/File_Extractor/unrar/unpack30.cpp
index 980df0244..9f41acdda 100644
--- a/Frameworks/File_Extractor/File_Extractor/unrar/unpack30.cpp
+++ b/Frameworks/File_Extractor/File_Extractor/unrar/unpack30.cpp
@@ -1,3 +1,5 @@
+#ifdef RAR_COMMON_HPP
+
// We use it instead of direct PPM.DecodeChar call to be sure that
// we reset PPM structures in case of corrupt data. It is important,
// because these structures can be invalid after PPM.DecodeChar returned -1.
@@ -834,3 +836,5 @@ void Unpack::InitFilters30()
delete PrgStack[I];
PrgStack.Reset();
}
+
+#endif
diff --git a/Frameworks/File_Extractor/File_Extractor/unrar/unpack50.cpp b/Frameworks/File_Extractor/File_Extractor/unrar/unpack50.cpp
index d1188ee85..caa1996e3 100644
--- a/Frameworks/File_Extractor/File_Extractor/unrar/unpack50.cpp
+++ b/Frameworks/File_Extractor/File_Extractor/unrar/unpack50.cpp
@@ -1,3 +1,5 @@
+#ifdef RAR_COMMON_HPP
+
void Unpack::Unpack5(bool Solid)
{
FileExtracted=true;
@@ -646,3 +648,5 @@ void Unpack::InitFilters()
{
Filters.Reset();
}
+
+#endif
diff --git a/Frameworks/File_Extractor/File_Extractor/unrar/unpack50frag.cpp b/Frameworks/File_Extractor/File_Extractor/unrar/unpack50frag.cpp
index 745b1b308..89718c9d0 100644
--- a/Frameworks/File_Extractor/File_Extractor/unrar/unpack50frag.cpp
+++ b/Frameworks/File_Extractor/File_Extractor/unrar/unpack50frag.cpp
@@ -1,3 +1,5 @@
+#ifdef RAR_COMMON_HPP
+
FragmentedWindow::FragmentedWindow()
{
memset(Mem,0,sizeof(Mem));
@@ -101,3 +103,5 @@ size_t FragmentedWindow::GetBlockSize(size_t StartPos,size_t RequiredSize)
return Min(MemSize[I]-StartPos,RequiredSize);
return 0; // Must never be here.
}
+
+#endif
diff --git a/Frameworks/File_Extractor/File_Extractor/unrar/unpackinline.cpp b/Frameworks/File_Extractor/File_Extractor/unrar/unpackinline.cpp
index 841220db3..a2aa27a36 100644
--- a/Frameworks/File_Extractor/File_Extractor/unrar/unpackinline.cpp
+++ b/Frameworks/File_Extractor/File_Extractor/unrar/unpackinline.cpp
@@ -1,3 +1,5 @@
+#ifdef RAR_COMMON_HPP
+
inline void Unpack::InsertOldDist(uint Distance)
{
OldDist[3]=OldDist[2];
@@ -140,3 +142,5 @@ inline uint Unpack::SlotToLength(BitInput &Inp,uint Slot)
}
return Length;
}
+
+#endif
diff --git a/Frameworks/File_Extractor/File_Extractor/unrar/unrar_misc.cpp b/Frameworks/File_Extractor/File_Extractor/unrar/unrar_misc.cpp
index 92e3f79b3..ce721d85d 100644
--- a/Frameworks/File_Extractor/File_Extractor/unrar/unrar_misc.cpp
+++ b/Frameworks/File_Extractor/File_Extractor/unrar/unrar_misc.cpp
@@ -76,7 +76,7 @@ extern "C" {
assert( !p->data_ );
unrar_pos_t size = unrar_info( p )->size;
- p->own_data_ = malloc( size ? size : 1 );
+ p->own_data_ = malloc( size ? (size_t)size : 1 );
if ( !p->own_data_ )
return unrar_err_memory;
@@ -159,7 +159,7 @@ int ComprDataIO::UnpRead( byte* out, uint count )
return 0;
if ( count > (uint) UnpPackedSize )
- count = UnpPackedSize;
+ count = (uint) UnpPackedSize;
int result = Read( out, count );
UnpPackedSize -= result;
diff --git a/Frameworks/File_Extractor/File_Extractor/unrar/unrar_open.cpp b/Frameworks/File_Extractor/File_Extractor/unrar/unrar_open.cpp
index 973b6fe14..3d97aa845 100644
--- a/Frameworks/File_Extractor/File_Extractor/unrar/unrar_open.cpp
+++ b/Frameworks/File_Extractor/File_Extractor/unrar/unrar_open.cpp
@@ -10,7 +10,7 @@ extern "C" {
FILE* file = (FILE*) user_data;
// most of the time, seeking won't be necessary
- if ( pos != ftell( file ) && fseek( file, pos, SEEK_SET ) != 0 )
+ if ( pos != ftell( file ) && fseek( file, (long)pos, SEEK_SET ) != 0 )
return unrar_err_corrupt;
*count = (int) fread( out, 1, *count, file );
@@ -30,8 +30,13 @@ static void unrar_close_file( void* user_data )
unrar_err_t unrar_open( unrar_t** arc_out, const char path [] )
{
*arc_out = NULL;
-
+
+#if _MSC_VER >= 1300
+ FILE* file = NULL;
+ fopen_s(&file, path, "rb");
+#else
FILE* file = fopen( path, "rb" );
+#endif
if ( file == NULL )
return unrar_err_open;