Hello community,
here is the log from the commit of package unrar for openSUSE:Factory:NonFree checked in at 2019-09-02 13:26:57
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory:NonFree/unrar (Old)
and /work/SRC/openSUSE:Factory:NonFree/.unrar.new.7948 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "unrar"
Mon Sep 2 13:26:57 2019 rev:81 rq:727212 version:5.8.1
Changes:
--------
--- /work/SRC/openSUSE:Factory:NonFree/unrar/unrar.changes 2019-04-30 13:06:55.885544994 +0200
+++ /work/SRC/openSUSE:Factory:NonFree/.unrar.new.7948/unrar.changes 2019-09-02 13:26:57.193294319 +0200
@@ -1,0 +2,6 @@
+Fri Aug 30 11:29:26 UTC 2019 - Ismail Dönmez
+
+- Update to version 5.8.1
+ * Based on WinRAR version 5.80 beta 1
+
+-------------------------------------------------------------------
Old:
----
unrarsrc-5.7.5.tar.gz
New:
----
unrarsrc-5.8.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ unrar.spec ++++++
--- /var/tmp/diff_new_pack.dVAAO1/_old 2019-09-02 13:26:58.881294002 +0200
+++ /var/tmp/diff_new_pack.dVAAO1/_new 2019-09-02 13:26:58.881294002 +0200
@@ -18,10 +18,10 @@
# majorversion should match the major version number.
%define majorversion 5
-%define libsuffix 5_7_5
+%define libsuffix 5_8_1
Name: unrar
-Version: 5.7.5
+Version: 5.8.1
Release: 0
Summary: A program to extract, test, and view RAR archives
License: NonFree
++++++ unrarsrc-5.0.5-soname.patch ++++++
--- /var/tmp/diff_new_pack.dVAAO1/_old 2019-09-02 13:26:58.909293996 +0200
+++ /var/tmp/diff_new_pack.dVAAO1/_new 2019-09-02 13:26:58.909293996 +0200
@@ -2,7 +2,7 @@
===================================================================
--- unrar.orig/makefile
+++ unrar/makefile
-@@ -146,7 +146,7 @@ lib: CXXFLAGS+=$(LIBFLAGS)
+@@ -156,7 +156,7 @@ lib: CXXFLAGS+=$(LIBFLAGS)
lib: clean $(OBJECTS) $(LIB_OBJ)
@rm -f libunrar.so
@rm -f libunrar.a
++++++ unrarsrc-5.7.5.tar.gz -> unrarsrc-5.8.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/arccmt.cpp new/unrar/arccmt.cpp
--- old/unrar/arccmt.cpp 2019-04-27 22:05:14.000000000 +0200
+++ new/unrar/arccmt.cpp 2019-08-29 22:34:42.000000000 +0200
@@ -136,7 +136,7 @@
bool Archive::ReadCommentData(Array<wchar> *CmtData)
{
Array<byte> CmtRaw;
- if (!ReadSubData(&CmtRaw,NULL))
+ if (!ReadSubData(&CmtRaw,NULL,false))
return false;
size_t CmtSize=CmtRaw.Size();
CmtRaw.Push(0);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/archive.hpp new/unrar/archive.hpp
--- old/unrar/archive.hpp 2019-04-27 22:05:14.000000000 +0200
+++ new/unrar/archive.hpp 2019-08-29 22:34:42.000000000 +0200
@@ -83,7 +83,7 @@
int64 GetStartPos();
void AddSubData(byte *SrcData,uint64 DataSize,File *SrcFile,
const wchar *Name,uint Flags);
- bool ReadSubData(Array<byte> *UnpData,File *DestFile);
+ bool ReadSubData(Array<byte> *UnpData,File *DestFile,bool TestMode);
HEADER_TYPE GetHeaderType() {return CurHeaderType;}
RAROptions* GetRAROptions() {return Cmd;}
void SetSilentOpen(bool Mode) {SilentOpen=Mode;}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/arcread.cpp new/unrar/arcread.cpp
--- old/unrar/arcread.cpp 2019-04-27 22:05:14.000000000 +0200
+++ new/unrar/arcread.cpp 2019-08-29 22:34:42.000000000 +0200
@@ -268,14 +268,14 @@
uint FileTime=Raw.Get4();
hd->UnpVer=Raw.Get1();
- // RAR15 did not use the special dictionary size to mark dirs.
- if (hd->UnpVer<20 && (hd->FileAttr & 0x10)!=0)
- hd->Dir=true;
-
hd->Method=Raw.Get1()-0x30;
size_t NameSize=Raw.Get2();
hd->FileAttr=Raw.Get4();
+ // RAR15 did not use the special dictionary size to mark dirs.
+ if (hd->UnpVer<20 && (hd->FileAttr & 0x10)!=0)
+ hd->Dir=true;
+
hd->CryptMethod=CRYPT_NONE;
if (hd->Encrypted)
switch(hd->UnpVer)
@@ -402,8 +402,8 @@
if (rmode & 4)
rlt.Second++;
rlt.Reminder=0;
- int count=rmode&3;
- for (int J=0;J='0' && Switch[2]<='4';
- if (CommonMode)
- Mode=(EXTTIME_MODE)(Switch[2]-'0');
- if (Mode==EXTTIME_HIGH1 || Mode==EXTTIME_HIGH2) // '2' and '3' not supported anymore.
- Mode=EXTTIME_HIGH3;
- if (Switch[2]=='-')
- Mode=EXTTIME_NONE;
- if (CommonMode || Switch[2]=='-' || Switch[2]=='+' || Switch[2]==0)
- xmtime=xctime=xatime=Mode;
- else
- {
- if (Switch[3]>='0' && Switch[3]<='4')
- Mode=(EXTTIME_MODE)(Switch[3]-'0');
- if (Mode==EXTTIME_HIGH1 || Mode==EXTTIME_HIGH2) // '2' and '3' not supported anymore.
- Mode=EXTTIME_HIGH3;
- if (Switch[3]=='-')
- Mode=EXTTIME_NONE;
- switch(toupperw(Switch[2]))
- {
- case 'M':
- xmtime=Mode;
- break;
- case 'C':
- xctime=Mode;
- break;
- case 'A':
- xatime=Mode;
- break;
- }
- }
- }
+ SetStoreTimeMode(Switch+2);
break;
case '-':
Test=false;
@@ -960,7 +931,10 @@
if (wcschr(L"AFUMD",*Command)==NULL)
{
if (GenerateArcName)
- GenerateArchiveName(ArcName,ASIZE(ArcName),GenerateMask,false);
+ {
+ const wchar *Mask=*GenerateMask!=0 ? GenerateMask:DefGenerateMask;
+ GenerateArchiveName(ArcName,ASIZE(ArcName),Mask,false);
+ }
StringList ArcMasks;
ArcMasks.AddString(ArcName);
@@ -1022,7 +996,7 @@
#ifndef SFX_MODULE
-uint CommandData::GetExclAttr(const wchar *Str)
+uint CommandData::GetExclAttr(const wchar *Str,bool &Dir)
{
if (IsDigit(*Str))
return wcstol(Str,NULL,0);
@@ -1032,10 +1006,10 @@
{
switch(toupperw(*Str))
{
-#ifdef _UNIX
case 'D':
- Attr|=S_IFDIR;
+ Dir=true;
break;
+#ifdef _UNIX
case 'V':
Attr|=S_IFCHR;
break;
@@ -1049,9 +1023,6 @@
case 'S':
Attr|=0x4;
break;
- case 'D':
- Attr|=0x10;
- break;
case 'A':
Attr|=0x20;
break;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/cmddata.hpp new/unrar/cmddata.hpp
--- old/unrar/cmddata.hpp 2019-04-27 22:05:15.000000000 +0200
+++ new/unrar/cmddata.hpp 2019-08-29 22:34:42.000000000 +0200
@@ -14,9 +14,10 @@
void ProcessSwitchesString(const wchar *Str);
void ProcessSwitch(const wchar *Switch);
void BadSwitch(const wchar *Switch);
- uint GetExclAttr(const wchar *Str);
+ uint GetExclAttr(const wchar *Str,bool &Dir);
#if !defined(SFX_MODULE)
void SetTimeFilters(const wchar *Mod,bool Before,bool Age);
+ void SetStoreTimeMode(const wchar *S);
#endif
bool FileLists;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/cmdfilter.cpp new/unrar/cmdfilter.cpp
--- old/unrar/cmdfilter.cpp 2019-04-27 22:05:15.000000000 +0200
+++ new/unrar/cmdfilter.cpp 2019-08-29 22:34:42.000000000 +0200
@@ -285,7 +285,10 @@
#ifndef SFX_MODULE
if (TimeCheck(FileHead.mtime,FileHead.ctime,FileHead.atime))
return 0;
- if ((FileHead.FileAttr & ExclFileAttr)!=0 || InclAttrSet && (FileHead.FileAttr & InclFileAttr)==0)
+ if ((FileHead.FileAttr & ExclFileAttr)!=0 || FileHead.Dir && ExclDir)
+ return 0;
+ if (InclAttrSet && (!FileHead.Dir && (FileHead.FileAttr & InclFileAttr)==0 ||
+ FileHead.Dir && !InclDir))
return 0;
if (!Dir && SizeCheck(FileHead.UnpSize))
return 0;
@@ -303,3 +306,47 @@
}
return 0;
}
+
+
+#if !defined(SFX_MODULE)
+void CommandData::SetStoreTimeMode(const wchar *S)
+{
+ if (*S==0 || IsDigit(*S) || *S=='-' || *S=='+')
+ {
+ // Apply -ts, -ts1, -ts-, -ts+ to all 3 times.
+ // Handle obsolete -ts[2,3,4] as ts+.
+ EXTTIME_MODE Mode=EXTTIME_MAX;
+ if (*S=='-')
+ Mode=EXTTIME_NONE;
+ if (*S=='1')
+ Mode=EXTTIME_1S;
+ xmtime=xctime=xatime=Mode;
+ S++;
+ }
+
+ while (*S!=0)
+ {
+ EXTTIME_MODE Mode=EXTTIME_MAX;
+ if (S[1]=='-')
+ Mode=EXTTIME_NONE;
+ if (S[1]=='1')
+ Mode=EXTTIME_1S;
+ switch(toupperw(*S))
+ {
+ case 'M':
+ xmtime=Mode;
+ break;
+ case 'C':
+ xctime=Mode;
+ break;
+ case 'A':
+ xatime=Mode;
+ break;
+ case 'P':
+ PreserveAtime=true;
+ break;
+ }
+ S++;
+ }
+}
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/dll.rc new/unrar/dll.rc
--- old/unrar/dll.rc 2019-04-27 21:56:58.000000000 +0200
+++ new/unrar/dll.rc 2019-08-29 21:35:30.000000000 +0200
@@ -2,8 +2,8 @@
#include
VS_VERSION_INFO VERSIONINFO
-FILEVERSION 5, 71, 100, 3045
-PRODUCTVERSION 5, 71, 100, 3045
+FILEVERSION 5, 80, 1, 3169
+PRODUCTVERSION 5, 80, 1, 3169
FILEOS VOS__WINDOWS32
FILETYPE VFT_APP
{
@@ -14,8 +14,8 @@
VALUE "CompanyName", "Alexander Roshal\0"
VALUE "ProductName", "RAR decompression library\0"
VALUE "FileDescription", "RAR decompression library\0"
- VALUE "FileVersion", "5.71.0\0"
- VALUE "ProductVersion", "5.71.0\0"
+ VALUE "FileVersion", "5.80.1\0"
+ VALUE "ProductVersion", "5.80.1\0"
VALUE "LegalCopyright", "Copyright � Alexander Roshal 1993-2019\0"
VALUE "OriginalFilename", "Unrar.dll\0"
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/file.cpp new/unrar/file.cpp
--- old/unrar/file.cpp 2019-04-27 22:05:16.000000000 +0200
+++ new/unrar/file.cpp 2019-08-29 22:34:43.000000000 +0200
@@ -13,6 +13,7 @@
OpenShared=false;
AllowDelete=true;
AllowExceptions=true;
+ PreserveAtime=false;
#ifdef _WIN_ALL
NoSequentialRead=false;
CreateMode=FMF_UNDEFINED;
@@ -56,6 +57,9 @@
if (OpenShared)
ShareMode|=FILE_SHARE_WRITE;
uint Flags=NoSequentialRead ? 0:FILE_FLAG_SEQUENTIAL_SCAN;
+ FindData FD;
+ if (PreserveAtime)
+ Access|=FILE_WRITE_ATTRIBUTES; // Needed to preserve atime.
hNewFile=CreateFile(Name,Access,ShareMode,NULL,OPEN_EXISTING,Flags,NULL);
DWORD LastError;
@@ -86,6 +90,11 @@
}
if (hNewFile==FILE_BAD_HANDLE && LastError==ERROR_FILE_NOT_FOUND)
ErrorType=FILE_NOTFOUND;
+ if (PreserveAtime && hNewFile!=FILE_BAD_HANDLE)
+ {
+ FILETIME ft={0xffffffff,0xffffffff}; // This value prevents atime modification.
+ SetFileTime(hNewFile,NULL,&ft,NULL);
+ }
#else
int flags=UpdateMode ? O_RDWR:(WriteMode ? O_WRONLY:O_RDONLY);
@@ -95,6 +104,11 @@
flags|=O_LARGEFILE;
#endif
#endif
+ // NDK r20 has O_NOATIME, but fails to create files with it in Android 7+.
+#if defined(O_NOATIME)
+ if (PreserveAtime)
+ flags|=O_NOATIME;
+#endif
char NameA[NM];
WideToChar(Name,NameA,ASIZE(NameA));
@@ -230,7 +244,7 @@
{
#ifdef _WIN_ALL
// We use the standard system handle for stdout in Windows
- // and it must not be closed here.
+ // and it must not be closed here.
if (HandleType==FILE_HANDLENORMAL)
Success=CloseHandle(hFile)==TRUE;
#else
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/file.hpp new/unrar/file.hpp
--- old/unrar/file.hpp 2019-04-27 22:05:16.000000000 +0200
+++ new/unrar/file.hpp 2019-08-29 22:34:43.000000000 +0200
@@ -62,6 +62,7 @@
bool NoSequentialRead;
uint CreateMode;
#endif
+ bool PreserveAtime;
protected:
bool OpenShared; // Set by 'Archive' class.
public:
@@ -114,6 +115,7 @@
#ifdef _WIN_ALL
void RemoveSequentialFlag() {NoSequentialRead=true;}
#endif
+ void SetPreserveAtime(bool Preserve) {PreserveAtime=Preserve;}
#ifdef _UNIX
int GetFD()
{
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/find.cpp new/unrar/find.cpp
--- old/unrar/find.cpp 2019-04-27 22:05:17.000000000 +0200
+++ new/unrar/find.cpp 2019-08-29 22:34:43.000000000 +0200
@@ -63,12 +63,12 @@
}
while (1)
{
+ wchar Name[NM];
struct dirent *ent=readdir(dirp);
if (ent==NULL)
return false;
if (strcmp(ent->d_name,".")==0 || strcmp(ent->d_name,"..")==0)
continue;
- wchar Name[NM];
if (!CharToWide(ent->d_name,Name,ASIZE(Name)))
uiMsg(UIERROR_INVALIDNAME,UINULL,Name);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/hash.cpp new/unrar/hash.cpp
--- old/unrar/hash.cpp 2019-04-27 22:05:17.000000000 +0200
+++ new/unrar/hash.cpp 2019-08-29 22:34:43.000000000 +0200
@@ -53,7 +53,7 @@
DataHash::~DataHash()
{
#ifdef RAR_SMP
- DestroyThreadPool(ThPool);
+ delete ThPool;
#endif
cleandata(&CurCRC32, sizeof(CurCRC32));
if (blake2ctx!=NULL)
@@ -94,7 +94,7 @@
{
#ifdef RAR_SMP
if (MaxThreads>1 && ThPool==NULL)
- ThPool=CreateThreadPool();
+ ThPool=new ThreadPool(BLAKE2_THREADS_NUMBER);
blake2ctx->ThPool=ThPool;
blake2ctx->MaxThreads=MaxThreads;
#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/list.cpp new/unrar/list.cpp
--- old/unrar/list.cpp 2019-04-27 22:05:18.000000000 +0200
+++ new/unrar/list.cpp 2019-08-29 22:34:43.000000000 +0200
@@ -345,7 +345,7 @@
mprintf(L"\n%12ls: %ls",St(MListHostOS),HostOS);
mprintf(L"\n%12ls: RAR %ls(v%d) -m%d -md=%d%s",St(MListCompInfo),
- Format==RARFMT15 ? L"3.0":L"5.0",
+ Format==RARFMT15 ? L"1.5":L"5.0",
hd.UnpVer==VER_UNKNOWN ? 0 : hd.UnpVer,hd.Method,
hd.WinSize>=0x100000 ? hd.WinSize/0x100000:hd.WinSize/0x400,
hd.WinSize>=0x100000 ? L"M":L"K");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/loclang.hpp new/unrar/loclang.hpp
--- old/unrar/loclang.hpp 2019-04-27 22:05:18.000000000 +0200
+++ new/unrar/loclang.hpp 2019-08-29 22:34:43.000000000 +0200
@@ -131,7 +131,7 @@
#define MCHelpSwTO L"\n to[mcao]<t> Process files older than <t> time"
#define MCHelpSwTA L"\n ta[mcao]<d> Process files modified after <d> YYYYMMDDHHMMSS date"
#define MCHelpSwTB L"\n tb[mcao]<d> Process files modified before <d> YYYYMMDDHHMMSS date"
-#define MCHelpSwTS L"\n ts[m,c,a] Save or restore file time (modification, creation, access)"
+#define MCHelpSwTS L"\n ts[m,c,a,p] Save or restore time (modification, creation, access, preserve)"
#define MCHelpSwU L"\n u Update files"
#define MCHelpSwV L"\n v Create volumes with size autodetection or list all volumes"
#define MCHelpSwVUnr L"\n v List all volumes"
@@ -203,7 +203,6 @@
#define MErrOpenFile L"file"
#define MAddNoFiles L"\nWARNING: No files"
#define MMdfEncrSol L"\n%s: encrypted"
-#define MCannotMdfEncrSol L"\nCannot modify solid archive containing encrypted files"
#define MAddAnalyze L"\nAnalyzing archived files: "
#define MRepacking L"\nRepacking archived files: "
#define MCRCFailed L"\n%-20s - checksum error"
@@ -342,7 +341,7 @@
#define MFAT32Size L"\nWARNING: FAT32 file system does not support 4 GB or larger files"
#define MErrChangeAttr L"\nWARNING: Cannot change attributes of %s"
#define MWrongSFXVer L"\nERROR: default SFX module does not support RAR %d.%d archives"
-#define MCannotEncName L"\nCannot encrypt archive already containing encrypted files"
+#define MHeadEncMismatch L"\nCannot change the header encryption mode in already encrypted archive"
#define MCannotEmail L"\nCannot email the file %s"
#define MCopyrightS L"\nRAR SFX archive"
#define MSHelpCmd L"\n\n<Commands>"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/options.cpp new/unrar/options.cpp
--- old/unrar/options.cpp 2019-04-27 22:05:18.000000000 +0200
+++ new/unrar/options.cpp 2019-08-29 22:34:43.000000000 +0200
@@ -22,7 +22,7 @@
Method=3;
MsgStream=MSG_STDOUT;
ConvertNames=NAMES_ORIGINALCASE;
- xmtime=EXTTIME_HIGH3;
+ xmtime=EXTTIME_MAX;
FileSizeLess=INT64NDF;
FileSizeMore=INT64NDF;
HashType=HASH_CRC32;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/options.hpp new/unrar/options.hpp
--- old/unrar/options.hpp 2019-04-27 22:05:18.000000000 +0200
+++ new/unrar/options.hpp 2019-08-29 22:34:43.000000000 +0200
@@ -21,7 +21,7 @@
enum {ARCTIME_NONE=0,ARCTIME_KEEP,ARCTIME_LATEST};
enum EXTTIME_MODE {
- EXTTIME_NONE=0,EXTTIME_1S,EXTTIME_HIGH1,EXTTIME_HIGH2,EXTTIME_HIGH3
+ EXTTIME_NONE=0,EXTTIME_1S,EXTTIME_MAX
};
enum {NAMES_ORIGINALCASE=0,NAMES_UPPERCASE,NAMES_LOWERCASE};
@@ -92,6 +92,12 @@
uint ExclFileAttr;
uint InclFileAttr;
+
+ // We handle -ed and -e+d with special flags instead of attribute mask,
+ // so it works with both Windows and Unix archives.
+ bool ExclDir;
+ bool InclDir;
+
bool InclAttrSet;
size_t WinSize;
wchar TempPath[NM];
@@ -162,6 +168,7 @@
#ifndef SFX_MODULE
bool GenerateArcName;
wchar GenerateMask[MAX_GENERATE_MASK];
+ wchar DefGenerateMask[MAX_GENERATE_MASK];
#endif
bool SyncFiles;
bool ProcessEA;
@@ -185,6 +192,7 @@
EXTTIME_MODE xmtime; // Extended time modes (time precision to store).
EXTTIME_MODE xctime;
EXTTIME_MODE xatime;
+ bool PreserveAtime;
wchar CompressStdin[NM];
uint Threads; // We use it to init hash even if RAR_SMP is not defined.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/recvol.cpp new/unrar/recvol.cpp
--- old/unrar/recvol.cpp 2019-04-27 22:05:19.000000000 +0200
+++ new/unrar/recvol.cpp 2019-08-29 22:34:44.000000000 +0200
@@ -31,12 +31,12 @@
// handling exceptions. So it can close and delete files on Cancel.
if (Fmt==RARFMT15)
{
- RecVolumes3 RecVol(false);
+ RecVolumes3 RecVol(Cmd,false);
return RecVol.Restore(Cmd,Name,Silent);
}
else
{
- RecVolumes5 RecVol(false);
+ RecVolumes5 RecVol(Cmd,false);
return RecVol.Restore(Cmd,Name,Silent);
}
}
@@ -100,12 +100,12 @@
RevFile.Close();
if (Rev5)
{
- RecVolumes5 RecVol(true);
+ RecVolumes5 RecVol(Cmd,true);
RecVol.Test(Cmd,Name);
}
else
{
- RecVolumes3 RecVol(true);
+ RecVolumes3 RecVol(Cmd,true);
RecVol.Test(Cmd,Name);
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/recvol.hpp new/unrar/recvol.hpp
--- old/unrar/recvol.hpp 2019-04-27 22:05:19.000000000 +0200
+++ new/unrar/recvol.hpp 2019-08-29 22:34:44.000000000 +0200
@@ -14,7 +14,7 @@
ThreadPool *RSThreadPool;
#endif
public:
- RecVolumes3(bool TestOnly);
+ RecVolumes3(RAROptions *Cmd,bool TestOnly);
~RecVolumes3();
void Make(RAROptions *Cmd,wchar *ArcName);
bool Restore(RAROptions *Cmd,const wchar *Name,bool Silent);
@@ -71,11 +71,12 @@
#ifdef RAR_SMP
ThreadPool *RecThreadPool;
#endif
- RecRSThreadData ThreadData[MaxPoolThreads]; // Store thread parameters.
+ uint MaxUserThreads; // Maximum number of threads defined by user.
+ RecRSThreadData *ThreadData; // Array to store thread parameters.
public: // 'public' only because called from thread functions.
void ProcessAreaRS(RecRSThreadData *td);
public:
- RecVolumes5(bool TestOnly);
+ RecVolumes5(RAROptions *Cmd,bool TestOnly);
~RecVolumes5();
bool Restore(RAROptions *Cmd,const wchar *Name,bool Silent);
void Test(RAROptions *Cmd,const wchar *Name);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/recvol3.cpp new/unrar/recvol3.cpp
--- old/unrar/recvol3.cpp 2019-04-27 22:05:19.000000000 +0200
+++ new/unrar/recvol3.cpp 2019-08-29 22:34:44.000000000 +0200
@@ -36,7 +36,7 @@
}
#endif
-RecVolumes3::RecVolumes3(bool TestOnly)
+RecVolumes3::RecVolumes3(RAROptions *Cmd,bool TestOnly)
{
memset(SrcFile,0,sizeof(SrcFile));
if (TestOnly)
@@ -50,7 +50,7 @@
Buf.Alloc(TotalBufferSize);
memset(SrcFile,0,sizeof(SrcFile));
#ifdef RAR_SMP
- RSThreadPool=CreateThreadPool();
+ RSThreadPool=new ThreadPool(Cmd->Threads);
#endif
}
}
@@ -61,7 +61,7 @@
for (size_t I=0;IThreads;
- RSEncode rse[MaxPoolThreads];
#else
uint ThreadNumber=1;
- RSEncode rse[1];
#endif
+ RSEncode *rse=new RSEncode[ThreadNumber];
for (uint I=0;IWrite(&Buf[I*RecBufferSize],MaxRead);
}
+ delete[] rse;
+
for (int I=0;IThreads;
+#else
+ MaxUserThreads=1;
+#endif
+
+ ThreadData=new RecRSThreadData[MaxUserThreads];
+ for (uint I=0;IThreads;
-#else
- uint ThreadNumber=1;
-#endif
+ uint ThreadNumber=MaxUserThreads;
const uint MinThreadBlock=0x1000;
ThreadNumber=Min(ThreadNumber,MaxRead/MinThreadBlock);
@@ -238,7 +242,7 @@
uiMsg(UIMSG_STRING,Item->Name);
uint RevCRC;
- CalcFileSum(Item->f,&RevCRC,NULL,Cmd->Threads,INT64NDF,CALCFSUM_CURPOS);
+ CalcFileSum(Item->f,&RevCRC,NULL,MaxUserThreads,INT64NDF,CALCFSUM_CURPOS);
Item->Valid=RevCRC==Item->CRC;
if (!Item->Valid)
{
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/rijndael.cpp new/unrar/rijndael.cpp
--- old/unrar/rijndael.cpp 2019-04-27 22:05:20.000000000 +0200
+++ new/unrar/rijndael.cpp 2019-08-29 22:34:44.000000000 +0200
@@ -75,8 +75,14 @@
// Check SSE here instead of constructor, so if object is a part of some
// structure memset'ed before use, this variable is not lost.
int CPUInfo[4];
- __cpuid(CPUInfo, 1);
- AES_NI=(CPUInfo[2] & 0x2000000)!=0;
+ __cpuid(CPUInfo, 0x80000000); // Get the maximum supported cpuid function.
+ if ((CPUInfo[0] & 0x7fffffff)>=1)
+ {
+ __cpuid(CPUInfo, 1);
+ AES_NI=(CPUInfo[2] & 0x2000000)!=0;
+ }
+ else
+ AES_NI=0;
#endif
// Other developers asked us to initialize it to suppress "may be used
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/system.cpp new/unrar/system.cpp
--- old/unrar/system.cpp 2019-04-27 22:05:21.000000000 +0200
+++ new/unrar/system.cpp 2019-08-29 22:34:44.000000000 +0200
@@ -187,18 +187,27 @@
SSE_VERSION GetSSEVersion()
{
int CPUInfo[4];
- __cpuid(CPUInfo, 7);
- if ((CPUInfo[1] & 0x20)!=0)
- return SSE_AVX2;
- __cpuid(CPUInfo, 1);
- if ((CPUInfo[2] & 0x80000)!=0)
- return SSE_SSE41;
- if ((CPUInfo[2] & 0x200)!=0)
- return SSE_SSSE3;
- if ((CPUInfo[3] & 0x4000000)!=0)
- return SSE_SSE2;
- if ((CPUInfo[3] & 0x2000000)!=0)
- return SSE_SSE;
+ __cpuid(CPUInfo, 0x80000000);
+ uint MaxSupported=CPUInfo[0] & 0x7fffffff; // Maximum supported cpuid function.
+
+ if (MaxSupported>=7)
+ {
+ __cpuid(CPUInfo, 7);
+ if ((CPUInfo[1] & 0x20)!=0)
+ return SSE_AVX2;
+ }
+ if (MaxSupported>=1)
+ {
+ __cpuid(CPUInfo, 1);
+ if ((CPUInfo[2] & 0x80000)!=0)
+ return SSE_SSE41;
+ if ((CPUInfo[2] & 0x200)!=0)
+ return SSE_SSSE3;
+ if ((CPUInfo[3] & 0x4000000)!=0)
+ return SSE_SSE2;
+ if ((CPUInfo[3] & 0x2000000)!=0)
+ return SSE_SSE;
+ }
return SSE_NONE;
}
#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/threadmisc.cpp new/unrar/threadmisc.cpp
--- old/unrar/threadmisc.cpp 2019-04-27 22:05:21.000000000 +0200
+++ new/unrar/threadmisc.cpp 2019-08-29 22:34:44.000000000 +0200
@@ -1,7 +1,3 @@
-// Typically we use the same global thread pool for all RAR modules.
-static ThreadPool *GlobalPool=NULL;
-static uint GlobalPoolUseCount=0;
-
static inline bool CriticalSectionCreate(CRITSECT_HANDLE *CritSection)
{
#ifdef _WIN_ALL
@@ -43,53 +39,6 @@
}
-static struct GlobalPoolCreateSync
-{
- CRITSECT_HANDLE CritSection;
- GlobalPoolCreateSync() { CriticalSectionCreate(&CritSection); }
- ~GlobalPoolCreateSync() { CriticalSectionDelete(&CritSection); }
-} PoolCreateSync;
-
-
-ThreadPool* CreateThreadPool()
-{
-#ifdef RARDLL
- // We use a simple thread pool, which does not allow to add tasks from
- // different functions and threads in the same time. It is ok for RAR,
- // but UnRAR.dll can be used in multithreaded environment. So we return
- // a new pool for UnRAR.dll every time.
- return new ThreadPool(MaxPoolThreads);
-#else
- // Reuse the existing pool for RAR.
- CriticalSectionStart(&PoolCreateSync.CritSection);
-
- if (GlobalPoolUseCount++ == 0)
- GlobalPool=new ThreadPool(MaxPoolThreads);
-
- CriticalSectionEnd(&PoolCreateSync.CritSection);
- return GlobalPool;
-#endif
-}
-
-
-void DestroyThreadPool(ThreadPool *Pool)
-{
- if (Pool!=NULL)
- {
-#ifdef RARDLL
- delete Pool;
-#else
- CriticalSectionStart(&PoolCreateSync.CritSection);
-
- if (Pool==GlobalPool && GlobalPoolUseCount > 0 && --GlobalPoolUseCount == 0)
- delete GlobalPool;
-
- CriticalSectionEnd(&PoolCreateSync.CritSection);
-#endif
- }
-}
-
-
static THREAD_HANDLE ThreadCreate(NATIVE_THREAD_PTR Proc,void *Data)
{
#ifdef _UNIX
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/threadpool.hpp new/unrar/threadpool.hpp
--- old/unrar/threadpool.hpp 2019-04-27 22:05:21.000000000 +0200
+++ new/unrar/threadpool.hpp 2019-08-29 22:34:44.000000000 +0200
@@ -98,9 +98,6 @@
#endif
};
-ThreadPool* CreateThreadPool();
-void DestroyThreadPool(ThreadPool *Pool);
-
#endif // RAR_SMP
#endif // _RAR_THREADPOOL_
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/ui.hpp new/unrar/ui.hpp
--- old/unrar/ui.hpp 2019-04-27 22:05:21.000000000 +0200
+++ new/unrar/ui.hpp 2019-08-29 22:34:44.000000000 +0200
@@ -20,7 +20,7 @@
UIERROR_SUBHEADERDATABROKEN, UIERROR_RRDAMAGED, UIERROR_UNKNOWNMETHOD,
UIERROR_UNKNOWNENCMETHOD, UIERROR_RENAMING, UIERROR_NEWERRAR,
UIERROR_NOTSFX, UIERROR_OLDTOSFX,
- UIERROR_WRONGSFXVER, UIERROR_ALREADYENC, UIERROR_DICTOUTMEM,
+ UIERROR_WRONGSFXVER, UIERROR_HEADENCMISMATCH, UIERROR_DICTOUTMEM,
UIERROR_USESMALLERDICT, UIERROR_MODIFYUNKNOWN, UIERROR_MODIFYOLD,
UIERROR_MODIFYLOCKED, UIERROR_MODIFYVOLUME, UIERROR_NOTVOLUME,
UIERROR_NOTFIRSTVOLUME, UIERROR_RECVOLLIMIT, UIERROR_RECVOLDIFFSETS,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/unpack.cpp new/unrar/unpack.cpp
--- old/unrar/unpack.cpp 2019-04-27 22:05:22.000000000 +0200
+++ new/unrar/unpack.cpp 2019-08-29 22:34:44.000000000 +0200
@@ -26,7 +26,7 @@
UnpSomeRead=false;
#ifdef RAR_SMP
MaxUserThreads=1;
- UnpThreadPool=CreateThreadPool();
+ UnpThreadPool=NULL;
ReadBufMT=NULL;
UnpThreadData=NULL;
#endif
@@ -52,13 +52,24 @@
if (Window!=NULL)
free(Window);
#ifdef RAR_SMP
- DestroyThreadPool(UnpThreadPool);
+ delete UnpThreadPool;
delete[] ReadBufMT;
delete[] UnpThreadData;
#endif
}
+#ifdef RAR_SMP
+void Unpack::SetThreads(uint Threads)
+{
+ // More than 8 threads are unlikely to provide noticeable gain
+ // for unpacking, but would use the additional memory.
+ MaxUserThreads=Min(Threads,8);
+ UnpThreadPool=new ThreadPool(MaxUserThreads);
+}
+#endif
+
+
void Unpack::Init(size_t WinSize,bool Solid)
{
// If 32-bit RAR unpacks an archive with 4 GB dictionary, the window size
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/unpack.hpp new/unrar/unpack.hpp
--- old/unrar/unpack.hpp 2019-04-27 22:05:22.000000000 +0200
+++ new/unrar/unpack.hpp 2019-08-29 22:34:44.000000000 +0200
@@ -382,10 +382,7 @@
void SetSuspended(bool Suspended) {Unpack::Suspended=Suspended;}
#ifdef RAR_SMP
- // More than 8 threads are unlikely to provide a noticeable gain
- // for unpacking, but would use the additional memory.
- void SetThreads(uint Threads) {MaxUserThreads=Min(Threads,8);}
-
+ void SetThreads(uint Threads);
void UnpackDecode(UnpackThreadData &D);
#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/version.hpp new/unrar/version.hpp
--- old/unrar/version.hpp 2019-04-27 22:05:22.000000000 +0200
+++ new/unrar/version.hpp 2019-08-29 22:34:44.000000000 +0200
@@ -1,6 +1,6 @@
#define RARVER_MAJOR 5
-#define RARVER_MINOR 71
-#define RARVER_BETA 0
-#define RARVER_DAY 28
-#define RARVER_MONTH 4
+#define RARVER_MINOR 80
+#define RARVER_BETA 1
+#define RARVER_DAY 30
+#define RARVER_MONTH 8
#define RARVER_YEAR 2019
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/win32acl.cpp new/unrar/win32acl.cpp
--- old/unrar/win32acl.cpp 2019-04-27 22:05:22.000000000 +0200
+++ new/unrar/win32acl.cpp 2019-08-29 22:34:44.000000000 +0200
@@ -67,7 +67,7 @@
void ExtractACL(Archive &Arc,const wchar *FileName)
{
Array<byte> SubData;
- if (!Arc.ReadSubData(&SubData,NULL))
+ if (!Arc.ReadSubData(&SubData,NULL,false))
return;
SetACLPrivileges();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/win32stm.cpp new/unrar/win32stm.cpp
--- old/unrar/win32stm.cpp 2019-04-27 22:05:23.000000000 +0200
+++ new/unrar/win32stm.cpp 2019-08-29 22:34:44.000000000 +0200
@@ -104,7 +104,8 @@
if (TestMode)
{
- Arc.ReadSubData(NULL,NULL);
+ File CurFile;
+ Arc.ReadSubData(NULL,&CurFile,true);
return;
}
@@ -116,7 +117,7 @@
if ((fd.FileAttr & FILE_ATTRIBUTE_READONLY)!=0)
SetFileAttr(FileName,fd.FileAttr & ~FILE_ATTRIBUTE_READONLY);
File CurFile;
- if (CurFile.WCreate(FullName) && Arc.ReadSubData(NULL,&CurFile))
+ if (CurFile.WCreate(FullName) && Arc.ReadSubData(NULL,&CurFile,false))
CurFile.Close();
File HostFile;
if (Found && HostFile.Open(FileName,FMF_OPENSHARED|FMF_UPDATE))