Hello community, here is the log from the commit of package unrar for openSUSE:Factory:NonFree checked in at 2014-08-25 11:11:41 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory:NonFree/unrar (Old) and /work/SRC/openSUSE:Factory:NonFree/.unrar.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "unrar" Changes: -------- --- /work/SRC/openSUSE:Factory:NonFree/unrar/unrar.changes 2014-06-16 21:35:27.000000000 +0200 +++ /work/SRC/openSUSE:Factory:NonFree/.unrar.new/unrar.changes 2014-08-25 11:11:42.000000000 +0200 @@ -1,0 +2,7 @@ +Sun Aug 10 12:10:29 UTC 2014 - [email protected] + +- Update to 5.1.7. + * Based on rar 5.11 beta 1. + * No changelog available. + +------------------------------------------------------------------- Old: ---- unrarsrc-5.1.6.tar.gz New: ---- unrarsrc-5.1.7.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ unrar.spec ++++++ --- /var/tmp/diff_new_pack.mglRuc/_old 2014-08-25 11:11:43.000000000 +0200 +++ /var/tmp/diff_new_pack.mglRuc/_new 2014-08-25 11:11:43.000000000 +0200 @@ -18,10 +18,10 @@ # majorversion should match the major version number. %define majorversion 5 -%define libsuffix 5_1_6 +%define libsuffix 5_1_7 Name: unrar -Version: 5.1.6 +Version: 5.1.7 Release: 0 License: SUSE-NonFree Summary: A program to extract, test, and view RAR archives ++++++ unrarsrc-5.1.6.tar.gz -> unrarsrc-5.1.7.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/dll.rc new/unrar/dll.rc --- old/unrar/dll.rc 2014-06-10 19:10:30.000000000 +0200 +++ new/unrar/dll.rc 2014-08-06 15:52:53.000000000 +0200 @@ -2,8 +2,8 @@ #include <commctrl.h> VS_VERSION_INFO VERSIONINFO -FILEVERSION 5, 10, 100, 1258 -PRODUCTVERSION 5, 10, 100, 1258 +FILEVERSION 5, 11, 1, 1315 +PRODUCTVERSION 5, 11, 1, 1315 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.10.0\0" - VALUE "ProductVersion", "5.10.0\0" + VALUE "FileVersion", "5.11.1\0" + VALUE "ProductVersion", "5.11.1\0" VALUE "LegalCopyright", "Copyright � Alexander Roshal 1993-2014\0" VALUE "OriginalFilename", "Unrar.dll\0" } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/extract.cpp new/unrar/extract.cpp --- old/unrar/extract.cpp 2014-06-10 19:14:06.000000000 +0200 +++ new/unrar/extract.cpp 2014-08-06 16:00:15.000000000 +0200 @@ -613,7 +613,13 @@ Arc.SeekToNext(); - bool ValidCRC=DataIO.UnpHash.Cmp(&Arc.FileHead.FileHash,Arc.FileHead.UseHashKey ? Arc.FileHead.HashKey:NULL); + // We check for "split after" flag to detect partially extracted files + // from incomplete volume sets. For them file header contains packed + // data hash, which must not be compared against unpacked data hash + // to prevent accidental match. Moreover, for -m0 volumes packed data + // hash would match truncated unpacked data hash and lead to fake "OK" + // in incomplete volume set. + bool ValidCRC=!Arc.FileHead.SplitAfter && DataIO.UnpHash.Cmp(&Arc.FileHead.FileHash,Arc.FileHead.UseHashKey ? Arc.FileHead.HashKey:NULL); // We set AnySolidDataUnpackedWell to true if we found at least one // valid non-zero solid file in preceding solid stream. If it is true diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/file.cpp new/unrar/file.cpp --- old/unrar/file.cpp 2014-06-10 19:14:06.000000000 +0200 +++ new/unrar/file.cpp 2014-08-06 16:00:15.000000000 +0200 @@ -658,10 +658,26 @@ { Wait(); size_t SizeToRead=(!CopyAll && Length<(int64)Buffer.Size()) ? (size_t)Length:Buffer.Size(); - int ReadSize=Read(&Buffer[0],SizeToRead); + char *Buf=&Buffer[0]; + int ReadSize=Read(Buf,SizeToRead); if (ReadSize==0) break; - Dest.Write(&Buffer[0],ReadSize); + size_t WriteSize=ReadSize; +#ifdef _WIN_ALL + // For FAT32 USB flash drives in Windows if first write is 4 KB or more, + // write caching is disabled and "write through" is enabled, resulting + // in bad performance, especially for many small files. It happens when + // we create SFX archive on USB drive, because SFX module is writetn first. + // So we split the first write to small 1 KB followed by rest of data. + if (CopySize==0 && WriteSize>=4096) + { + const size_t FirstWrite=1024; + Dest.Write(Buf,FirstWrite); + Buf+=FirstWrite; + WriteSize-=FirstWrite; + } +#endif + Dest.Write(Buf,WriteSize); CopySize+=ReadSize; if (!CopyAll) Length-=ReadSize; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/filestr.cpp new/unrar/filestr.cpp --- old/unrar/filestr.cpp 2014-06-10 19:14:06.000000000 +0200 +++ new/unrar/filestr.cpp 2014-08-06 16:00:15.000000000 +0200 @@ -22,7 +22,7 @@ wcsncpyz(FileName,Name,ASIZE(FileName)); File SrcFile; - if (FileName!=NULL && *FileName!=0) + if (*FileName!=0) { bool OpenCode=AbortOnError ? SrcFile.WOpen(FileName):SrcFile.Open(FileName,0); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/os.hpp new/unrar/os.hpp --- old/unrar/os.hpp 2014-06-10 19:14:06.000000000 +0200 +++ new/unrar/os.hpp 2014-08-06 16:00:15.000000000 +0200 @@ -158,6 +158,11 @@ #define SAVE_LINKS #endif +#if defined(__linux) && !defined (_ANDROID) || defined(__FreeBSD__) +#include <sys/time.h> +#define USE_LUTIMES +#endif + #define ENABLE_ACCESS #define DefConfigName L".rarrc" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/pathfn.cpp new/unrar/pathfn.cpp --- old/unrar/pathfn.cpp 2014-06-10 19:14:06.000000000 +0200 +++ new/unrar/pathfn.cpp 2014-08-06 16:00:15.000000000 +0200 @@ -643,7 +643,7 @@ #ifndef SFX_MODULE -static void GenArcName(wchar *ArcName,wchar *GenerateMask,uint ArcNumber,bool &ArcNumPresent) +static void GenArcName(wchar *ArcName,const wchar *GenerateMask,uint ArcNumber,bool &ArcNumPresent) { bool Prefix=false; if (*GenerateMask=='+') @@ -809,7 +809,7 @@ } -void GenerateArchiveName(wchar *ArcName,size_t MaxSize,wchar *GenerateMask,bool Archiving) +void GenerateArchiveName(wchar *ArcName,size_t MaxSize,const wchar *GenerateMask,bool Archiving) { // Must be enough space for archive name plus all stuff in mask plus // extra overhead produced by mask 'N' (archive number) characters. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/pathfn.hpp new/unrar/pathfn.hpp --- old/unrar/pathfn.hpp 2014-06-10 19:14:06.000000000 +0200 +++ new/unrar/pathfn.hpp 2014-08-06 16:00:15.000000000 +0200 @@ -58,7 +58,7 @@ wchar* GetWideName(const char *Name,const wchar *NameW,wchar *DestW,size_t DestSize); #ifndef SFX_MODULE -void GenerateArchiveName(wchar *ArcName,size_t MaxSize,wchar *GenerateMask,bool Archiving); +void GenerateArchiveName(wchar *ArcName,size_t MaxSize,const wchar *GenerateMask,bool Archiving); #endif #ifdef _WIN_ALL diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/rarvm.cpp new/unrar/rarvm.cpp --- old/unrar/rarvm.cpp 2014-06-10 19:14:06.000000000 +0200 +++ new/unrar/rarvm.cpp 2014-08-06 16:00:15.000000000 +0200 @@ -984,7 +984,7 @@ byte *SrcData=Mem,*DestData=SrcData+DataSize; const int Channels=3; SET_VALUE(false,&Mem[VM_GLOBALMEMADDR+0x20],DataSize); - if ((uint)DataSize>=VM_GLOBALMEMADDR/2 || PosR<0) + if ((uint)DataSize>=VM_GLOBALMEMADDR/2 || Width<0 || PosR<0) break; for (int CurChannel=0;CurChannel<Channels;CurChannel++) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/recvol3.cpp new/unrar/recvol3.cpp --- old/unrar/recvol3.cpp 2014-06-10 19:14:06.000000000 +0200 +++ new/unrar/recvol3.cpp 2014-08-06 16:00:15.000000000 +0200 @@ -309,6 +309,7 @@ wcscpy(LastVolName,ArcName); uiMsg(UIMSG_MISSINGVOL,ArcName); + uiMsg(UIEVENT_NEWARCHIVE,ArcName); } SrcFile[CurArcNum]=(File*)NewFile; NextVolumeName(ArcName,ASIZE(ArcName),!NewNumbering); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/recvol5.cpp new/unrar/recvol5.cpp --- old/unrar/recvol5.cpp 2014-06-10 19:14:06.000000000 +0200 +++ new/unrar/recvol5.cpp 2014-08-06 16:00:15.000000000 +0200 @@ -292,6 +292,7 @@ { wcsncpyz(Item->Name,FirstVolName,ASIZE(Item->Name)); uiMsg(UIMSG_CREATING,Item->Name); + uiMsg(UIEVENT_NEWARCHIVE,Item->Name); File *NewVol=new File; bool UserReject; if (!FileCreate(Cmd,NewVol,Item->Name,ASIZE(Item->Name),&UserReject)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/threadmisc.cpp new/unrar/threadmisc.cpp --- old/unrar/threadmisc.cpp 2014-06-10 19:14:06.000000000 +0200 +++ new/unrar/threadmisc.cpp 2014-08-06 16:00:15.000000000 +0200 @@ -77,12 +77,13 @@ static THREAD_HANDLE ThreadCreate(NATIVE_THREAD_PTR Proc,void *Data) { #ifdef _UNIX +/* pthread_attr_t attr; pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); - +*/ pthread_t pt; - int Code=pthread_create(&pt,&attr,Proc,Data); + int Code=pthread_create(&pt,NULL/*&attr*/,Proc,Data); if (Code!=0) { wchar Msg[100]; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/timefn.cpp new/unrar/timefn.cpp --- old/unrar/timefn.cpp 2014-06-10 19:14:06.000000000 +0200 +++ new/unrar/timefn.cpp 2014-08-06 16:00:15.000000000 +0200 @@ -42,22 +42,30 @@ GetWin32(&ft); FILETIME lft; - // 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); + 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); + } SYSTEMTIME st; FileTimeToSystemTime(&lft,&st); @@ -121,21 +129,30 @@ if (lft.dwLowDateTime<lt->Reminder) lft.dwHighDateTime++; - // Reverse procedure which we do in GetLocal. - SYSTEMTIME st1,st2; - FileTimeToSystemTime(&lft,&st2); - TzSpecificLocalTimeToSystemTime(NULL,&st2,&st1); FILETIME ft; - 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); + 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); + } *this=ft; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/ui.hpp new/unrar/ui.hpp --- old/unrar/ui.hpp 2014-06-10 19:14:06.000000000 +0200 +++ new/unrar/ui.hpp 2014-08-06 16:00:15.000000000 +0200 @@ -56,6 +56,7 @@ UIEVENT_ERASEDISK, UIEVENT_FILESUMSTART, UIEVENT_FILESUMPROGRESS, UIEVENT_FILESUMEND, UIEVENT_PROTECTSTART, UIEVENT_PROTECTEND, UIEVENT_TESTADDEDSTART, UIEVENT_TESTADDEDEND, UIEVENT_RRTESTING, + UIEVENT_NEWARCHIVE, UIEVENT_NEWREVFILE }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/ulinks.cpp new/unrar/ulinks.cpp --- old/unrar/ulinks.cpp 2014-06-10 19:14:06.000000000 +0200 +++ new/unrar/ulinks.cpp 2014-08-06 16:00:15.000000000 +0200 @@ -1,6 +1,6 @@ -static bool UnixSymlink(const char *Target,const wchar *LinkName) +static bool UnixSymlink(const char *Target,const wchar *LinkName,RarTime *ftm,RarTime *fta) { CreatePath(LinkName,true); DelFile(LinkName); @@ -17,9 +17,15 @@ } return false; } - // We do not set time of created symlink, because utime changes - // time of link target and lutimes is not available on all Linux - // systems at the moment of writing this code. +#ifdef USE_LUTIMES + struct timeval tv[2]; + tv[0].tv_sec=fta->GetUnix(); + tv[0].tv_usec=long(fta->GetRaw()%10000000/10); + tv[1].tv_sec=ftm->GetUnix(); + tv[1].tv_usec=long(ftm->GetRaw()%10000000/10); + lutimes(LinkNameA,tv); +#endif + return true; } @@ -42,7 +48,7 @@ if (!DataIO.UnpHash.Cmp(&Arc.FileHead.FileHash,Arc.FileHead.UseHashKey ? Arc.FileHead.HashKey:NULL)) return true; - return UnixSymlink(Target,LinkName); + return UnixSymlink(Target,LinkName,&Arc.FileHead.mtime,&Arc.FileHead.atime); } return false; } @@ -62,5 +68,5 @@ return false; DosSlashToUnix(Target,Target,ASIZE(Target)); } - return UnixSymlink(Target,Name); + return UnixSymlink(Target,Name,&hd->mtime,&hd->atime); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/unpack.hpp new/unrar/unpack.hpp --- old/unrar/unpack.hpp 2014-06-10 19:14:06.000000000 +0200 +++ new/unrar/unpack.hpp 2014-08-06 16:00:15.000000000 +0200 @@ -325,7 +325,7 @@ ModelPPM PPM; int PPMEscChar; - byte UnpOldTable[HUFF_TABLE_SIZE]; + byte UnpOldTable[HUFF_TABLE_SIZE30]; int UnpBlockType; bool TablesRead; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/unpack30.cpp new/unrar/unpack30.cpp --- old/unrar/unpack30.cpp 2014-06-10 19:14:06.000000000 +0200 +++ new/unrar/unpack30.cpp 2014-08-06 16:00:15.000000000 +0200 @@ -798,13 +798,13 @@ } TablesRead=true; if (Inp.InAddr>ReadTop) - return(false); + return false; MakeDecodeTables(&Table[0],&BlockTables.LD,NC30); MakeDecodeTables(&Table[NC30],&BlockTables.DD,DC30); MakeDecodeTables(&Table[NC30+DC30],&BlockTables.LDD,LDC30); MakeDecodeTables(&Table[NC30+DC30+LDC30],&BlockTables.RD,RC30); memcpy(UnpOldTable,Table,sizeof(UnpOldTable)); - return(true); + return true; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/version.hpp new/unrar/version.hpp --- old/unrar/version.hpp 2014-06-10 19:14:06.000000000 +0200 +++ new/unrar/version.hpp 2014-08-06 16:00:15.000000000 +0200 @@ -1,6 +1,6 @@ #define RARVER_MAJOR 5 -#define RARVER_MINOR 10 -#define RARVER_BETA 0 -#define RARVER_DAY 10 -#define RARVER_MONTH 6 +#define RARVER_MINOR 11 +#define RARVER_BETA 1 +#define RARVER_DAY 6 +#define RARVER_MONTH 8 #define RARVER_YEAR 2014 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/unrar/volume.cpp new/unrar/volume.cpp --- old/unrar/volume.cpp 2014-06-10 19:14:06.000000000 +0200 +++ new/unrar/volume.cpp 2014-08-06 16:00:15.000000000 +0200 @@ -241,7 +241,7 @@ if (RetCode==0) DllVolAborted=true; else - CharToWide(NextNameA,NextName,ASIZE(NextName)); + CharToWide(NextNameA,NextName,NameSize); } // We quit only on 'abort' condition, but not on 'name not changed'. -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
