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;