Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/kornelski/7z.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Pavlov <ipavlov@users.sourceforge.net>2005-12-04 03:00:00 +0300
committerKornel LesiƄski <kornel@geekhood.net>2016-05-28 02:15:45 +0300
commitacac9875755c32ac27123f601e87c6a6ea9913e9 (patch)
treeea3e7abc5a16d3a7afbe85f95ccb47f286bbb291
parente18587ba512abb4b3c81d4ff307c59e31589207d (diff)
4.314.31
-rwxr-xr-x7zip/Archive/7z/7zHandler.h20
-rwxr-xr-x7zip/Archive/7z/7zHandlerOut.cpp72
-rwxr-xr-x7zip/Archive/7z_C/7zAlloc.c11
-rwxr-xr-x7zip/Archive/7z_C/7zIn.c153
-rwxr-xr-x7zip/Archive/7z_C/7zItem.h2
-rwxr-xr-x7zip/Archive/7z_C/7zMain.c14
-rwxr-xr-x7zip/Archive/Tar/DllExports.cpp7
-rwxr-xr-x7zip/Bundles/Alone7z/makefile1
-rwxr-xr-x7zip/Compress/LZMA_Alone/LzmaAlone.cpp20
-rwxr-xr-x7zip/FileManager/PanelItemOpen.cpp8
-rwxr-xr-x7zip/MyVersion.h8
-rwxr-xr-x7zip/UI/Common/Extract.cpp3
-rwxr-xr-x7zip/UI/Explorer/SystemPage/SystemPage.cpp9
-rwxr-xr-x7zip/UI/GUI/OpenCallbackGUI.cpp2
-rwxr-xr-xDOC/7zC.txt3
-rwxr-xr-xDOC/7zip.nsi7
-rwxr-xr-xDOC/history.txt6
-rwxr-xr-xDOC/lzma.txt25
-rwxr-xr-xDOC/readme.txt2
19 files changed, 239 insertions, 134 deletions
diff --git a/7zip/Archive/7z/7zHandler.h b/7zip/Archive/7z/7zHandler.h
index b7a53b20..23caf697 100755
--- a/7zip/Archive/7z/7zHandler.h
+++ b/7zip/Archive/7z/7zHandler.h
@@ -140,11 +140,20 @@ private:
bool _encryptHeaders;
bool _copyMode;
+
UInt32 _defaultDicSize;
UInt32 _defaultAlgorithm;
UInt32 _defaultFastBytes;
UString _defaultMatchFinder;
+
UInt32 _defaultBZip2Passes;
+
+ UInt32 _defaultPpmdMemSize;
+ UInt32 _defaultPpmdOrder;
+
+ UInt32 _defaultDeflateFastBytes;
+ UInt32 _defaultDeflatePasses;
+
bool _autoFilter;
bool _multiThread;
UInt32 _level;
@@ -219,11 +228,20 @@ private:
_encryptHeaders = false;
_multiThread = false;
_copyMode = false;
+
_defaultDicSize = (1 << 21);
- _defaultBZip2Passes = 1;
_defaultAlgorithm = 1;
_defaultFastBytes = 32;
_defaultMatchFinder = L"BT4";
+
+ _defaultBZip2Passes = 1;
+
+ _defaultPpmdMemSize = (1 << 24);
+ _defaultPpmdOrder = 6;
+
+ _defaultDeflateFastBytes = 32;
+ _defaultDeflatePasses = 1;
+
_level = 5;
_autoFilter = true;
_volumeMode = false;
diff --git a/7zip/Archive/7z/7zHandlerOut.cpp b/7zip/Archive/7z/7zHandlerOut.cpp
index 13f74c4f..f5e41518 100755
--- a/7zip/Archive/7z/7zHandlerOut.cpp
+++ b/7zip/Archive/7z/7zHandlerOut.cpp
@@ -63,6 +63,9 @@ static CMethodID k_BZip2 = { { 0x4, 0x2, 0x2 }, 3 };
const wchar_t *kCopyMethod = L"Copy";
const wchar_t *kLZMAMethodName = L"LZMA";
const wchar_t *kBZip2MethodName = L"BZip2";
+const wchar_t *kPpmdMethodName = L"PPMd";
+const wchar_t *kDeflateMethodName = L"Deflate";
+const wchar_t *kDeflate64MethodName = L"Deflate64";
const UInt32 kAlgorithmForX7 = 2;
const UInt32 kDicSizeForX7 = 1 << 23;
@@ -77,6 +80,18 @@ const UInt32 kAlgorithmForFast = 0;
const UInt32 kDicSizeForFast = 1 << 15;
static const wchar_t *kMatchFinderForFast = L"HC3";
+const UInt32 kPpmdMemSizeX1 = (1 << 22);
+const UInt32 kPpmdOrderX1 = 4;
+
+const UInt32 kPpmdMemSizeX7 = (1 << 26);
+const UInt32 kPpmdOrderX7 = 16;
+
+const UInt32 kPpmdMemSizeX9 = (192 << 20);
+const UInt32 kPpmdOrderX9 = 32;
+
+const UInt32 kDeflateFastBytesForX7 = 64;
+const UInt32 kDeflatePassesForX7 = 3;
+
const wchar_t *kDefaultMethodName = kLZMAMethodName;
static const wchar_t *kMatchFinderForHeaders = L"BT2";
@@ -91,6 +106,13 @@ static bool IsLZMethod(const UString &methodName)
static bool IsBZip2Method(const UString &methodName)
{ return (methodName.CompareNoCase(kBZip2MethodName) == 0); }
+static bool IsPpmdMethod(const UString &methodName)
+ { return (methodName.CompareNoCase(kPpmdMethodName) == 0); }
+
+static bool IsDeflateMethod(const UString &methodName)
+ { return (methodName.CompareNoCase(kDeflateMethodName) == 0) ||
+ (methodName.CompareNoCase(kDeflate64MethodName) == 0); }
+
STDMETHODIMP CHandler::GetFileTimeType(UInt32 *type)
{
*type = NFileTimeType::kWindows;
@@ -262,27 +284,28 @@ HRESULT CHandler::SetCompressionMethod(
if (oneMethodInfo.MethodName.IsEmpty())
oneMethodInfo.MethodName = kDefaultMethodName;
- if (IsLZMethod(oneMethodInfo.MethodName))
+ if (IsLZMAMethod(oneMethodInfo.MethodName))
{
- if (IsLZMAMethod(oneMethodInfo.MethodName))
- {
- SetOneMethodProp(oneMethodInfo,
- NCoderPropID::kDictionarySize, _defaultDicSize);
- SetOneMethodProp(oneMethodInfo,
- NCoderPropID::kAlgorithm, _defaultAlgorithm);
- SetOneMethodProp(oneMethodInfo,
- NCoderPropID::kNumFastBytes, _defaultFastBytes);
- SetOneMethodProp(oneMethodInfo,
- NCoderPropID::kMatchFinder, (const wchar_t *)_defaultMatchFinder);
- if (multiThread)
- SetOneMethodProp(oneMethodInfo,
- NCoderPropID::kMultiThread, true);
- }
+ SetOneMethodProp(oneMethodInfo, NCoderPropID::kDictionarySize, _defaultDicSize);
+ SetOneMethodProp(oneMethodInfo, NCoderPropID::kAlgorithm, _defaultAlgorithm);
+ SetOneMethodProp(oneMethodInfo, NCoderPropID::kNumFastBytes, _defaultFastBytes);
+ SetOneMethodProp(oneMethodInfo, NCoderPropID::kMatchFinder, (const wchar_t *)_defaultMatchFinder);
+ if (multiThread)
+ SetOneMethodProp(oneMethodInfo, NCoderPropID::kMultiThread, true);
+ }
+ else if (IsDeflateMethod(oneMethodInfo.MethodName))
+ {
+ SetOneMethodProp(oneMethodInfo, NCoderPropID::kNumFastBytes, _defaultDeflateFastBytes);
+ SetOneMethodProp(oneMethodInfo, NCoderPropID::kNumPasses, _defaultDeflatePasses);
}
else if (IsBZip2Method(oneMethodInfo.MethodName))
{
- SetOneMethodProp(oneMethodInfo,
- NCoderPropID::kNumPasses, _defaultBZip2Passes);
+ SetOneMethodProp(oneMethodInfo, NCoderPropID::kNumPasses, _defaultBZip2Passes);
+ }
+ else if (IsPpmdMethod(oneMethodInfo.MethodName))
+ {
+ SetOneMethodProp(oneMethodInfo, NCoderPropID::kUsedMemorySize, _defaultPpmdMemSize);
+ SetOneMethodProp(oneMethodInfo, NCoderPropID::kOrder, _defaultPpmdOrder);
}
@@ -999,6 +1022,9 @@ STDMETHODIMP CHandler::SetProperties(const wchar_t **names, const PROPVARIANT *v
_defaultDicSize = kDicSizeForFast;
_defaultMatchFinder = kMatchFinderForFast;
_defaultBZip2Passes = 1;
+
+ _defaultPpmdMemSize = kPpmdMemSizeX1;
+ _defaultPpmdOrder = kPpmdOrderX1;
}
else if (_level < 7)
{
@@ -1011,6 +1037,12 @@ STDMETHODIMP CHandler::SetProperties(const wchar_t **names, const PROPVARIANT *v
_defaultDicSize = kDicSizeForX7;
_defaultFastBytes = kFastBytesForX7;
_defaultBZip2Passes = 2;
+
+ _defaultPpmdMemSize = kPpmdMemSizeX7;
+ _defaultPpmdOrder = kPpmdOrderX7;
+
+ _defaultDeflateFastBytes = kDeflateFastBytesForX7;
+ _defaultDeflatePasses = kDeflatePassesForX7;
}
else
{
@@ -1019,6 +1051,12 @@ STDMETHODIMP CHandler::SetProperties(const wchar_t **names, const PROPVARIANT *v
_defaultFastBytes = kFastBytesForX9;
_defaultMatchFinder = kMatchFinderForX9;
_defaultBZip2Passes = 7;
+
+ _defaultPpmdMemSize = kPpmdMemSizeX9;
+ _defaultPpmdOrder = kPpmdOrderX9;
+
+ _defaultDeflateFastBytes = kDeflateFastBytesForX7;
+ _defaultDeflatePasses = kDeflatePassesForX7;
}
continue;
}
diff --git a/7zip/Archive/7z_C/7zAlloc.c b/7zip/Archive/7z_C/7zAlloc.c
index c5095920..21bb30c7 100755
--- a/7zip/Archive/7z_C/7zAlloc.c
+++ b/7zip/Archive/7z_C/7zAlloc.c
@@ -7,6 +7,10 @@
/* use _SZ_ALLOC_DEBUG to debug alloc/free operations */
#ifdef _SZ_ALLOC_DEBUG
+
+#ifdef _WIN32
+#include <windows.h>
+#endif
#include <stdio.h>
int g_allocCount = 0;
int g_allocCountTemp = 0;
@@ -42,6 +46,9 @@ void *SzAllocTemp(size_t size)
#ifdef _SZ_ALLOC_DEBUG
fprintf(stderr, "\nAlloc_temp %10d bytes; count = %10d", size, g_allocCountTemp);
g_allocCountTemp++;
+ #ifdef _WIN32
+ return HeapAlloc(GetProcessHeap(), 0, size);
+ #endif
#endif
return malloc(size);
}
@@ -54,6 +61,10 @@ void SzFreeTemp(void *address)
g_allocCountTemp--;
fprintf(stderr, "\nFree_temp; count = %10d", g_allocCountTemp);
}
+ #ifdef _WIN32
+ HeapFree(GetProcessHeap(), 0, address);
+ return;
+ #endif
#endif
free(address);
}
diff --git a/7zip/Archive/7z_C/7zIn.c b/7zip/Archive/7z_C/7zIn.c
index c7d65e2a..e2e9f641 100755
--- a/7zip/Archive/7z_C/7zIn.c
+++ b/7zip/Archive/7z_C/7zIn.c
@@ -380,12 +380,12 @@ SZ_RESULT SzWaitAttribute(CSzData *sd, UInt64 attribute)
}
}
-SZ_RESULT SzReadBoolVector(CSzData *sd, size_t numItems, int **v, void * (*allocFunc)(size_t size))
+SZ_RESULT SzReadBoolVector(CSzData *sd, size_t numItems, Byte **v, void * (*allocFunc)(size_t size))
{
Byte b = 0;
Byte mask = 0;
size_t i;
- RINOK(MySzInAlloc((void **)v, numItems * sizeof(int), allocFunc));
+ RINOK(MySzInAlloc((void **)v, numItems * sizeof(Byte), allocFunc));
for(i = 0; i < numItems; i++)
{
if (mask == 0)
@@ -393,20 +393,20 @@ SZ_RESULT SzReadBoolVector(CSzData *sd, size_t numItems, int **v, void * (*alloc
RINOK(SzReadByte(sd, &b));
mask = 0x80;
}
- (*v)[i] = ((b & mask) != 0);
+ (*v)[i] = (Byte)(((b & mask) != 0) ? 1 : 0);
mask >>= 1;
}
return SZ_OK;
}
-SZ_RESULT SzReadBoolVector2(CSzData *sd, size_t numItems, int **v, void * (*allocFunc)(size_t size))
+SZ_RESULT SzReadBoolVector2(CSzData *sd, size_t numItems, Byte **v, void * (*allocFunc)(size_t size))
{
Byte allAreDefined;
size_t i;
RINOK(SzReadByte(sd, &allAreDefined));
if (allAreDefined == 0)
return SzReadBoolVector(sd, numItems, v, allocFunc);
- RINOK(MySzInAlloc((void **)v, numItems * sizeof(int), allocFunc));
+ RINOK(MySzInAlloc((void **)v, numItems * sizeof(Byte), allocFunc));
for(i = 0; i < numItems; i++)
(*v)[i] = 1;
return SZ_OK;
@@ -415,7 +415,7 @@ SZ_RESULT SzReadBoolVector2(CSzData *sd, size_t numItems, int **v, void * (*allo
SZ_RESULT SzReadHashDigests(
CSzData *sd,
size_t numItems,
- int **digestsDefined,
+ Byte **digestsDefined,
UInt32 **digests,
void * (*allocFunc)(size_t size))
{
@@ -435,7 +435,7 @@ SZ_RESULT SzReadPackInfo(
CFileSize *dataOffset,
UInt32 *numPackStreams,
CFileSize **packSizes,
- int **packCRCsDefined,
+ Byte **packCRCsDefined,
UInt32 **packCRCs,
void * (*allocFunc)(size_t size))
{
@@ -467,7 +467,7 @@ SZ_RESULT SzReadPackInfo(
}
if (*packCRCsDefined == 0)
{
- RINOK(MySzInAlloc((void **)packCRCsDefined, (size_t)*numPackStreams * sizeof(int), allocFunc));
+ RINOK(MySzInAlloc((void **)packCRCsDefined, (size_t)*numPackStreams * sizeof(Byte), allocFunc));
RINOK(MySzInAlloc((void **)packCRCs, (size_t)*numPackStreams * sizeof(UInt32), allocFunc));
for(i = 0; i < *numPackStreams; i++)
{
@@ -589,7 +589,7 @@ SZ_RESULT SzGetNextFolderItem(CSzData *sd, CFolder *folder, void * (*allocFunc)(
SZ_RESULT SzReadUnPackInfo(
CSzData *sd,
UInt32 *numFolders,
- CFolder **folders,
+ CFolder **folders, /* for allocFunc */
void * (*allocFunc)(size_t size),
ISzAlloc *allocTemp)
{
@@ -636,7 +636,7 @@ SZ_RESULT SzReadUnPackInfo(
if (type == k7zIdCRC)
{
SZ_RESULT res;
- int *crcsDefined = 0;
+ Byte *crcsDefined = 0;
UInt32 *crcs = 0;
res = SzReadHashDigests(sd, *numFolders, &crcsDefined, &crcs, allocTemp->Alloc);
if (res == SZ_OK)
@@ -663,9 +663,8 @@ SZ_RESULT SzReadSubStreamsInfo(
CFolder *folders,
UInt32 *numUnPackStreams,
CFileSize **unPackSizes,
- int **digestsDefined,
+ Byte **digestsDefined,
UInt32 **digests,
- void * (*allocFunc)(size_t size),
ISzAlloc *allocTemp)
{
UInt64 type = 0;
@@ -707,9 +706,9 @@ SZ_RESULT SzReadSubStreamsInfo(
}
else
{
- *unPackSizes = (CFileSize *)allocFunc((size_t)*numUnPackStreams * sizeof(CFileSize));
+ *unPackSizes = (CFileSize *)allocTemp->Alloc((size_t)*numUnPackStreams * sizeof(CFileSize));
RINOM(*unPackSizes);
- *digestsDefined = (int *)allocTemp->Alloc((size_t)*numUnPackStreams * sizeof(int));
+ *digestsDefined = (Byte *)allocTemp->Alloc((size_t)*numUnPackStreams * sizeof(Byte));
RINOM(*digestsDefined);
*digests = (UInt32 *)allocTemp->Alloc((size_t)*numUnPackStreams * sizeof(UInt32));
RINOM(*digests);
@@ -762,7 +761,7 @@ SZ_RESULT SzReadSubStreamsInfo(
if (type == k7zIdCRC)
{
int digestIndex = 0;
- int *digestsDefined2 = 0;
+ Byte *digestsDefined2 = 0;
UInt32 *digests2 = 0;
SZ_RESULT res = SzReadHashDigests(sd, numDigests, &digestsDefined2, &digests2, allocTemp->Alloc);
if (res == SZ_OK)
@@ -809,9 +808,9 @@ SZ_RESULT SzReadStreamsInfo(
CFileSize *dataOffset,
CArchiveDatabase *db,
UInt32 *numUnPackStreams,
- CFileSize **unPackSizes,
- int **digestsDefined,
- UInt32 **digests,
+ CFileSize **unPackSizes, /* allocTemp */
+ Byte **digestsDefined, /* allocTemp */
+ UInt32 **digests, /* allocTemp */
void * (*allocFunc)(size_t size),
ISzAlloc *allocTemp)
{
@@ -839,7 +838,7 @@ SZ_RESULT SzReadStreamsInfo(
case k7zIdSubStreamsInfo:
{
RINOK(SzReadSubStreamsInfo(sd, db->NumFolders, db->Folders,
- numUnPackStreams, unPackSizes, digestsDefined, digests, allocFunc, allocTemp));
+ numUnPackStreams, unPackSizes, digestsDefined, digests, allocTemp));
break;
}
default:
@@ -928,10 +927,12 @@ SZ_RESULT SzReadFileNames(CSzData *sd, UInt32 numFiles, CFileItem *files,
SZ_RESULT SzReadHeader2(
CSzData *sd,
- CArchiveDatabaseEx *db,
- CFileSize **unPackSizes,
- int **digestsDefined,
- UInt32 **digests,
+ CArchiveDatabaseEx *db, /* allocMain */
+ CFileSize **unPackSizes, /* allocTemp */
+ Byte **digestsDefined, /* allocTemp */
+ UInt32 **digests, /* allocTemp */
+ Byte **emptyStreamVector, /* allocTemp */
+ Byte **emptyFileVector, /* allocTemp */
ISzAlloc *allocMain,
ISzAlloc *allocTemp)
{
@@ -939,6 +940,7 @@ SZ_RESULT SzReadHeader2(
UInt32 numUnPackStreams = 0;
UInt32 numFiles = 0;
CFileItem *files = 0;
+ UInt32 numEmptyStreams = 0;
UInt32 i;
RINOK(SzReadID(sd, &type));
@@ -962,10 +964,6 @@ SZ_RESULT SzReadHeader2(
db->ArchiveInfo.DataStartPosition += db->ArchiveInfo.StartPositionAfterHeader;
RINOK(SzReadID(sd, &type));
}
- else
- {
- return SZE_NOTIMPL;
- }
if (type == k7zIdEnd)
return SZ_OK;
@@ -975,21 +973,12 @@ SZ_RESULT SzReadHeader2(
RINOK(SzReadNumber32(sd, &numFiles));
db->Database.NumFiles = numFiles;
- RINOK(MySzInAlloc((void **)&files, (size_t)numFiles * sizeof(CFileItem), allocTemp->Alloc));
+ RINOK(MySzInAlloc((void **)&files, (size_t)numFiles * sizeof(CFileItem), allocMain->Alloc));
db->Database.Files = files;
for(i = 0; i < numFiles; i++)
SzFileInit(files + i);
- /*
- CBoolVector emptyStreamVector;
- emptyStreamVector.Reserve((size_t)numFiles);
- for(i = 0; i < numFiles; i++)
- emptyStreamVector.Add(false);
- CBoolVector emptyFileVector;
- UInt32 numEmptyStreams = 0;
- */
-
while(1)
{
UInt64 type;
@@ -1014,30 +1003,17 @@ SZ_RESULT SzReadHeader2(
}
case k7zIdEmptyStream:
{
- /*
- RINOK(ReadBoolVector((UInt32)numFiles, emptyStreamVector))
- UInt32 i;
- for (i = 0; i < (UInt32)emptyStreamVector.Size(); i++)
- if (emptyStreamVector[i])
+ RINOK(SzReadBoolVector(sd, numFiles, emptyStreamVector, allocTemp->Alloc));
+ numEmptyStreams = 0;
+ for (i = 0; i < numFiles; i++)
+ if ((*emptyStreamVector)[i])
numEmptyStreams++;
- emptyFileVector.Reserve(numEmptyStreams);
- antiFileVector.Reserve(numEmptyStreams);
- for (i = 0; i < numEmptyStreams; i++)
- {
- emptyFileVector.Add(false);
- antiFileVector.Add(false);
- }
break;
- */
- return SZE_NOTIMPL;
}
case k7zIdEmptyFile:
{
- /*
- RINOK(ReadBoolVector(numEmptyStreams, emptyFileVector))
+ RINOK(SzReadBoolVector(sd, numEmptyStreams, emptyFileVector, allocTemp->Alloc));
break;
- */
- return SZE_NOTIMPL;
}
default:
{
@@ -1046,39 +1022,37 @@ SZ_RESULT SzReadHeader2(
}
}
- /*
- UInt32 emptyFileIndex = 0;
- UInt32 sizeIndex = 0;
- for(i = 0; i < numFiles; i++)
{
- CFileItem *file = files + i;
- file.HasStream = !emptyStreamVector[(UInt32)i];
- if(file.HasStream)
+ UInt32 emptyFileIndex = 0;
+ UInt32 sizeIndex = 0;
+ for(i = 0; i < numFiles; i++)
{
- file.IsDirectory = false;
- file.IsAnti = false;
- file.UnPackSize = unPackSizes[sizeIndex];
- file.FileCRC = digests[sizeIndex];
- file.IsFileCRCDefined = digestsDefined[sizeIndex];
- sizeIndex++;
- }
- else
- {
- file.IsDirectory = !emptyFileVector[emptyFileIndex];
- file.IsAnti = antiFileVector[emptyFileIndex];
- emptyFileIndex++;
- file.UnPackSize = 0;
- file.IsFileCRCDefined = false;
+ CFileItem *file = files + i;
+ file->IsAnti = 0;
+ if (*emptyStreamVector == 0)
+ file->HasStream = 1;
+ else
+ file->HasStream = (Byte)((*emptyStreamVector)[i] ? 0 : 1);
+ if(file->HasStream)
+ {
+ file->IsDirectory = 0;
+ file->Size = (*unPackSizes)[sizeIndex];
+ file->FileCRC = (*digests)[sizeIndex];
+ file->IsFileCRCDefined = (Byte)(*digestsDefined)[sizeIndex];
+ sizeIndex++;
+ }
+ else
+ {
+ if (*emptyFileVector == 0)
+ file->IsDirectory = 1;
+ else
+ file->IsDirectory = (Byte)((*emptyFileVector)[emptyFileIndex] ? 0 : 1);
+ emptyFileIndex++;
+ file->Size = 0;
+ file->IsFileCRCDefined = 0;
+ }
}
}
- */
- for(i = 0; i < numFiles; i++)
- {
- CFileItem *file = files + i;
- file->Size = (*unPackSizes)[i];
- file->FileCRC = (*digests)[i];
- file->IsFileCRCDefined = (Byte)(*digestsDefined)[i];
- }
return SzArDbExFill(db, allocMain->Alloc);
}
@@ -1089,14 +1063,19 @@ SZ_RESULT SzReadHeader(
ISzAlloc *allocTemp)
{
CFileSize *unPackSizes = 0;
- int *digestsDefined = 0;
+ Byte *digestsDefined = 0;
UInt32 *digests = 0;
+ Byte *emptyStreamVector = 0;
+ Byte *emptyFileVector = 0;
SZ_RESULT res = SzReadHeader2(sd, db,
&unPackSizes, &digestsDefined, &digests,
+ &emptyStreamVector, &emptyFileVector,
allocMain, allocTemp);
allocTemp->Free(unPackSizes);
allocTemp->Free(digestsDefined);
allocTemp->Free(digests);
+ allocTemp->Free(emptyStreamVector);
+ allocTemp->Free(emptyFileVector);
return res;
}
@@ -1107,7 +1086,7 @@ SZ_RESULT SzReadAndDecodePackedStreams2(
CFileSize baseOffset,
CArchiveDatabase *db,
CFileSize **unPackSizes,
- int **digestsDefined,
+ Byte **digestsDefined,
UInt32 **digests,
#ifndef _LZMA_IN_CB
Byte **inBuffer,
@@ -1177,7 +1156,7 @@ SZ_RESULT SzReadAndDecodePackedStreams(
{
CArchiveDatabase db;
CFileSize *unPackSizes = 0;
- int *digestsDefined = 0;
+ Byte *digestsDefined = 0;
UInt32 *digests = 0;
#ifndef _LZMA_IN_CB
Byte *inBuffer = 0;
diff --git a/7zip/Archive/7z_C/7zItem.h b/7zip/Archive/7z_C/7zItem.h
index 8a212cdb..876539a9 100755
--- a/7zip/Archive/7z_C/7zItem.h
+++ b/7zip/Archive/7z_C/7zItem.h
@@ -75,7 +75,7 @@ typedef struct _CArchiveDatabase
{
UInt32 NumPackStreams;
CFileSize *PackSizes;
- int *PackCRCsDefined;
+ Byte *PackCRCsDefined;
UInt32 *PackCRCs;
UInt32 NumFolders;
CFolder *Folders;
diff --git a/7zip/Archive/7z_C/7zMain.c b/7zip/Archive/7z_C/7zMain.c
index 425e57b3..d5c5ed91 100755
--- a/7zip/Archive/7z_C/7zMain.c
+++ b/7zip/Archive/7z_C/7zMain.c
@@ -71,7 +71,7 @@ int main(int numargs, char *args[])
ISzAlloc allocImp;
ISzAlloc allocTempImp;
- printf("\n7z ANSI-C Decoder 4.26 Copyright (c) 1999-2005 Igor Pavlov 2005-08-02\n");
+ printf("\n7z ANSI-C Decoder 4.30 Copyright (c) 1999-2005 Igor Pavlov 2005-11-20\n");
if (numargs == 1)
{
printf(
@@ -145,10 +145,18 @@ int main(int numargs, char *args[])
size_t offset;
size_t outSizeProcessed;
CFileItem *f = db.Database.Files + i;
- printf(testCommand ?
- "Testing ":
+ if (f->IsDirectory)
+ printf("Directory ");
+ else
+ printf(testCommand ?
+ "Testing ":
"Extracting");
printf(" %s", f->Name);
+ if (f->IsDirectory)
+ {
+ printf("\n");
+ continue;
+ }
res = SzExtract(&archiveStream.InStream, &db, i,
&blockIndex, &outBuffer, &outBufferSize,
&offset, &outSizeProcessed,
diff --git a/7zip/Archive/Tar/DllExports.cpp b/7zip/Archive/Tar/DllExports.cpp
index 9d80a651..e1535bd1 100755
--- a/7zip/Archive/Tar/DllExports.cpp
+++ b/7zip/Archive/Tar/DllExports.cpp
@@ -73,6 +73,13 @@ STDAPI GetHandlerProperty(PROPID propID, PROPVARIANT *value)
case NArchive::kKeepName:
propVariant = false;
break;
+ case NArchive::kStartSignature:
+ {
+ const unsigned char sig[] = { 'u', 's', 't', 'a', 'r' };
+ if ((value->bstrVal = ::SysAllocStringByteLen((const char *)sig, 5)) != 0)
+ value->vt = VT_BSTR;
+ return S_OK;
+ }
}
propVariant.Detach(value);
return S_OK;
diff --git a/7zip/Bundles/Alone7z/makefile b/7zip/Bundles/Alone7z/makefile
index b8432887..bff04105 100755
--- a/7zip/Bundles/Alone7z/makefile
+++ b/7zip/Bundles/Alone7z/makefile
@@ -4,6 +4,7 @@ LIBS = $(LIBS) user32.lib oleaut32.lib Advapi32.lib
CFLAGS = $(CFLAGS) -I ../../../ \
-DEXCLUDE_COM \
-DNO_REGISTRY \
+ -D_NO_CRYPTO \
-DFORMAT_7Z \
-DCOMPRESS_BCJ_X86 \
-DCOMPRESS_BCJ2 \
diff --git a/7zip/Compress/LZMA_Alone/LzmaAlone.cpp b/7zip/Compress/LZMA_Alone/LzmaAlone.cpp
index 76b6d886..96aeac0d 100755
--- a/7zip/Compress/LZMA_Alone/LzmaAlone.cpp
+++ b/7zip/Compress/LZMA_Alone/LzmaAlone.cpp
@@ -35,6 +35,18 @@ extern "C"
using namespace NCommandLineParser;
+#ifdef _WIN32
+bool g_IsNT = false;
+static inline bool IsItWindowsNT()
+{
+ OSVERSIONINFO versionInfo;
+ versionInfo.dwOSVersionInfoSize = sizeof(versionInfo);
+ if (!::GetVersionEx(&versionInfo))
+ return false;
+ return (versionInfo.dwPlatformId == VER_PLATFORM_WIN32_NT);
+}
+#endif
+
static const char *kCantAllocate = "Can not allocate memory";
static const char *kReadError = "Read error";
static const char *kWriteError = "Write error";
@@ -86,7 +98,7 @@ static void PrintHelp()
"<Switches>\n"
" -a{N}: set compression mode - [0, 2], default: 2 (max)\n"
" -d{N}: set dictionary - [0,28], default: 23 (8MB)\n"
- " -fb{N}: set number of fast bytes - [5, 255], default: 128\n"
+ " -fb{N}: set number of fast bytes - [5, 273], default: 128\n"
" -lc{N}: set number of literal context bits - [0, 8], default: 3\n"
" -lp{N}: set number of literal pos bits - [0, 4], default: 0\n"
" -pb{N}: set number of pos bits - [0, 4], default: 2\n"
@@ -134,7 +146,11 @@ static bool GetNumber(const wchar_t *s, UInt32 &value)
int main2(int n, const char *args[])
{
- fprintf(stderr, "\nLZMA 4.27 Copyright (c) 1999-2005 Igor Pavlov 2005-08-07\n");
+ #ifdef _WIN32
+ g_IsNT = IsItWindowsNT();
+ #endif
+
+ fprintf(stderr, "\nLZMA 4.30 Copyright (c) 1999-2005 Igor Pavlov 2005-11-20\n");
if (n == 1)
{
diff --git a/7zip/FileManager/PanelItemOpen.cpp b/7zip/FileManager/PanelItemOpen.cpp
index 25a25c8f..f16a14f1 100755
--- a/7zip/FileManager/PanelItemOpen.cpp
+++ b/7zip/FileManager/PanelItemOpen.cpp
@@ -144,8 +144,12 @@ static bool DoItemAlwaysStart(const UString &name)
int extPos = name.ReverseFind('.');
if (extPos < 0)
return false;
- const UString ext = name.Mid(extPos + 1);
- return (ext == UString(L"exe") || ext == UString(L"bat") || ext == UString(L"com"));
+ UString ext = name.Mid(extPos + 1);
+ ext.MakeLower();
+ return (ext == UString(L"exe") ||
+ ext == UString(L"bat") ||
+ ext == UString(L"com") ||
+ ext == UString(L"chm"));
}
static HANDLE StartEditApplication(const UString &path, HWND window)
diff --git a/7zip/MyVersion.h b/7zip/MyVersion.h
index 24c1418e..287341a7 100755
--- a/7zip/MyVersion.h
+++ b/7zip/MyVersion.h
@@ -1,7 +1,7 @@
#define MY_VER_MAJOR 4
-#define MY_VER_MINOR 30
-#define MY_VERSION "4.30 beta"
-#define MY_7ZIP_VERSION "7-Zip 4.30 beta"
-#define MY_DATE "2005-11-18"
+#define MY_VER_MINOR 31
+#define MY_VERSION "4.31"
+#define MY_7ZIP_VERSION "7-Zip 4.31"
+#define MY_DATE "2005-12-04"
#define MY_COPYRIGHT "Copyright (c) 1999-2005 Igor Pavlov"
#define MY_VERSION_COPYRIGHT_DATE MY_VERSION " " MY_COPYRIGHT " " MY_DATE
diff --git a/7zip/UI/Common/Extract.cpp b/7zip/UI/Common/Extract.cpp
index bf335107..11ba4947 100755
--- a/7zip/UI/Common/Extract.cpp
+++ b/7zip/UI/Common/Extract.cpp
@@ -111,12 +111,15 @@ HRESULT DecompressArchives(
archivePathsFull.Delete(index);
}
}
+
+ #ifndef _NO_CRYPTO
UString password;
RINOK(openCallback->GetPasswordIfAny(password));
if (!password.IsEmpty())
{
RINOK(extractCallback->SetPassword(password));
}
+ #endif
options.DefaultItemName = archiveLink.GetDefaultItemName();
RINOK(DecompressArchive(
diff --git a/7zip/UI/Explorer/SystemPage/SystemPage.cpp b/7zip/UI/Explorer/SystemPage/SystemPage.cpp
index 7852791b..8f656559 100755
--- a/7zip/UI/Explorer/SystemPage/SystemPage.cpp
+++ b/7zip/UI/Explorer/SystemPage/SystemPage.cpp
@@ -119,12 +119,21 @@ bool CSystemPage::OnInit()
return CPropertyPage::OnInit();
}
+STDAPI DllRegisterServer(void);
+STDAPI DllUnregisterServer(void);
+
LONG CSystemPage::OnApply()
{
if (IsButtonCheckedBool(IDC_SYSTEM_INTEGRATE_TO_CONTEXT_MENU))
+ {
+ DllRegisterServer();
NZipRootRegistry::AddContextMenuHandler();
+ }
else
+ {
+ DllUnregisterServer();
NZipRootRegistry::DeleteContextMenuHandler();
+ }
SaveCascadedMenu(IsButtonCheckedBool(IDC_SYSTEM_CASCADED_MENU));
UINT32 flags = 0;
diff --git a/7zip/UI/GUI/OpenCallbackGUI.cpp b/7zip/UI/GUI/OpenCallbackGUI.cpp
index 12b35843..a3a6caf0 100755
--- a/7zip/UI/GUI/OpenCallbackGUI.cpp
+++ b/7zip/UI/GUI/OpenCallbackGUI.cpp
@@ -8,7 +8,9 @@
#include "Common/StdInStream.h"
#include "Common/StringConvert.h"
+#ifndef _NO_CRYPTO
#include "../../FileManager/Resource/PasswordDialog/PasswordDialog.h"
+#endif
HRESULT COpenCallbackGUI::CheckBreak()
{
diff --git a/DOC/7zC.txt b/DOC/7zC.txt
index a5b547ea..bac297fc 100755
--- a/DOC/7zC.txt
+++ b/DOC/7zC.txt
@@ -54,9 +54,6 @@ In that example 7-Zip will use 512KB solid blocks. So it needs to decompress onl
Limitations of current version of 7z ANSI-C Decoder
---------------------------------------------------
- - It doesn't support separated "folder" items inside archive.
- But you still can use files that are in subfolders
- - It doesn't support empty files (size = 0) inside archive.
- It reads only "FileName", "Size", and "CRC" information for each file in archive.
- It supports only LZMA and Copy (no compression) methods.
- It converts original UTF-16 Unicode file names to UTF-8 Unicode file names.
diff --git a/DOC/7zip.nsi b/DOC/7zip.nsi
index 30963e82..5aeb43fd 100755
--- a/DOC/7zip.nsi
+++ b/DOC/7zip.nsi
@@ -2,8 +2,8 @@
;Defines
!define VERSION_MAJOR 4
-!define VERSION_MINOR 30
-!define VERSION_POSTFIX_FULL " beta"
+!define VERSION_MINOR 31
+!define VERSION_POSTFIX_FULL ""
!ifdef WIN64
!ifdef IA64
!define VERSION_SYS_POSTFIX_FULL " for Windows IA-64"
@@ -60,7 +60,6 @@
SetCompressorDictSize 4
!endif
!else
- SetCompressor zlib
SetCompress off
!endif
@@ -195,6 +194,7 @@ Section
File eo.txt
File es.txt
File et.txt
+ File eu.txt
File ext.txt
File fa.txt
File fi.txt
@@ -397,6 +397,7 @@ Section "Uninstall"
Delete $INSTDIR\Lang\eo.txt
Delete $INSTDIR\Lang\es.txt
Delete $INSTDIR\Lang\et.txt
+ Delete $INSTDIR\Lang\eu.txt
Delete $INSTDIR\Lang\ext.txt
Delete $INSTDIR\Lang\fa.txt
Delete $INSTDIR\Lang\fi.txt
diff --git a/DOC/history.txt b/DOC/history.txt
index 232a9ca8..0b71d52a 100755
--- a/DOC/history.txt
+++ b/DOC/history.txt
@@ -3,9 +3,9 @@ Sources history of the 7-Zip
Version 4.30 beta 2005-11-18
--------------------------------------
- - Security.h::AddLockMemoryPrivilege - installs "Large pages" fature
- - MemoryLock.h::EnableLockMemoryPrivilege - enables "Large pages" fature
- - Alloc.h::SetLargePageSize - sets optimal LargePageSize size;
+ - Security.h::AddLockMemoryPrivilege - installs "Large pages" feature
+ - MemoryLock.h::EnableLockMemoryPrivilege - enables "Large pages" feature
+ - Alloc.h::SetLargePageSize - sets optimal LargePageSize size
Version 4.27 2005-09-21
diff --git a/DOC/lzma.txt b/DOC/lzma.txt
index 61119a27..38c82f89 100755
--- a/DOC/lzma.txt
+++ b/DOC/lzma.txt
@@ -1,7 +1,7 @@
-LZMA SDK 4.27
+LZMA SDK 4.30
-------------
-LZMA SDK 4.27 Copyright (C) 1999-2005 Igor Pavlov
+LZMA SDK 4.30 Copyright (C) 1999-2005 Igor Pavlov
LZMA SDK provides developers with documentation, source code,
and sample code necessary to write software that uses LZMA compression.
@@ -91,6 +91,7 @@ LZMA SDK includes:
- C++ source code for file->file LZMA compressing and decompressing
- ANSI-C compatible source code for LZMA decompressing
- Compiled file->file LZMA compressing/decompressing program for Windows system
+ - C# source code for file->file LZMA compressing and decompressing
ANSI-C LZMA decompression code was ported from original C++ sources to C.
Also it was simplified and optimized for code size.
@@ -100,7 +101,7 @@ But it is fully compatible with LZMA from 7-Zip.
UNIX/Linux version
------------------
To compile C++ version of file->file LZMA, go to directory
-SRC/7zip/Compress/LZMA_Alone
+C/7zip/Compress/LZMA_Alone
and type "make" or "make clean all" to recompile all.
In some UNIX/Linux versions you must compile LZMA with static libraries.
@@ -112,7 +113,8 @@ LIB = -lm -static
Files
---------------------
-SRC - directory with source code
+C - C / CPP source code
+CS - C# source code
lzma.txt - LZMA SDK description (this file)
7zFormat.txt - 7z Format description
7zC.txt - 7z ANSI-C Decoder description (this file)
@@ -126,7 +128,7 @@ history.txt - history of the LZMA SDK
Source code structure
---------------------
-SRC
+C - C / CPP files
Common - common files for C++ projects
Windows - common files for Windows related code
7zip - files related to 7-Zip Project
@@ -151,11 +153,20 @@ SRC
Archive - files related to archiving
7z_C - 7z ANSI-C Decoder
+CS - C# files
+ 7zip
+ Common - some common files for 7-Zip
+ Compress - files related to compression/decompression
+ LZ - files related to LZ (Lempel-Ziv) compression algorithm
+ LZMA - LZMA compression/decompression
+ LzmaAlone - file->file LZMA compression/decompression
+ RangeCoder - Range Coder (special code of compression/decompression)
+
Source code of LZMA SDK is only part of big 7-Zip project. That is
why LZMA SDK uses such complex source code structure.
You can find ANSI-C LZMA decompressing code at folder
- SRC/7zip/Compress/LZMA_C
+ C/7zip/Compress/LZMA_C
7-Zip doesn't use that ANSI-C LZMA code and that code was developed
specially for this SDK. And files from LZMA_C do not need files from
other directories of SDK for compiling.
@@ -224,7 +235,7 @@ Usage: LZMA <e|d> inputFile outputFile [<switches>...]
For decompressing file compressed by LZMA method with dictionary
size D = 2^N you need about D bytes of memory (RAM).
- -fb{N}: set number of fast bytes - [5, 255], default: 128
+ -fb{N}: set number of fast bytes - [5, 273], default: 128
Usually big number gives a little bit better compression ratio
and slower compression process.
diff --git a/DOC/readme.txt b/DOC/readme.txt
index ae8c7108..5ae60cdf 100755
--- a/DOC/readme.txt
+++ b/DOC/readme.txt
@@ -1,4 +1,4 @@
-7-Zip 4.30 Sources
+7-Zip 4.31 Sources
------------------
7-Zip is a file archiver for Windows 95/98/ME/NT/2000/2003/XP.