diff options
105 files changed, 868 insertions, 466 deletions
diff --git a/C/7zVersion.h b/C/7zVersion.h index 391bb7ac..1ac7a662 100755 --- a/C/7zVersion.h +++ b/C/7zVersion.h @@ -1,7 +1,7 @@ #define MY_VER_MAJOR 9 -#define MY_VER_MINOR 16 +#define MY_VER_MINOR 17 #define MY_VER_BUILD 0 -#define MY_VERSION "9.16 beta" -#define MY_DATE "2010-09-08" +#define MY_VERSION "9.17 beta" +#define MY_DATE "2010-10-04" #define MY_COPYRIGHT ": Igor Pavlov : Public domain" #define MY_VERSION_COPYRIGHT_DATE MY_VERSION " " MY_COPYRIGHT " : " MY_DATE diff --git a/C/Lzma2Enc.c b/C/Lzma2Enc.c index 26109309..e97597f6 100755 --- a/C/Lzma2Enc.c +++ b/C/Lzma2Enc.c @@ -1,5 +1,5 @@ /* Lzma2Enc.c -- LZMA2 Encoder -2010-04-16 : Igor Pavlov : Public domain */ +2010-09-24 : Igor Pavlov : Public domain */ /* #include <stdio.h> */ #include <string.h> @@ -269,7 +269,7 @@ static SRes Lzma2Enc_EncodeMt1(CLzma2EncInt *p, CLzma2Enc *mainEncoder, if (mainEncoder->outBuf == 0) { - mainEncoder->outBuf = IAlloc_Alloc(mainEncoder->alloc, LZMA2_CHUNK_SIZE_COMPRESSED_MAX); + mainEncoder->outBuf = (Byte *)IAlloc_Alloc(mainEncoder->alloc, LZMA2_CHUNK_SIZE_COMPRESSED_MAX); if (mainEncoder->outBuf == 0) return SZ_ERROR_MEM; } diff --git a/C/MtCoder.c b/C/MtCoder.c index 32afce43..946fbbc7 100755 --- a/C/MtCoder.c +++ b/C/MtCoder.c @@ -1,5 +1,5 @@ /* MtCoder.c -- Multi-thread Coder -2010-03-24 : Igor Pavlov : Public domain */ +2010-09-24 : Igor Pavlov : Public domain */ #include <stdio.h> @@ -148,7 +148,7 @@ static void CMtThread_Destruct(CMtThread *p) #define MY_BUF_ALLOC(buf, size, newSize) \ if (buf == 0 || size != newSize) \ { IAlloc_Free(p->mtCoder->alloc, buf); \ - size = newSize; buf = IAlloc_Alloc(p->mtCoder->alloc, size); \ + size = newSize; buf = (Byte *)IAlloc_Alloc(p->mtCoder->alloc, size); \ if (buf == 0) return SZ_ERROR_MEM; } static SRes CMtThread_Prepare(CMtThread *p) @@ -1,7 +1,5 @@ /* Sort.c -- Sort functions -2008-08-17 -Igor Pavlov -Public domain */ +2010-09-17 : Igor Pavlov : Public domain */ #include "Sort.h" @@ -92,4 +90,4 @@ void HeapSortRef(UInt32 *p, UInt32 *vals, UInt32 size) } while (size > 1); } -*/
\ No newline at end of file +*/ diff --git a/C/Util/7z/7zMain.c b/C/Util/7z/7zMain.c index 5fb35c65..2e6c6622 100755 --- a/C/Util/7z/7zMain.c +++ b/C/Util/7z/7zMain.c @@ -1,5 +1,5 @@ /* 7zMain.c - Test application for 7z Decoder -2010-07-13 : Igor Pavlov : Public domain */ +2010-09-20 : Igor Pavlov : Public domain */ #include <stdio.h> #include <string.h> @@ -179,7 +179,7 @@ static SRes PrintString(const UInt16 *s) Buf_Init(&buf); res = Utf16_To_Char(&buf, s, 0); if (res == SZ_OK) - printf("%s", buf.data); + fputs((const char *)buf.data, stdout); Buf_Free(&buf, &g_Alloc); return res; } @@ -407,9 +407,10 @@ int MY_CDECL main(int numargs, char *args[]) printf("\n"); continue; } - printf(testCommand ? + fputs(testCommand ? "Testing ": - "Extracting "); + "Extracting ", + stdout); res = PrintString(temp); if (res != SZ_OK) break; diff --git a/C/Util/Lzma/LzmaUtil.c b/C/Util/Lzma/LzmaUtil.c index 0d0e3ee7..09a749af 100755 --- a/C/Util/Lzma/LzmaUtil.c +++ b/C/Util/Lzma/LzmaUtil.c @@ -1,5 +1,5 @@ /* LzmaUtil.c -- Test application for LZMA compression -2009-08-14 : Igor Pavlov : Public domain */ +2010-09-20 : Igor Pavlov : Public domain */ #define _CRT_SECURE_NO_WARNINGS @@ -249,6 +249,6 @@ int MY_CDECL main(int numArgs, const char *args[]) { char rs[800] = { 0 }; int res = main2(numArgs, args, rs); - printf(rs); + fputs(rs, stdout); return res; } @@ -1,14 +1,12 @@ /* Xz.h - Xz interface -2009-04-15 : Igor Pavlov : Public domain */ +2010-09-17 : Igor Pavlov : Public domain */ #ifndef __XZ_H #define __XZ_H #include "Sha256.h" -#ifdef __cplusplus -extern "C" { -#endif +EXTERN_C_BEGIN #define XZ_ID_Subblock 1 #define XZ_ID_Delta 3 @@ -140,7 +138,7 @@ typedef enum CODER_STATUS_NOT_SPECIFIED, /* use main error code instead */ CODER_STATUS_FINISHED_WITH_MARK, /* stream was finished with end mark. */ CODER_STATUS_NOT_FINISHED, /* stream was not finished */ - CODER_STATUS_NEEDS_MORE_INPUT, /* you must provide more input bytes */ + CODER_STATUS_NEEDS_MORE_INPUT /* you must provide more input bytes */ } ECoderStatus; typedef enum @@ -249,8 +247,6 @@ SRes XzUnpacker_Code(CXzUnpacker *p, Byte *dest, SizeT *destLen, Bool XzUnpacker_IsStreamWasFinished(CXzUnpacker *p); -#ifdef __cplusplus -} -#endif +EXTERN_C_END #endif diff --git a/CPP/7zip/Archive/7z/7zIn.cpp b/CPP/7zip/Archive/7z/7zIn.cpp index 79d60fc5..686bb288 100755 --- a/CPP/7zip/Archive/7z/7zIn.cpp +++ b/CPP/7zip/Archive/7z/7zIn.cpp @@ -120,7 +120,7 @@ public: kUnsupportedVersion = 0, kUnsupported, kIncorrect, - kEndOfData, + kEndOfData } Cause; CInArchiveException(CCauseType cause): Cause(cause) {}; }; diff --git a/CPP/7zip/Archive/7z/7zProperties.cpp b/CPP/7zip/Archive/7z/7zProperties.cpp index 66d90785..fd4af49c 100755 --- a/CPP/7zip/Archive/7z/7zProperties.cpp +++ b/CPP/7zip/Archive/7z/7zProperties.cpp @@ -19,32 +19,33 @@ struct CPropMap CPropMap kPropMap[] = { - { NID::kName, NULL, kpidPath, VT_BSTR}, - { NID::kSize, NULL, kpidSize, VT_UI8}, - { NID::kPackInfo, NULL, kpidPackSize, VT_UI8}, + { NID::kName, { NULL, kpidPath, VT_BSTR } }, + { NID::kSize, { NULL, kpidSize, VT_UI8 } }, + { NID::kPackInfo, { NULL, kpidPackSize, VT_UI8 } }, #ifdef _MULTI_PACK - { 100, L"Pack0", kpidPackedSize0, VT_UI8}, - { 101, L"Pack1", kpidPackedSize1, VT_UI8}, - { 102, L"Pack2", kpidPackedSize2, VT_UI8}, - { 103, L"Pack3", kpidPackedSize3, VT_UI8}, - { 104, L"Pack4", kpidPackedSize4, VT_UI8}, + { 100, { L"Pack0", kpidPackedSize0, VT_UI8 } }, + { 101, { L"Pack1", kpidPackedSize1, VT_UI8 } }, + { 102, { L"Pack2", kpidPackedSize2, VT_UI8 } }, + { 103, { L"Pack3", kpidPackedSize3, VT_UI8 } }, + { 104, { L"Pack4", kpidPackedSize4, VT_UI8 } }, #endif - { NID::kCTime, NULL, kpidCTime, VT_FILETIME}, - { NID::kMTime, NULL, kpidMTime, VT_FILETIME}, - { NID::kATime, NULL, kpidATime, VT_FILETIME}, - { NID::kWinAttributes, NULL, kpidAttrib, VT_UI4}, - { NID::kStartPos, NULL, kpidPosition, VT_UI4}, + { NID::kCTime, { NULL, kpidCTime, VT_FILETIME } }, + { NID::kMTime, { NULL, kpidMTime, VT_FILETIME } }, + { NID::kATime, { NULL, kpidATime, VT_FILETIME } }, + { NID::kWinAttributes, { NULL, kpidAttrib, VT_UI4 } }, + { NID::kStartPos, { NULL, kpidPosition, VT_UI4 } }, - { NID::kCRC, NULL, kpidCRC, VT_UI4}, + { NID::kCRC, { NULL, kpidCRC, VT_UI4 } }, - { NID::kAnti, NULL, kpidIsAnti, VT_BOOL}, + { NID::kAnti, { NULL, kpidIsAnti, VT_BOOL } } #ifndef _SFX - { 97, NULL, kpidEncrypted, VT_BOOL}, - { 98, NULL, kpidMethod, VT_BSTR}, - { 99, NULL, kpidBlock, VT_UI4} + , + { 97, { NULL,kpidEncrypted, VT_BOOL } }, + { 98, { NULL,kpidMethod, VT_BSTR } }, + { 99, { NULL,kpidBlock, VT_UI4 } } #endif }; diff --git a/CPP/7zip/Archive/ArjHandler.cpp b/CPP/7zip/Archive/ArjHandler.cpp index 0620ae84..4dd686ec 100755 --- a/CPP/7zip/Archive/ArjHandler.cpp +++ b/CPP/7zip/Archive/ArjHandler.cpp @@ -264,7 +264,7 @@ struct CInArchiveException { kUnexpectedEndOfArchive = 0, kCRCError, - kIncorrectArchive, + kIncorrectArchive } Cause; CInArchiveException(CCauseType cause): Cause(cause) {}; diff --git a/CPP/7zip/Archive/Chm/ChmIn.cpp b/CPP/7zip/Archive/Chm/ChmIn.cpp index cc571937..d52b9ba6 100755 --- a/CPP/7zip/Archive/Chm/ChmIn.cpp +++ b/CPP/7zip/Archive/Chm/ChmIn.cpp @@ -9,18 +9,15 @@ #include "ChmIn.h" -namespace NArchive{ -namespace NChm{ +namespace NArchive { +namespace NChm { // define CHM_LOW, if you want to see low level items // #define CHM_LOW -static const GUID kChmLzxGuid = - { 0x7FC28940, 0x9D31, 0x11D0, 0x9B, 0x27, 0x00, 0xA0, 0xC9, 0x1E, 0x9C, 0x7C }; -static const GUID kHelp2LzxGuid = - { 0x0A9007C6, 0x4076, 0x11D3, 0x87, 0x89, 0x00, 0x00, 0xF8, 0x10, 0x57, 0x54 }; -static const GUID kDesGuid = - { 0x67F6E4A2, 0x60BF, 0x11D3, 0x85, 0x40, 0x00, 0xC0, 0x4F, 0x58, 0xC3, 0xCF }; +static const GUID kChmLzxGuid = { 0x7FC28940, 0x9D31, 0x11D0, { 0x9B, 0x27, 0x00, 0xA0, 0xC9, 0x1E, 0x9C, 0x7C } }; +static const GUID kHelp2LzxGuid = { 0x0A9007C6, 0x4076, 0x11D3, { 0x87, 0x89, 0x00, 0x00, 0xF8, 0x10, 0x57, 0x54 } }; +static const GUID kDesGuid = { 0x67F6E4A2, 0x60BF, 0x11D3, { 0x85, 0x40, 0x00, 0xC0, 0x4F, 0x58, 0xC3, 0xCF } }; static bool AreGuidsEqual(REFGUID g1, REFGUID g2) { diff --git a/CPP/7zip/Archive/CpioHandler.cpp b/CPP/7zip/Archive/CpioHandler.cpp index 2e64d1cd..0f32ef66 100755 --- a/CPP/7zip/Archive/CpioHandler.cpp +++ b/CPP/7zip/Archive/CpioHandler.cpp @@ -3,8 +3,8 @@ #include "StdAfx.h" #include "Common/ComTry.h" -#include "Common/StringToInt.h" #include "Common/StringConvert.h" +#include "Common/StringToInt.h" #include "Windows/PropVariant.h" #include "Windows/Time.h" @@ -25,10 +25,10 @@ namespace NFileHeader { namespace NMagic { - extern const char *kMagic1 = "070701"; - extern const char *kMagic2 = "070702"; - extern const char *kMagic3 = "070707"; - extern const char *kEndName = "TRAILER!!!"; + const char *kMagic1 = "070701"; + const char *kMagic2 = "070702"; + const char *kMagic3 = "070707"; + const char *kEndName = "TRAILER!!!"; const Byte kMagicForRecord2[2] = { 0xC7, 0x71 }; } diff --git a/CPP/7zip/Archive/LzhHandler.cpp b/CPP/7zip/Archive/LzhHandler.cpp index a7fcd676..c568ee4c 100755 --- a/CPP/7zip/Archive/LzhHandler.cpp +++ b/CPP/7zip/Archive/LzhHandler.cpp @@ -378,7 +378,7 @@ static const char *GetOS(Byte osId) if (g_OsPairs[i].Id == osId) return g_OsPairs[i].Name; return kUnknownOS; -}; +} static STATPROPSTG kProps[] = { @@ -400,7 +400,7 @@ public: static UInt16 Table[256]; static void InitTable(); - CCRC(): _value(0){}; + CCRC(): _value(0) {} void Init() { _value = 0; } void Update(const void *data, size_t size); UInt16 GetDigest() const { return _value; } @@ -460,7 +460,6 @@ public: void ReleaseStream() { _stream.Release(); } UInt32 GetCRC() const { return _crc.GetDigest(); } void InitCRC() { _crc.Init(); } - }; STDMETHODIMP COutStreamWithCRC::Write(const void *data, UInt32 size, UInt32 *processedSize) diff --git a/CPP/7zip/Archive/MbrHandler.cpp b/CPP/7zip/Archive/MbrHandler.cpp index e2aa067f..b6d79182 100755 --- a/CPP/7zip/Archive/MbrHandler.cpp +++ b/CPP/7zip/Archive/MbrHandler.cpp @@ -332,7 +332,7 @@ enum { kpidPrimary = kpidUserDefined, kpidBegChs, - kpidEndChs, + kpidEndChs }; STATPROPSTG kProps[] = diff --git a/CPP/7zip/Archive/NtfsHandler.cpp b/CPP/7zip/Archive/NtfsHandler.cpp index 8670e164..505486fc 100755 --- a/CPP/7zip/Archive/NtfsHandler.cpp +++ b/CPP/7zip/Archive/NtfsHandler.cpp @@ -156,7 +156,7 @@ struct CMftRef #define ATNAME(n) ATTR_TYPE_ ## n #define DEF_ATTR_TYPE(v, n) ATNAME(n) = v -typedef enum +enum { DEF_ATTR_TYPE(0x00, UNUSED), DEF_ATTR_TYPE(0x10, STANDARD_INFO), @@ -873,7 +873,7 @@ STDMETHODIMP CByteBufStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPo return S_OK; } -HRESULT DataParseExtents(int clusterSizeLog, const CObjectVector<CAttr> attrs, +static HRESULT DataParseExtents(int clusterSizeLog, const CObjectVector<CAttr> &attrs, int attrIndex, int attrIndexLim, UInt64 numPhysClusters, CRecordVector<CExtent> &Extents) { CExtent e; @@ -969,6 +969,7 @@ struct CMftRec void ParseDataNames(); HRESULT GetStream(IInStream *mainStream, int dataIndex, int clusterSizeLog, UInt64 numPhysClusters, IInStream **stream) const; + int GetNumExtents(int dataIndex, int clusterSizeLog, UInt64 numPhysClusters) const; UInt64 GetSize(int dataIndex) const { return DataAttrs[DataRefs[dataIndex].Start].GetSize(); } @@ -1036,6 +1037,35 @@ HRESULT CMftRec::GetStream(IInStream *mainStream, int dataIndex, return S_OK; } +int CMftRec::GetNumExtents(int dataIndex, int clusterSizeLog, UInt64 numPhysClusters) const +{ + if (dataIndex < 0) + return 0; + { + const CDataRef &ref = DataRefs[dataIndex]; + int numNonResident = 0; + int i; + for (i = ref.Start; i < ref.Start + ref.Num; i++) + if (DataAttrs[i].NonResident) + numNonResident++; + + const CAttr &attr0 = DataAttrs[ref.Start]; + + if (numNonResident != 0 || ref.Num != 1) + { + if (numNonResident != ref.Num || !attr0.IsCompressionUnitSupported()) + return 0; // error; + CRecordVector<CExtent> extents; + if (DataParseExtents(clusterSizeLog, DataAttrs, ref.Start, ref.Start + ref.Num, numPhysClusters, extents) != S_OK) + return 0; // error; + return extents.Size() - 1; + } + // if (attr0.Data.GetCapacity() != 0) + // return 1; + return 0; + } +} + bool CMftRec::Parse(Byte *p, int sectorSizeLog, UInt32 numSectors, UInt32 recNumber, CObjectVector<CAttr> *attrs) { @@ -1425,7 +1455,7 @@ STDMETHODIMP CHandler::GetStream(UInt32 index, ISequentialInStream **stream) COM_TRY_END } -STATPROPSTG kProps[] = +static const STATPROPSTG kProps[] = { { NULL, kpidPath, VT_BSTR}, { NULL, kpidIsDir, VT_BOOL}, @@ -1435,10 +1465,11 @@ STATPROPSTG kProps[] = { NULL, kpidCTime, VT_FILETIME}, { NULL, kpidATime, VT_FILETIME}, { NULL, kpidAttrib, VT_UI4}, - { NULL, kpidLinks, VT_UI4} + { NULL, kpidLinks, VT_UI4}, + { NULL, kpidNumBlocks, VT_UI4} }; -STATPROPSTG kArcProps[] = +static const STATPROPSTG kArcProps[] = { { NULL, kpidVolumeName, VT_BSTR}, { NULL, kpidFileSystem, VT_BSTR}, @@ -1582,6 +1613,7 @@ STDMETHODIMP CHandler::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *val case kpidLinks: prop = rec.MyNumNameLinks; break; case kpidSize: if (data) prop = data->GetSize(); break; case kpidPackSize: if (data) prop = data->GetPackSize(); break; + case kpidNumBlocks: if (data) prop = (UInt32)rec.GetNumExtents(item.DataIndex, Header.ClusterSizeLog, Header.NumClusters); break; } prop.Detach(value); return S_OK; diff --git a/CPP/7zip/Archive/PeHandler.cpp b/CPP/7zip/Archive/PeHandler.cpp index 5732e1f5..506e944a 100755 --- a/CPP/7zip/Archive/PeHandler.cpp +++ b/CPP/7zip/Archive/PeHandler.cpp @@ -98,7 +98,7 @@ void CDirLink::Parse(const Byte *p) { Va = Get32(p); Size = Get32(p + 4); -}; +} enum { @@ -991,7 +991,7 @@ bool CBitmapInfoHeader::Parse(const Byte *p, size_t size) Compression = Get32(p + 16); SizeImage = Get32(p + 20); return true; -}; +} static UInt32 GetImageSize(UInt32 xSize, UInt32 ySize, UInt32 bitCount) { diff --git a/CPP/7zip/Archive/Udf/UdfHandler.h b/CPP/7zip/Archive/Udf/UdfHandler.h index 63f859af..f513727d 100755 --- a/CPP/7zip/Archive/Udf/UdfHandler.h +++ b/CPP/7zip/Archive/Udf/UdfHandler.h @@ -35,4 +35,3 @@ public: }} #endif -
\ No newline at end of file diff --git a/CPP/7zip/Archive/Udf/UdfIn.cpp b/CPP/7zip/Archive/Udf/UdfIn.cpp index d2f9e731..60d5fc2a 100755 --- a/CPP/7zip/Archive/Udf/UdfIn.cpp +++ b/CPP/7zip/Archive/Udf/UdfIn.cpp @@ -202,7 +202,7 @@ enum EDescriptorType DESC_TYPE_UnallocatedSpace = 263, DESC_TYPE_SpaceBitmap = 264, DESC_TYPE_PartitionIntegrity = 265, - DESC_TYPE_ExtendedFile = 266, + DESC_TYPE_ExtendedFile = 266 }; diff --git a/CPP/7zip/Archive/Wim/WimHandler.cpp b/CPP/7zip/Archive/Wim/WimHandler.cpp index 9bea60dd..eaad1e7c 100755 --- a/CPP/7zip/Archive/Wim/WimHandler.cpp +++ b/CPP/7zip/Archive/Wim/WimHandler.cpp @@ -55,6 +55,7 @@ static STATPROPSTG kArcProps[] = { NULL, kpidCTime, VT_FILETIME}, { NULL, kpidMTime, VT_FILETIME}, { NULL, kpidComment, VT_BSTR}, + { NULL, kpidUnpackVer, VT_BSTR}, { NULL, kpidIsVolume, VT_BOOL}, { NULL, kpidVolume, VT_UI4}, { NULL, kpidNumVolumes, VT_UI4} @@ -226,6 +227,28 @@ STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value) } break; + case kpidUnpackVer: + { + UInt32 ver1 = _version >> 16; + UInt32 ver2 = (_version >> 8) & 0xFF; + UInt32 ver3 = (_version) & 0xFF; + + char s[16]; + ConvertUInt32ToString(ver1, s); + AString res = s; + res += '.'; + ConvertUInt32ToString(ver2, s); + res += s; + if (ver3 != 0) + { + res += '.'; + ConvertUInt32ToString(ver3, s); + res += s; + } + prop = res; + break; + } + case kpidIsVolume: if (_xmls.Size() > 0) { @@ -303,8 +326,8 @@ STDMETHODIMP CHandler::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *val prop = _db.GetItemPath(realIndex); else { - char sz[32]; - ConvertUInt64ToString(item.StreamIndex, sz); + char sz[16]; + ConvertUInt32ToString(item.StreamIndex, sz); AString s = sz; while (s.Length() < _nameLenForStreams) s = '0' + s; @@ -342,8 +365,8 @@ STDMETHODIMP CHandler::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *val { case kpidPath: { - char sz[32]; - ConvertUInt64ToString(_xmls[index].VolIndex, sz); + char sz[16]; + ConvertUInt32ToString(_xmls[index].VolIndex, sz); prop = (AString)"[" + (AString)sz + "].xml"; break; } @@ -379,8 +402,8 @@ public: UString GetNextName(UInt32 index) { - wchar_t s[32]; - ConvertUInt64ToString((index), s); + wchar_t s[16]; + ConvertUInt32ToString(index, s); return _before + (UString)s + _after; } }; @@ -426,6 +449,8 @@ STDMETHODIMP CHandler::Open(IInStream *inStream, continue; return res; } + _version = header.Version; + _isOldVersion = header.IsOldVersion(); if (firstVolumeIndex >= 0) if (!header.AreFromOnArchive(_volumes[firstVolumeIndex].Header)) break; @@ -481,8 +506,8 @@ STDMETHODIMP CHandler::Open(IInStream *inStream, _db.DetectPathMode(); RINOK(_db.Sort(_db.SkipRoot)); - wchar_t sz[32]; - ConvertUInt64ToString(_db.Streams.Size(), sz); + wchar_t sz[16]; + ConvertUInt32ToString(_db.Streams.Size(), sz); _nameLenForStreams = MyStringLen(sz); _xmlInComments = (_xmls.Size() == 1 && !_db.ShowImageNumber); diff --git a/CPP/7zip/Archive/Wim/WimHandler.h b/CPP/7zip/Archive/Wim/WimHandler.h index d105e548..aa92069a 100755 --- a/CPP/7zip/Archive/Wim/WimHandler.h +++ b/CPP/7zip/Archive/Wim/WimHandler.h @@ -51,6 +51,8 @@ class CHandler: public CMyUnknownImp { CDatabase _db; + UInt32 _version; + bool _isOldVersion; CObjectVector<CVolume> _volumes; CObjectVector<CXml> _xmls; int _nameLenForStreams; diff --git a/CPP/7zip/Archive/Wim/WimIn.cpp b/CPP/7zip/Archive/Wim/WimIn.cpp index c2e8df69..5edfacc5 100755 --- a/CPP/7zip/Archive/Wim/WimIn.cpp +++ b/CPP/7zip/Archive/Wim/WimIn.cpp @@ -264,9 +264,8 @@ static void GetStream(bool oldVersion, const Byte *p, CStreamInfo &s) if (oldVersion) { s.PartNumber = 1; - s.RefCount = 1; - // UInt32 id = Get32(p + 24); - // UInt32 unknown = Get32(p + 28); + s.Id = Get32(p + 24); + s.RefCount = Get32(p + 28); memcpy(s.Hash, p + 32, kHashSize); } else @@ -384,31 +383,48 @@ HRESULT CDatabase::ParseDirItem(size_t pos, int parent) DirProcessed += 8; return S_OK; } - if ((len & 7) != 0 || len < 0x28 || rem < len) + if ((len & 7) != 0 || rem < len) return S_FALSE; + if (!IsOldVersion) + if (len < 0x28) + return S_FALSE; DirProcessed += (size_t)len; if (DirProcessed > DirSize) return S_FALSE; - if (Get64(p + 8) == 0) + int extraOffset = 0; + if (IsOldVersion) + { + if (len < 0x40 || (/* Get32(p + 12) == 0 && */ Get32(p + 0x14) != 0)) + { + extraOffset = 0x10; + } + } + else if (Get64(p + 8) == 0) + extraOffset = 0x24; + if (extraOffset) { if (prevIndex == -1) return S_FALSE; - - UInt32 fileNameLen = Get16(p + 0x24); + UInt32 fileNameLen = Get16(p + extraOffset); if ((fileNameLen & 1) != 0) return S_FALSE; /* Probably different versions of ImageX can use different number of additional ZEROs. So we don't use exact check. */ UInt32 fileNameLen2 = (fileNameLen == 0 ? fileNameLen : fileNameLen + 2); - if (((0x26 + fileNameLen2 + 6) & ~7) > len) + if (((extraOffset + 2 + fileNameLen2 + 6) & ~7) > len) return S_FALSE; UString name; - RINOK(ReadName(p + 0x26, fileNameLen, name)); + RINOK(ReadName(p + extraOffset + 2, fileNameLen, name)); CItem &prevItem = Items[prevIndex]; if (name.IsEmpty() && !prevItem.HasStream()) - memcpy(prevItem.Hash, p + 0x10, kHashSize); + { + if (IsOldVersion) + prevItem.Id = Get32(p + 8); + else + memcpy(prevItem.Hash, p + 0x10, kHashSize); + } else { CItem item; @@ -416,7 +432,13 @@ HRESULT CDatabase::ParseDirItem(size_t pos, int parent) item.CTime = prevItem.CTime; item.ATime = prevItem.ATime; item.MTime = prevItem.MTime; - memcpy(item.Hash, p + 0x10, kHashSize); + if (IsOldVersion) + { + item.Id = Get32(p + 8); + memset(item.Hash, 0, kHashSize); + } + else + memcpy(item.Hash, p + 0x10, kHashSize); item.Attrib = 0; item.Order = Order++; item.Parent = parent; @@ -425,30 +447,41 @@ HRESULT CDatabase::ParseDirItem(size_t pos, int parent) pos += (size_t)len; continue; } - if (len < kDirRecordSize) + + UInt32 dirRecordSize = IsOldVersion ? kDirRecordSizeOld : kDirRecordSize; + if (len < dirRecordSize) return S_FALSE; CItem item; item.Attrib = Get32(p + 8); // item.SecurityId = Get32(p + 0xC); UInt64 subdirOffset = Get64(p + 0x10); - GetFileTimeFromMem(p + 0x28, &item.CTime); - GetFileTimeFromMem(p + 0x30, &item.ATime); - GetFileTimeFromMem(p + 0x38, &item.MTime); - memcpy(item.Hash, p + 0x40, kHashSize); + UInt32 timeOffset = IsOldVersion ? 0x18: 0x28; + GetFileTimeFromMem(p + timeOffset, &item.CTime); + GetFileTimeFromMem(p + timeOffset + 8, &item.ATime); + GetFileTimeFromMem(p + timeOffset + 16, &item.MTime); + if (IsOldVersion) + { + item.Id = Get32(p + 0x10); + memset(item.Hash, 0, kHashSize); + } + else + { + memcpy(item.Hash, p + 0x40, kHashSize); + } + // UInt32 numStreams = Get16(p + dirRecordSize - 6); + UInt32 shortNameLen = Get16(p + dirRecordSize - 4); + UInt32 fileNameLen = Get16(p + dirRecordSize - 2); - UInt32 shortNameLen = Get16(p + 98); - UInt32 fileNameLen = Get16(p + 100); if ((shortNameLen & 1) != 0 || (fileNameLen & 1) != 0) return S_FALSE; UInt32 shortNameLen2 = (shortNameLen == 0 ? shortNameLen : shortNameLen + 2); UInt32 fileNameLen2 = (fileNameLen == 0 ? fileNameLen : fileNameLen + 2); - if (((kDirRecordSize + fileNameLen2 + shortNameLen2 + 6) & ~7) > len) + if (((dirRecordSize + fileNameLen2 + shortNameLen2 + 6) & ~7) > len) return S_FALSE; - - p += kDirRecordSize; + p += dirRecordSize; RINOK(ReadName(p, fileNameLen, item.Name)); RINOK(ReadName(p + fileNameLen2, shortNameLen, item.ShortName)); @@ -458,9 +491,9 @@ HRESULT CDatabase::ParseDirItem(size_t pos, int parent) /* // there are some extra data for some files. - p -= kDirRecordSize; - p += ((kDirRecordSize + fileNameLen2 + shortNameLen2 + 6) & ~7); - if (((kDirRecordSize + fileNameLen2 + shortNameLen2 + 6) & ~7) != len) + p -= dirRecordSize; + p += ((dirRecordSize + fileNameLen2 + shortNameLen2 + 6) & ~7); + if (((dirRecordSize + fileNameLen2 + shortNameLen2 + 6) & ~7) != len) p = p; */ @@ -496,6 +529,29 @@ HRESULT CDatabase::ParseImageDirs(const CByteBuffer &buf, int parent) return S_FALSE; const Byte *p = DirData; UInt32 totalLength = Get32(p); + if (IsOldVersion) + { + for (pos = 4;; pos += 8) + { + if (pos + 4 > DirSize) + return S_FALSE; + UInt32 n = Get32(p + pos); + if (n == 0) + break; + if (pos + 8 > DirSize) + return S_FALSE; + totalLength += Get32(p + pos + 4); + if (totalLength > DirSize) + return S_FALSE; + } + pos += totalLength + 4; + pos = (pos + 7) & ~(size_t)7; + if (pos > DirSize) + return S_FALSE; + } + else + { + // UInt32 numEntries = Get32(p + 4); pos += 8; { @@ -511,7 +567,7 @@ HRESULT CDatabase::ParseImageDirs(const CByteBuffer &buf, int parent) sum += len; pos += 8; } - pos += sum; // skip security descriptors + pos += (size_t)sum; // skip security descriptors while ((pos & 7) != 0) pos++; if (pos != totalLength) @@ -524,6 +580,7 @@ HRESULT CDatabase::ParseImageDirs(const CByteBuffer &buf, int parent) else pos = totalLength; } + } DirStartOffset = DirProcessed = pos; RINOK(ParseDirItem(pos, parent)); if (DirProcessed == DirSize) @@ -580,8 +637,6 @@ HRESULT CHeader::Parse(const Byte *p) BootIndex = Get32(p + 0x48); IntegrityResource.Parse(p + offset + 0x4C); } - if (IsOldVersion()) - return S_FALSE; return S_OK; } @@ -612,9 +667,18 @@ static HRESULT ReadStreams(bool oldVersion, IInStream *inStream, const CHeader & return (i == offsetBuf.GetCapacity()) ? S_OK : S_FALSE; } +static bool IsEmptySha(const Byte *data) +{ + for (int i = 0; i < kHashSize; i++) + if (data[i] != 0) + return false; + return true; +} + HRESULT CDatabase::Open(IInStream *inStream, const CHeader &h, CByteBuffer &xml, IArchiveOpenCallback *openCallback) { OpenCallback = openCallback; + IsOldVersion = h.IsOldVersion(); RINOK(UnpackData(inStream, h.XmlResource, h.IsLzxMode(), xml, NULL)); RINOK(ReadStreams(h.IsOldVersion(), inStream, h, *this)); bool needBootMetadata = !h.MetadataResource.IsEmpty(); @@ -631,7 +695,8 @@ HRESULT CDatabase::Open(IInStream *inStream, const CHeader &h, CByteBuffer &xml, Byte hash[kHashSize]; CByteBuffer metadata; RINOK(UnpackData(inStream, si.Resource, h.IsLzxMode(), metadata, hash)); - if (memcmp(hash, si.Hash, kHashSize) != 0) + if (memcmp(hash, si.Hash, kHashSize) != 0 && + !(h.IsOldVersion() && IsEmptySha(si.Hash))) return S_FALSE; NumImages++; RINOK(ParseImageDirs(metadata, -(int)(++imageIndex))); @@ -660,12 +725,37 @@ static int CompareStreamsByPos(const CStreamInfo *p1, const CStreamInfo *p2, voi return MyCompare(p1->Resource.Offset, p2->Resource.Offset); } +static int CompareIDs(const int *p1, const int *p2, void *param) +{ + const CRecordVector<CStreamInfo> &streams = *(const CRecordVector<CStreamInfo> *)param; + return MyCompare(streams[*p1].Id, streams[*p2].Id); +} + static int CompareHashRefs(const int *p1, const int *p2, void *param) { const CRecordVector<CStreamInfo> &streams = *(const CRecordVector<CStreamInfo> *)param; return memcmp(streams[*p1].Hash, streams[*p2].Hash, kHashSize); } +static int FindId(const CRecordVector<CStreamInfo> &streams, + const CIntVector &sortedByHash, UInt32 id) +{ + int left = 0, right = streams.Size(); + while (left != right) + { + int mid = (left + right) / 2; + int streamIndex = sortedByHash[mid]; + UInt32 id2 = streams[streamIndex].Id; + if (id == id2) + return streamIndex; + if (id < id2) + right = mid; + else + left = mid + 1; + } + return -1; +} + static int FindHash(const CRecordVector<CStreamInfo> &streams, const CIntVector &sortedByHash, const Byte *hash) { @@ -712,7 +802,10 @@ HRESULT CDatabase::Sort(bool skipRootDir) { for (int i = 0; i < Streams.Size(); i++) sortedByHash.Add(i); - sortedByHash.Sort(CompareHashRefs, &Streams); + if (IsOldVersion) + sortedByHash.Sort(CompareIDs, &Streams); + else + sortedByHash.Sort(CompareHashRefs, &Streams); } for (int i = 0; i < Items.Size(); i++) @@ -720,7 +813,10 @@ HRESULT CDatabase::Sort(bool skipRootDir) CItem &item = Items[i]; item.StreamIndex = -1; if (item.HasStream()) - item.StreamIndex = FindHash(Streams, sortedByHash, item.Hash); + if (IsOldVersion) + item.StreamIndex = FindId(Streams, sortedByHash, item.Id); + else + item.StreamIndex = FindHash(Streams, sortedByHash, item.Hash); } } diff --git a/CPP/7zip/Archive/Wim/WimIn.h b/CPP/7zip/Archive/Wim/WimIn.h index 2a40adb3..da3e28a5 100755 --- a/CPP/7zip/Archive/Wim/WimIn.h +++ b/CPP/7zip/Archive/Wim/WimIn.h @@ -155,8 +155,8 @@ struct CHeader bool IsSupported() const { return (!IsCompressed() || (Flags & NHeaderFlags::kLZX) != 0 || (Flags & NHeaderFlags::kXPRESS) != 0 ) ; } bool IsLzxMode() const { return (Flags & NHeaderFlags::kLZX) != 0; } bool IsSpanned() const { return (!IsCompressed() || (Flags & NHeaderFlags::kSpanned) != 0); } - bool IsOldVersion() const { return (Version == 0x010A00); } - bool IsNewVersion()const { return (Version > 0x010C00); } + bool IsOldVersion() const { return (Version <= 0x010A00); } + bool IsNewVersion() const { return (Version > 0x010C00); } bool AreFromOnArchive(const CHeader &h) { @@ -172,11 +172,13 @@ struct CStreamInfo CResource Resource; UInt16 PartNumber; UInt32 RefCount; + UInt32 Id; BYTE Hash[kHashSize]; void WriteTo(Byte *p) const; }; +const UInt32 kDirRecordSizeOld = 62; const UInt32 kDirRecordSize = 102; struct CItem @@ -186,25 +188,25 @@ struct CItem UInt32 Attrib; // UInt32 SecurityId; BYTE Hash[kHashSize]; + UInt32 Id; FILETIME CTime; FILETIME ATime; FILETIME MTime; // UInt32 ReparseTag; // UInt64 HardLink; // UInt16 NumStreams; - // UInt16 ShortNameLen; int StreamIndex; int Parent; unsigned Order; bool HasMetadata; - CItem(): HasMetadata(true), StreamIndex(-1) {} + CItem(): HasMetadata(true), StreamIndex(-1), Id(0) {} bool IsDir() const { return HasMetadata && ((Attrib & 0x10) != 0); } bool HasStream() const { for (unsigned i = 0; i < kHashSize; i++) if (Hash[i] != 0) return true; - return false; + return Id != 0; } }; @@ -228,6 +230,8 @@ public: bool SkipRoot; bool ShowImageNumber; + bool IsOldVersion; + UInt64 GetUnpackSize() const { UInt64 res = 0; @@ -253,6 +257,7 @@ public: SkipRoot = true; ShowImageNumber = true; + IsOldVersion = false; } UString GetItemPath(int index) const; diff --git a/CPP/7zip/Archive/Zip/ZipAddCommon.cpp b/CPP/7zip/Archive/Zip/ZipAddCommon.cpp index 3451e3f1..ae75a1a2 100755 --- a/CPP/7zip/Archive/Zip/ZipAddCommon.cpp +++ b/CPP/7zip/Archive/Zip/ZipAddCommon.cpp @@ -146,6 +146,7 @@ HRESULT CAddCommon::Compress( opRes.ExtractVersion = NFileHeader::NCompressionMethod::kExtractVersion_Default; if (inCrcStreamSpec != 0) RINOK(inCrcStreamSpec->Seek(0, STREAM_SEEK_SET, NULL)); + RINOK(outStream->SetSize(0)); RINOK(outStream->Seek(0, STREAM_SEEK_SET, NULL)); if (_options.PasswordIsDefined) { @@ -218,7 +219,7 @@ HRESULT CAddCommon::Compress( _options.Algo, _options.DicSize, _options.NumFastBytes, - (BSTR)(const wchar_t *)_options.MatchFinder, + const_cast<BSTR>((const wchar_t *)_options.MatchFinder), _options.NumMatchFinderCycles }; PROPID propIDs[] = @@ -373,7 +374,7 @@ HRESULT CAddCommon::Compress( RINOK(outStream->Seek(0, STREAM_SEEK_CUR, &opRes.PackSize)); } opRes.Method = method; - return outStream->SetSize(opRes.PackSize); + return S_OK; } }} diff --git a/CPP/7zip/Archive/Zip/ZipIn.cpp b/CPP/7zip/Archive/Zip/ZipIn.cpp index 1048b57d..b36b61be 100755 --- a/CPP/7zip/Archive/Zip/ZipIn.cpp +++ b/CPP/7zip/Archive/Zip/ZipIn.cpp @@ -544,7 +544,17 @@ HRESULT CInArchive::FindCd(CCdInfo &cdInfo) UInt64 curPos = endPosition - bufSize + i; UInt64 cdEnd = cdInfo.Size + cdInfo.Offset; if (curPos != cdEnd) - ArcInfo.Base = curPos - cdEnd; + { + /* + if (cdInfo.Offset <= 16 && cdInfo.Size != 0) + { + // here we support some rare ZIP files with Central directory at the start + ArcInfo.Base = 0; + } + else + */ + ArcInfo.Base = curPos - cdEnd; + } return S_OK; } } diff --git a/CPP/7zip/Archive/Zip/ZipUpdate.cpp b/CPP/7zip/Archive/Zip/ZipUpdate.cpp index 6dd20f94..d4fdee3d 100755 --- a/CPP/7zip/Archive/Zip/ZipUpdate.cpp +++ b/CPP/7zip/Archive/Zip/ZipUpdate.cpp @@ -2,6 +2,8 @@ #include "StdAfx.h" +#include "../../../../C/Alloc.h" + #include "Common/AutoPtr.h" #include "Common/Defs.h" #include "Common/StringConvert.h" @@ -16,6 +18,7 @@ #ifndef _7ZIP_ST #include "../../Common/ProgressMt.h" #endif +#include "../../Common/StreamUtils.h" #include "../../Compress/CopyCoder.h" @@ -798,6 +801,216 @@ static HRESULT Update2( #endif } +static const size_t kCacheBlockSize = (1 << 20); +static const size_t kCacheSize = (kCacheBlockSize << 2); +static const size_t kCacheMask = (kCacheSize - 1); + +class CCacheOutStream: + public IOutStream, + public CMyUnknownImp +{ + CMyComPtr<IOutStream> _stream; + Byte *_cache; + UInt64 _virtPos; + UInt64 _virtSize; + UInt64 _phyPos; + UInt64 _phySize; // <= _virtSize + UInt64 _cachedPos; // (_cachedPos + _cachedSize) <= _virtSize + size_t _cachedSize; + + HRESULT MyWrite(size_t size); + HRESULT MyWriteBlock() + { + return MyWrite(kCacheBlockSize - ((size_t)_cachedPos & (kCacheBlockSize - 1))); + } + HRESULT FlushCache(); +public: + CCacheOutStream(): _cache(0) {} + ~CCacheOutStream(); + bool Allocate(); + HRESULT Init(IOutStream *stream); + + MY_UNKNOWN_IMP + + STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); + STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition); + STDMETHOD(SetSize)(UInt64 newSize); +}; + +bool CCacheOutStream::Allocate() +{ + if (!_cache) + _cache = (Byte *)::MidAlloc(kCacheSize); + return (_cache != NULL); +} + +HRESULT CCacheOutStream::Init(IOutStream *stream) +{ + _virtPos = _phyPos = 0; + _stream = stream; + RINOK(_stream->Seek(0, STREAM_SEEK_CUR, &_virtPos)); + RINOK(_stream->Seek(0, STREAM_SEEK_END, &_virtSize)); + RINOK(_stream->Seek(_virtPos, STREAM_SEEK_SET, &_virtPos)); + _phyPos = _virtPos; + _phySize = _virtSize; + _cachedPos = 0; + _cachedSize = 0; + return S_OK; +} + +HRESULT CCacheOutStream::MyWrite(size_t size) +{ + while (size != 0 && _cachedSize != 0) + { + if (_phyPos != _cachedPos) + { + RINOK(_stream->Seek(_cachedPos, STREAM_SEEK_SET, &_phyPos)); + } + size_t pos = (size_t)_cachedPos & kCacheMask; + size_t curSize = MyMin(kCacheSize - pos, _cachedSize); + curSize = MyMin(curSize, size); + RINOK(WriteStream(_stream, _cache + pos, curSize)); + _phyPos += curSize; + if (_phySize < _phyPos) + _phySize = _phyPos; + _cachedPos += curSize; + _cachedSize -= curSize; + size -= curSize; + } + return S_OK; +} + +HRESULT CCacheOutStream::FlushCache() +{ + return MyWrite(_cachedSize); +} + +CCacheOutStream::~CCacheOutStream() +{ + FlushCache(); + if (_virtSize != _phySize) + _stream->SetSize(_virtSize); + if (_virtPos != _phyPos) + _stream->Seek(_virtPos, STREAM_SEEK_SET, NULL); + ::MidFree(_cache); +} + +STDMETHODIMP CCacheOutStream::Write(const void *data, UInt32 size, UInt32 *processedSize) +{ + if (processedSize) + *processedSize = 0; + if (size == 0) + return S_OK; + + UInt64 zerosStart = _virtPos; + if (_cachedSize != 0) + { + if (_virtPos < _cachedPos) + { + RINOK(FlushCache()); + } + else + { + UInt64 cachedEnd = _cachedPos + _cachedSize; + if (cachedEnd < _virtPos) + { + if (cachedEnd < _phySize) + { + RINOK(FlushCache()); + } + else + zerosStart = cachedEnd; + } + } + } + + if (_cachedSize == 0 && _phySize < _virtPos) + _cachedPos = zerosStart = _phySize; + + if (zerosStart != _virtPos) + { + // write zeros to [cachedEnd ... _virtPos) + + for (;;) + { + UInt64 cachedEnd = _cachedPos + _cachedSize; + size_t endPos = (size_t)cachedEnd & kCacheMask; + size_t curSize = kCacheSize - endPos; + if (curSize > _virtPos - cachedEnd) + curSize = (size_t)(_virtPos - cachedEnd); + if (curSize == 0) + break; + while (curSize > (kCacheSize - _cachedSize)) + { + RINOK(MyWriteBlock()); + } + memset(_cache + endPos, 0, curSize); + _cachedSize += curSize; + } + } + + if (_cachedSize == 0) + _cachedPos = _virtPos; + + size_t pos = (size_t)_virtPos & kCacheMask; + size = (UInt32)MyMin((size_t)size, kCacheSize - pos); + UInt64 cachedEnd = _cachedPos + _cachedSize; + if (_virtPos != cachedEnd) // _virtPos < cachedEnd + size = (UInt32)MyMin((size_t)size, (size_t)(cachedEnd - _virtPos)); + else + { + // _virtPos == cachedEnd + if (_cachedSize == kCacheSize) + { + RINOK(MyWriteBlock()); + } + size_t startPos = (size_t)_cachedPos & kCacheMask; + if (startPos > pos) + size = (UInt32)MyMin((size_t)size, (size_t)(startPos - pos)); + _cachedSize += size; + } + memcpy(_cache + pos, data, size); + if (processedSize) + *processedSize = size; + _virtPos += size; + if (_virtSize < _virtPos) + _virtSize = _virtPos; + return S_OK; +} + +STDMETHODIMP CCacheOutStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition) +{ + switch(seekOrigin) + { + case STREAM_SEEK_SET: _virtPos = offset; break; + case STREAM_SEEK_CUR: _virtPos += offset; break; + case STREAM_SEEK_END: _virtPos = _virtSize + offset; break; + default: return STG_E_INVALIDFUNCTION; + } + if (newPosition) + *newPosition = _virtPos; + return S_OK; +} + +STDMETHODIMP CCacheOutStream::SetSize(UInt64 newSize) +{ + _virtSize = newSize; + if (newSize < _phySize) + { + RINOK(_stream->SetSize(newSize)); + _phySize = newSize; + } + if (newSize <= _cachedPos) + { + _cachedSize = 0; + _cachedPos = newSize; + } + if (newSize < _cachedPos + _cachedSize) + _cachedSize = (size_t)(newSize - _cachedPos); + return S_OK; +} + + HRESULT Update( DECL_EXTERNAL_CODECS_LOC_VARS const CObjectVector<CItemEx> &inputItems, @@ -808,9 +1021,17 @@ HRESULT Update( IArchiveUpdateCallback *updateCallback) { CMyComPtr<IOutStream> outStream; - RINOK(seqOutStream->QueryInterface(IID_IOutStream, (void **)&outStream)); - if (!outStream) - return E_NOTIMPL; + { + CMyComPtr<IOutStream> outStreamReal; + seqOutStream->QueryInterface(IID_IOutStream, (void **)&outStreamReal); + if (!outStreamReal) + return E_NOTIMPL; + CCacheOutStream *cacheStream = new CCacheOutStream(); + outStream = cacheStream; + if (!cacheStream->Allocate()) + return E_OUTOFMEMORY; + RINOK(cacheStream->Init(outStreamReal)); + } if (inArchive) { diff --git a/CPP/7zip/Bundles/LzmaCon/LzmaAlone.cpp b/CPP/7zip/Bundles/LzmaCon/LzmaAlone.cpp index 01c6c7cd..efda09d7 100755 --- a/CPP/7zip/Bundles/LzmaCon/LzmaAlone.cpp +++ b/CPP/7zip/Bundles/LzmaCon/LzmaAlone.cpp @@ -88,7 +88,7 @@ static const int kNumSwitches = sizeof(kSwitchForms) / sizeof(kSwitchForms[0]); static void PrintMessage(const char *s) { - fprintf(stderr, s); + fputs(s, stderr); } static void PrintHelp() @@ -425,7 +425,7 @@ int main2(int numArgs, const char *args[]) props[5].ulVal = (UInt32)fb; props[6].vt = VT_BSTR; - props[6].bstrVal = (BSTR)(const wchar_t *)mf; + props[6].bstrVal = const_cast<BSTR>((const wchar_t *)mf); props[7].vt = VT_BOOL; props[7].boolVal = eos ? VARIANT_TRUE : VARIANT_FALSE; diff --git a/CPP/7zip/Common/FileStreams.cpp b/CPP/7zip/Common/FileStreams.cpp index 292fc7c2..426a0d3d 100755 --- a/CPP/7zip/Common/FileStreams.cpp +++ b/CPP/7zip/Common/FileStreams.cpp @@ -353,7 +353,7 @@ STDMETHODIMP COutFileStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPo #endif } -STDMETHODIMP COutFileStream::SetSize(Int64 newSize) +STDMETHODIMP COutFileStream::SetSize(UInt64 newSize) { #ifdef USE_WIN_FILE UInt64 currentPos; @@ -418,4 +418,5 @@ STDMETHODIMP CStdOutFileStream::Write(const void *data, UInt32 size, UInt32 *pro return S_OK; #endif } + #endif diff --git a/CPP/7zip/Common/FileStreams.h b/CPP/7zip/Common/FileStreams.h index 0b91380d..895745d3 100755 --- a/CPP/7zip/Common/FileStreams.h +++ b/CPP/7zip/Common/FileStreams.h @@ -127,7 +127,7 @@ public: STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition); - STDMETHOD(SetSize)(Int64 newSize); + STDMETHOD(SetSize)(UInt64 newSize); }; class CStdOutFileStream: diff --git a/CPP/7zip/Common/FilterCoder.cpp b/CPP/7zip/Common/FilterCoder.cpp index 88bab018..69673527 100755 --- a/CPP/7zip/Common/FilterCoder.cpp +++ b/CPP/7zip/Common/FilterCoder.cpp @@ -92,7 +92,7 @@ STDMETHODIMP CFilterCoder::ReleaseOutStream() { _outStream.Release(); return S_OK; -}; +} STDMETHODIMP CFilterCoder::Write(const void *data, UInt32 size, UInt32 *processedSize) @@ -164,7 +164,7 @@ STDMETHODIMP CFilterCoder::ReleaseInStream() { _inStream.Release(); return S_OK; -}; +} STDMETHODIMP CFilterCoder::Read(void *data, UInt32 size, UInt32 *processedSize) { diff --git a/CPP/7zip/Common/OffsetStream.cpp b/CPP/7zip/Common/OffsetStream.cpp index 24fcf161..c5e4e6da 100755 --- a/CPP/7zip/Common/OffsetStream.cpp +++ b/CPP/7zip/Common/OffsetStream.cpp @@ -29,7 +29,7 @@ STDMETHODIMP COffsetOutStream::Seek(Int64 offset, UInt32 seekOrigin, return result; } -STDMETHODIMP COffsetOutStream::SetSize(Int64 newSize) +STDMETHODIMP COffsetOutStream::SetSize(UInt64 newSize) { return _stream->SetSize(_offset + newSize); } diff --git a/CPP/7zip/Common/OffsetStream.h b/CPP/7zip/Common/OffsetStream.h index 5a69404f..de9d06dd 100755 --- a/CPP/7zip/Common/OffsetStream.h +++ b/CPP/7zip/Common/OffsetStream.h @@ -19,7 +19,7 @@ public: STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition); - STDMETHOD(SetSize)(Int64 newSize); + STDMETHOD(SetSize)(UInt64 newSize); }; #endif diff --git a/CPP/7zip/Common/OutMemStream.cpp b/CPP/7zip/Common/OutMemStream.cpp index ddc31486..2e92886b 100755 --- a/CPP/7zip/Common/OutMemStream.cpp +++ b/CPP/7zip/Common/OutMemStream.cpp @@ -129,7 +129,7 @@ STDMETHODIMP COutMemStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *newPos return S_OK; } -STDMETHODIMP COutMemStream::SetSize(Int64 newSize) +STDMETHODIMP COutMemStream::SetSize(UInt64 newSize) { if (_realStreamMode) { diff --git a/CPP/7zip/Common/OutMemStream.h b/CPP/7zip/Common/OutMemStream.h index 5ffcea2f..b47f339e 100755 --- a/CPP/7zip/Common/OutMemStream.h +++ b/CPP/7zip/Common/OutMemStream.h @@ -90,7 +90,7 @@ public: STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition); - STDMETHOD(SetSize)(Int64 newSize); + STDMETHOD(SetSize)(UInt64 newSize); }; #endif diff --git a/CPP/7zip/Compress/BZip2Decoder.cpp b/CPP/7zip/Compress/BZip2Decoder.cpp index bc252d09..cb1f981a 100755 --- a/CPP/7zip/Compress/BZip2Decoder.cpp +++ b/CPP/7zip/Compress/BZip2Decoder.cpp @@ -10,8 +10,9 @@ namespace NCompress { namespace NBZip2 { -#define NO_INLINE MY_FAST_CALL - +#undef NO_INLINE +#define NO_INLINE + static const UInt32 kNumThreadsMax = 4; static const UInt32 kBufferSize = (1 << 17); @@ -422,7 +423,7 @@ CDecoder::CDecoder() m_States = 0; m_NumThreadsPrev = 0; NumThreads = 1; - #endif; + #endif _needInStreamInit = true; } diff --git a/CPP/7zip/Compress/DeflateEncoder.cpp b/CPP/7zip/Compress/DeflateEncoder.cpp index 28906e8c..35a81cae 100755 --- a/CPP/7zip/Compress/DeflateEncoder.cpp +++ b/CPP/7zip/Compress/DeflateEncoder.cpp @@ -9,8 +9,10 @@ #include "DeflateEncoder.h" -#if _MSC_VER >= 1300 -#define NO_INLINE __declspec(noinline) +#undef NO_INLINE + +#ifdef _MSC_VER +#define NO_INLINE MY_NO_INLINE #else #define NO_INLINE #endif @@ -580,7 +582,7 @@ NO_INLINE UInt32 Huffman_GetPrice(const UInt32 *freqs, const Byte *lens, UInt32 for (i = 0; i < num; i++) price += lens[i] * freqs[i]; return price; -}; +} NO_INLINE UInt32 Huffman_GetPrice_Spec(const UInt32 *freqs, const Byte *lens, UInt32 num, const Byte *extraBits, UInt32 extraBase) { diff --git a/CPP/7zip/Compress/LzxDecoder.cpp b/CPP/7zip/Compress/LzxDecoder.cpp index 6224bea5..d1027f1f 100755 --- a/CPP/7zip/Compress/LzxDecoder.cpp +++ b/CPP/7zip/Compress/LzxDecoder.cpp @@ -164,7 +164,7 @@ void CDecoder::ClearPrevLevels() m_LastMainLevels[i] = 0; for (i = 0; i < kNumLenSymbols; i++) m_LastLenLevels[i] = 0; -}; +} HRESULT CDecoder::CodeSpec(UInt32 curSize) diff --git a/CPP/7zip/Compress/Rar3Vm.cpp b/CPP/7zip/Compress/Rar3Vm.cpp index 759dfbdb..74051dd7 100755 --- a/CPP/7zip/Compress/Rar3Vm.cpp +++ b/CPP/7zip/Compress/Rar3Vm.cpp @@ -778,13 +778,13 @@ struct StandardFilterSignature } kStdFilters[]= { - 53, 0xad576887, SF_E8, - 57, 0x3cd7e57e, SF_E8E9, - 120, 0x3769893f, SF_ITANIUM, - 29, 0x0e06077d, SF_DELTA, - 149, 0x1c2c5dc8, SF_RGB, - 216, 0xbc85e701, SF_AUDIO, - 40, 0x46b9c560, SF_UPCASE + { 53, 0xad576887, SF_E8 }, + { 57, 0x3cd7e57e, SF_E8E9 }, + { 120, 0x3769893f, SF_ITANIUM }, + { 29, 0x0e06077d, SF_DELTA }, + { 149, 0x1c2c5dc8, SF_RGB }, + { 216, 0xbc85e701, SF_AUDIO }, + { 40, 0x46b9c560, SF_UPCASE } }; static int FindStandardFilter(const Byte *code, UInt32 codeSize) diff --git a/CPP/7zip/Crypto/RarAes.cpp b/CPP/7zip/Crypto/RarAes.cpp index 4e4aa59b..b0f00ea8 100755 --- a/CPP/7zip/Crypto/RarAes.cpp +++ b/CPP/7zip/Crypto/RarAes.cpp @@ -106,9 +106,9 @@ void CDecoder::Calculate() unsigned i; for (i = 0; i < kNumRounds; i++) { - sha.Update(rawPassword, rawLength, _rar350Mode); + sha.UpdateRar(rawPassword, rawLength, _rar350Mode); Byte pswNum[3] = { (Byte)i, (Byte)(i >> 8), (Byte)(i >> 16) }; - sha.Update(pswNum, 3, _rar350Mode); + sha.UpdateRar(pswNum, 3, _rar350Mode); if (i % (kNumRounds / 16) == 0) { NSha1::CContext shaTemp = sha; diff --git a/CPP/7zip/Crypto/Sha1.cpp b/CPP/7zip/Crypto/Sha1.cpp index 84e589b2..82ca986c 100755 --- a/CPP/7zip/Crypto/Sha1.cpp +++ b/CPP/7zip/Crypto/Sha1.cpp @@ -112,11 +112,29 @@ void CContextBase::PrepareBlock(UInt32 *block, unsigned size) const block[curBufferPos++] = (UInt32)(lenInBits); } -void CContext::Update(Byte *data, size_t size, bool rar350Mode) +void CContext::Update(const Byte *data, size_t size) +{ + unsigned curBufferPos = _count2; + while (size--) + { + int pos = (int)(curBufferPos & 3); + if (pos == 0) + _buffer[curBufferPos >> 2] = 0; + _buffer[curBufferPos >> 2] |= ((UInt32)*data++) << (8 * (3 - pos)); + if (++curBufferPos == kBlockSize) + { + curBufferPos = 0; + CContextBase::UpdateBlock(_buffer, false); + } + } + _count2 = curBufferPos; +} + +void CContext::UpdateRar(Byte *data, size_t size, bool rar350Mode) { bool returnRes = false; unsigned curBufferPos = _count2; - while (size-- > 0) + while (size--) { int pos = (int)(curBufferPos & 3); if (pos == 0) @@ -179,7 +197,7 @@ void CContext::Final(Byte *digest) void CContext32::Update(const UInt32 *data, size_t size) { - while (size-- > 0) + while (size--) { _buffer[_count2++] = *data++; if (_count2 == kBlockSizeInWords) diff --git a/CPP/7zip/Crypto/Sha1.h b/CPP/7zip/Crypto/Sha1.h index 405be216..1bad1f91 100755 --- a/CPP/7zip/Crypto/Sha1.h +++ b/CPP/7zip/Crypto/Sha1.h @@ -51,8 +51,8 @@ public: class CContext: public CContextBase2 { public: - void Update(Byte *data, size_t size, bool rar350Mode = false); - void Update(const Byte *data, size_t size) { Update((Byte *)data, size, false); } + void Update(const Byte *data, size_t size); + void UpdateRar(Byte *data, size_t size, bool rar350Mode); void Final(Byte *digest); }; diff --git a/CPP/7zip/IStream.h b/CPP/7zip/IStream.h index a177a9cb..165e8baa 100755 --- a/CPP/7zip/IStream.h +++ b/CPP/7zip/IStream.h @@ -42,7 +42,7 @@ STREAM_INTERFACE_SUB(IInStream, ISequentialInStream, 0x03) STREAM_INTERFACE_SUB(IOutStream, ISequentialOutStream, 0x04) { STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition) PURE; - STDMETHOD(SetSize)(Int64 newSize) PURE; + STDMETHOD(SetSize)(UInt64 newSize) PURE; }; STREAM_INTERFACE(IStreamGetSize, 0x06) diff --git a/CPP/7zip/MyVersion.h b/CPP/7zip/MyVersion.h index baa722df..41e5ddbd 100755 --- a/CPP/7zip/MyVersion.h +++ b/CPP/7zip/MyVersion.h @@ -1,8 +1,8 @@ #define MY_VER_MAJOR 9 -#define MY_VER_MINOR 16 +#define MY_VER_MINOR 17 #define MY_VER_BUILD 0 -#define MY_VERSION "9.16" -#define MY_7ZIP_VERSION "7-Zip 9.16 beta" -#define MY_DATE "2010-09-08" +#define MY_VERSION "9.17 beta" +#define MY_7ZIP_VERSION "7-Zip 9.17 beta" +#define MY_DATE "2010-10-04" #define MY_COPYRIGHT "Copyright (c) 1999-2010 Igor Pavlov" #define MY_VERSION_COPYRIGHT_DATE MY_VERSION " " MY_COPYRIGHT " " MY_DATE diff --git a/CPP/7zip/UI/Agent/UpdateCallbackAgent.cpp b/CPP/7zip/UI/Agent/UpdateCallbackAgent.cpp index 21549c90..e4aa4438 100755 --- a/CPP/7zip/UI/Agent/UpdateCallbackAgent.cpp +++ b/CPP/7zip/UI/Agent/UpdateCallbackAgent.cpp @@ -118,4 +118,4 @@ HRESULT CUpdateCallbackAgent::ShowDeleteFile(const wchar_t *name) { return Callback->DeleteOperation(name); } -*/
\ No newline at end of file +*/ diff --git a/CPP/7zip/UI/Common/ArchiveCommandLine.cpp b/CPP/7zip/UI/Common/ArchiveCommandLine.cpp index 93806717..f38cf874 100755 --- a/CPP/7zip/UI/Common/ArchiveCommandLine.cpp +++ b/CPP/7zip/UI/Common/ArchiveCommandLine.cpp @@ -86,7 +86,7 @@ enum Enum kTechMode, kShareForWrite, kCaseSensitive, - kCalcCrc, + kCalcCrc }; } @@ -191,12 +191,12 @@ static const char *kSameTerminalError = "I won't write data and program's messag static void ThrowException(const char *errorMessage) { throw CArchiveCommandLineException(errorMessage); -}; +} static void ThrowUserErrorException() { ThrowException(kUserErrorMessage); -}; +} // --------------------------- diff --git a/CPP/7zip/UI/Common/Update.cpp b/CPP/7zip/UI/Common/Update.cpp index 4ed6049d..15da3a2f 100755 --- a/CPP/7zip/UI/Common/Update.cpp +++ b/CPP/7zip/UI/Common/Update.cpp @@ -82,7 +82,7 @@ public: STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize); STDMETHOD(Seek)(Int64 offset, UInt32 seekOrigin, UInt64 *newPosition); - STDMETHOD(SetSize)(Int64 newSize); + STDMETHOD(SetSize)(UInt64 newSize); }; // static NSynchronization::CCriticalSection g_TempPathsCS; @@ -204,7 +204,7 @@ STDMETHODIMP COutMultiVolStream::Seek(Int64 offset, UInt32 seekOrigin, UInt64 *n return S_OK; } -STDMETHODIMP COutMultiVolStream::SetSize(Int64 newSize) +STDMETHODIMP COutMultiVolStream::SetSize(UInt64 newSize) { if (newSize < 0) return E_INVALIDARG; @@ -905,4 +905,3 @@ HRESULT UpdateArchive( #endif return S_OK; } - diff --git a/CPP/7zip/UI/Common/UpdateAction.cpp b/CPP/7zip/UI/Common/UpdateAction.cpp index 845384fb..879a49c5 100755 --- a/CPP/7zip/UI/Common/UpdateAction.cpp +++ b/CPP/7zip/UI/Common/UpdateAction.cpp @@ -7,7 +7,7 @@ namespace NUpdateArchive { const CActionSet kAddActionSet = -{ +{{ NPairAction::kCopy, NPairAction::kCopy, NPairAction::kCompress, @@ -15,10 +15,10 @@ const CActionSet kAddActionSet = NPairAction::kCompress, NPairAction::kCompress, NPairAction::kCompress -}; +}}; const CActionSet kUpdateActionSet = -{ +{{ NPairAction::kCopy, NPairAction::kCopy, NPairAction::kCompress, @@ -26,10 +26,10 @@ const CActionSet kUpdateActionSet = NPairAction::kCompress, NPairAction::kCopy, NPairAction::kCompress -}; +}}; const CActionSet kFreshActionSet = -{ +{{ NPairAction::kCopy, NPairAction::kCopy, NPairAction::kIgnore, @@ -37,10 +37,10 @@ const CActionSet kFreshActionSet = NPairAction::kCompress, NPairAction::kCopy, NPairAction::kCompress -}; +}}; const CActionSet kSynchronizeActionSet = -{ +{{ NPairAction::kCopy, NPairAction::kIgnore, NPairAction::kCompress, @@ -48,10 +48,10 @@ const CActionSet kSynchronizeActionSet = NPairAction::kCompress, NPairAction::kCopy, NPairAction::kCompress, -}; +}}; const CActionSet kDeleteActionSet = -{ +{{ NPairAction::kCopy, NPairAction::kIgnore, NPairAction::kIgnore, @@ -59,6 +59,6 @@ const CActionSet kDeleteActionSet = NPairAction::kIgnore, NPairAction::kIgnore, NPairAction::kIgnore -}; +}}; } diff --git a/CPP/7zip/UI/Common/UpdateAction.h b/CPP/7zip/UI/Common/UpdateAction.h index 7da5ff2e..0ac1c108 100755 --- a/CPP/7zip/UI/Common/UpdateAction.h +++ b/CPP/7zip/UI/Common/UpdateAction.h @@ -19,6 +19,7 @@ namespace NUpdateArchive { kUnknowNewerFiles }; } + namespace NPairAction { enum EEnum @@ -29,6 +30,7 @@ namespace NUpdateArchive { kCompressAsAnti }; } + struct CActionSet { NPairAction::EEnum StateActions[NPairState::kNumValues]; @@ -44,14 +46,12 @@ namespace NUpdateArchive { return false; } }; + extern const CActionSet kAddActionSet; extern const CActionSet kUpdateActionSet; extern const CActionSet kFreshActionSet; extern const CActionSet kSynchronizeActionSet; extern const CActionSet kDeleteActionSet; -}; - +} #endif - - diff --git a/CPP/7zip/UI/Common/UpdateCallback.h b/CPP/7zip/UI/Common/UpdateCallback.h index 50803f52..9a20c315 100755 --- a/CPP/7zip/UI/Common/UpdateCallback.h +++ b/CPP/7zip/UI/Common/UpdateCallback.h @@ -24,8 +24,8 @@ virtual HRESULT SetOperationResult(Int32 operationResult) x; \ virtual HRESULT CryptoGetTextPassword2(Int32 *passwordIsDefined, BSTR *password) x; \ virtual HRESULT CryptoGetTextPassword(BSTR *password) x; \ - // virtual HRESULT ShowDeleteFile(const wchar_t *name) x; \ - // virtual HRESULT CloseProgress() { return S_OK; }; + /* virtual HRESULT ShowDeleteFile(const wchar_t *name) x; */ \ + /* virtual HRESULT CloseProgress() { return S_OK; }; */ struct IUpdateCallbackUI { diff --git a/CPP/7zip/UI/Console/BenchCon.cpp b/CPP/7zip/UI/Console/BenchCon.cpp index 96997dcb..35e868c9 100755 --- a/CPP/7zip/UI/Console/BenchCon.cpp +++ b/CPP/7zip/UI/Console/BenchCon.cpp @@ -76,7 +76,7 @@ static void PrintNumber(FILE *f, UInt64 value, int size) fprintf(f, " "); for (int len = (int)strlen(s); len < size; len++) fprintf(f, " "); - fprintf(f, "%s", s); + fputs(s, f); } static void PrintRating(FILE *f, UInt64 rating) @@ -134,7 +134,7 @@ HRESULT CBenchCallback::SetDecodeResult(const CBenchInfo &info, bool final) if (final) { UInt64 rating = GetDecompressRating(info.GlobalTime, info.GlobalFreq, info.UnpackSize, info.PackSize, info.NumIterations); - fprintf(f, kSep); + fputs(kSep, f); CBenchInfo info2 = info; info2.UnpackSize *= info2.NumIterations; info2.PackSize *= info2.NumIterations; @@ -191,14 +191,14 @@ HRESULT LzmaBenchCon( { fprintf(f, " Speed Usage R/U Rating"); if (j == 0) - fprintf(f, kSep); + fputs(kSep, f); } fprintf(f, "\n "); for (j = 0; j < 2; j++) { fprintf(f, " KB/s %% MIPS MIPS"); if (j == 0) - fprintf(f, kSep); + fputs(kSep, f); } fprintf(f, "\n\n"); for (UInt32 i = 0; i < numIterations; i++) diff --git a/CPP/7zip/UI/Far/CLSIDConst.cpp b/CPP/7zip/UI/Far/CLSIDConst.cpp deleted file mode 100755 index a6cea92e..00000000 --- a/CPP/7zip/UI/Far/CLSIDConst.cpp +++ /dev/null @@ -1,8 +0,0 @@ -// CLSIDConst.cpp - -#include "StdAfx.h" - -#include <initguid.h> - -#include "../Agent/Agent.h" -#include "../../IPassword.h" diff --git a/CPP/7zip/UI/Far/ExtractEngine.cpp b/CPP/7zip/UI/Far/ExtractEngine.cpp index 02d14f83..b18eed59 100755 --- a/CPP/7zip/UI/Far/ExtractEngine.cpp +++ b/CPP/7zip/UI/Far/ExtractEngine.cpp @@ -57,20 +57,21 @@ STDMETHODIMP CExtractCallBackImp::AskOverwrite( Int32 *answer) { NOverwriteDialog::CFileInfo oldFileInfo, newFileInfo; - oldFileInfo.Time = *existTime; + oldFileInfo.TimeIsDefined = (existTime != 0); + if (oldFileInfo.TimeIsDefined) + oldFileInfo.Time = *existTime; oldFileInfo.SizeIsDefined = (existSize != NULL); if (oldFileInfo.SizeIsDefined) oldFileInfo.Size = *existSize; - oldFileInfo.Name = GetSystemString(existName, m_CodePage); + oldFileInfo.Name = existName; newFileInfo.TimeIsDefined = (newTime != 0); if (newFileInfo.TimeIsDefined) newFileInfo.Time = *newTime; - newFileInfo.SizeIsDefined = (newSize != NULL); if (newFileInfo.SizeIsDefined) newFileInfo.Size = *newSize; - newFileInfo.Name = GetSystemString(newName, m_CodePage); + newFileInfo.Name = newName; NOverwriteDialog::NResult::EEnum result = NOverwriteDialog::Execute(oldFileInfo, newFileInfo); diff --git a/CPP/7zip/UI/Far/Far.def b/CPP/7zip/UI/Far/Far.def index d96501e2..39f3a5e2 100755 --- a/CPP/7zip/UI/Far/Far.def +++ b/CPP/7zip/UI/Far/Far.def @@ -1,20 +1,34 @@ ; 7-ZipFar.def : Declares the module parameters for the DLL. LIBRARY "7-ZipFar" -DESCRIPTION '7-ZipFar Windows Dynamic Link Library' EXPORTS - SetStartupInfo = _SetStartupInfo@4 - OpenPlugin = _OpenPlugin@8 - OpenFilePlugin = _OpenFilePlugin@12 - ClosePlugin = _ClosePlugin@4 - GetFindData = _GetFindData@16 - FreeFindData = _FreeFindData@12 - SetDirectory = _SetDirectory@12 - GetPluginInfo = _GetPluginInfo@4 - Configure = _Configure@4 - GetOpenPluginInfo = _GetOpenPluginInfo@8 - GetFiles = _GetFiles@24 - PutFiles = _PutFiles@20 - DeleteFiles = _DeleteFiles@16 - ProcessKey = _ProcessKey@12 + SetStartupInfo + OpenPlugin + OpenFilePlugin + ClosePlugin + GetFindData + FreeFindData + SetDirectory + GetPluginInfo + Configure + GetOpenPluginInfo + GetFiles + PutFiles + DeleteFiles + ProcessKey + + ;SetStartupInfoW + ;OpenPluginW + ;OpenFilePluginW + ;ClosePluginW + ;GetFindDataW + ;FreeFindDataW + ;SetDirectoryW + ;GetPluginInfoW + ;ConfigureW + ;GetOpenPluginInfoW + ;GetFilesW + ;PutFilesW + ;DeleteFilesW + ;ProcessKeyW diff --git a/CPP/7zip/UI/Far/Far.dsp b/CPP/7zip/UI/Far/Far.dsp index 0a96bc08..4609c82c 100755 --- a/CPP/7zip/UI/Far/Far.dsp +++ b/CPP/7zip/UI/Far/Far.dsp @@ -53,7 +53,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"C:\Program Files\Far\Plugins\7-Zip\7-ZipFar.dll" /opt:NOWIN98 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"C:\Program Files\Far2\Plugins\7-Zip\7-ZipFar.dll" /opt:NOWIN98 # SUBTRACT LINK32 /pdb:none !ELSEIF "$(CFG)" == "Far - Win32 Debug" @@ -80,7 +80,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"C:\Program Files\Far\Plugins\7-Zip\7-ZipFar.dll" /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"C:\Program Files\Far2\Plugins\7-Zip\7-ZipFar.dll" /pdbtype:sept !ENDIF @@ -93,10 +93,6 @@ LINK32=link.exe # PROP Default_Filter "" # Begin Source File -SOURCE=.\CLSIDConst.cpp -# End Source File -# Begin Source File - SOURCE=.\Far.def # End Source File # Begin Source File diff --git a/CPP/7zip/UI/Far/FarPlugin.h b/CPP/7zip/UI/Far/FarPlugin.h index a1c9715b..1408ef21 100755 --- a/CPP/7zip/UI/Far/FarPlugin.h +++ b/CPP/7zip/UI/Far/FarPlugin.h @@ -1,18 +1,37 @@ // FarPlugin.h -#ifndef __FARPLUGIN_H -#define __FARPLUGIN_H +// #include "plugin.hpp" +const int kInfoPanelLineSize = 80; + +// #define __FAR_PLUGIN_H + +#ifdef UNDER_CE +typedef struct _CHAR_INFO { + union { + WCHAR UnicodeChar; + CHAR AsciiChar; + } Char; + WORD Attributes; +} CHAR_INFO, *PCHAR_INFO; +#endif + +#ifndef __FAR_PLUGIN_H +#define __FAR_PLUGIN_H + +#ifndef _WIN64 #if defined(__BORLANDC__) && (__BORLANDC <= 0x520) #pragma option -a1 #elif defined(__GNUC__) || (defined(__WATCOMC__) && (__WATCOMC__ < 1100)) #pragma pack(1) #else #pragma pack(push,1) +#endif +#endif + #if _MSC_VER #define _export #endif -#endif #define NM 260 @@ -41,8 +60,9 @@ struct PluginPanelItem char *Owner; char **CustomColumnData; int CustomColumnNumber; - DWORD UserData; - DWORD Reserved[3]; + DWORD_PTR UserData; + DWORD CRC32; + DWORD_PTR Reserved[2]; }; #define PPIF_PROCESSDESCR 0x80000000 @@ -58,7 +78,7 @@ enum { typedef int (WINAPI *FARAPIMENU)( - int PluginNumber, + INT_PTR PluginNumber, int X, int Y, int MaxHeight, @@ -73,7 +93,7 @@ typedef int (WINAPI *FARAPIMENU)( ); typedef int (WINAPI *FARAPIDIALOG)( - int PluginNumber, + INT_PTR PluginNumber, int X1, int Y1, int X2, @@ -92,7 +112,7 @@ enum { }; typedef int (WINAPI *FARAPIMESSAGE)( - int PluginNumber, + INT_PTR PluginNumber, unsigned int Flags, char *HelpTopic, char **Items, @@ -101,7 +121,7 @@ typedef int (WINAPI *FARAPIMESSAGE)( ); typedef char* (WINAPI *FARAPIGETMSG)( - int PluginNumber, + INT_PTR PluginNumber, int MsgId ); @@ -194,7 +214,8 @@ struct PanelInfo char CurDir[NM]; int ShortNames; int SortMode; - DWORD Reserved[2]; + DWORD Flags; + DWORD Reserved; }; @@ -222,7 +243,7 @@ typedef int (WINAPI *FARAPIGETDIRLIST)( ); typedef int (WINAPI *FARAPIGETPLUGINDIRLIST)( - int PluginNumber, + INT_PTR PluginNumber, HANDLE hPlugin, char *Dir, struct PluginPanelItem **pPanelItem, @@ -294,126 +315,11 @@ typedef int (WINAPI *FARAPIEDITORCONTROL)( void *Param ); - -enum EDITOR_EVENTS { - EE_READ,EE_SAVE,EE_REDRAW,EE_CLOSE -}; - -enum EDITOR_CONTROL_COMMANDS { - ECTL_GETSTRING,ECTL_SETSTRING,ECTL_INSERTSTRING,ECTL_DELETESTRING, - ECTL_DELETECHAR,ECTL_INSERTTEXT,ECTL_GETINFO,ECTL_SETPOSITION, - ECTL_SELECT,ECTL_REDRAW,ECTL_EDITORTOOEM,ECTL_OEMTOEDITOR, - ECTL_TABTOREAL,ECTL_REALTOTAB,ECTL_EXPANDTABS,ECTL_SETTITLE, - ECTL_READINPUT,ECTL_PROCESSINPUT,ECTL_ADDCOLOR,ECTL_GETCOLOR -}; - - -struct EditorGetString -{ - int StringNumber; - char *StringText; - char *StringEOL; - int StringLength; - int SelStart; - int SelEnd; -}; - - -struct EditorSetString -{ - int StringNumber; - char *StringText; - char *StringEOL; - int StringLength; -}; - - -enum EDITOR_OPTIONS { - EOPT_EXPANDTABS=1,EOPT_PERSISTENTBLOCKS=2,EOPT_DELREMOVESBLOCKS=4, - EOPT_AUTOINDENT=8,EOPT_SAVEFILEPOSITION=16,EOPT_AUTODETECTTABLE=32, - EOPT_CURSORBEYONDEOL=64 -}; - - -enum EDITOR_BLOCK_TYPES { - BTYPE_NONE,BTYPE_STREAM,BTYPE_COLUMN -}; - - -struct EditorInfo -{ - int EditorID; - char *FileName; - int WindowSizeX; - int WindowSizeY; - int TotalLines; - int CurLine; - int CurPos; - int CurTabPos; - int TopScreenLine; - int LeftPos; - int Overtype; - int BlockType; - int BlockStartLine; - int AnsiMode; - int TableNum; - DWORD Options; - int TabSize; - DWORD Reserved[8]; -}; - - -struct EditorSetPosition -{ - int CurLine; - int CurPos; - int CurTabPos; - int TopScreenLine; - int LeftPos; - int Overtype; -}; - - -struct EditorSelect -{ - int BlockType; - int BlockStartLine; - int BlockStartPos; - int BlockWidth; - int BlockHeight; -}; - - -struct EditorConvertText -{ - char *Text; - int TextLength; -}; - - -struct EditorConvertPos -{ - int StringNumber; - int SrcPos; - int DestPos; -}; - - -struct EditorColor -{ - int StringNumber; - int ColorItem; - int StartPos; - int EndPos; - int Color; -}; - - struct PluginStartupInfo { int StructSize; char ModuleName[NM]; - int ModuleNumber; + INT_PTR ModuleNumber; char *RootKey; FARAPIMENU Menu; FARAPIDIALOG Dialog; @@ -456,8 +362,6 @@ struct PluginInfo char *CommandPrefix; }; -const int kInfoPanelLineSize = 80; - struct InfoPanelLine { char Text[kInfoPanelLineSize]; @@ -567,6 +471,7 @@ enum OPERATION_MODES { OPM_DESCR=32 }; +#ifndef _WIN64 #if defined(__BORLANDC__) && (__BORLANDC <= 0x520) #pragma option -a. #elif defined(__GNUC__) || (defined(__WATCOMC__) && (__WATCOMC__ < 1100)) @@ -574,5 +479,41 @@ enum OPERATION_MODES { #else #pragma pack(pop) #endif +#endif + +/* +EXTERN_C_BEGIN + + void WINAPI _export ClosePluginW(HANDLE hPlugin); + int WINAPI _export CompareW(HANDLE hPlugin,const struct PluginPanelItem *Item1,const struct PluginPanelItem *Item2,unsigned int Mode); + int WINAPI _export ConfigureW(int ItemNumber); + int WINAPI _export DeleteFilesW(HANDLE hPlugin,struct PluginPanelItem *PanelItem,int ItemsNumber,int OpMode); + void WINAPI _export ExitFARW(void); + void WINAPI _export FreeFindDataW(HANDLE hPlugin,struct PluginPanelItem *PanelItem,int ItemsNumber); + void WINAPI _export FreeVirtualFindDataW(HANDLE hPlugin,struct PluginPanelItem *PanelItem,int ItemsNumber); + int WINAPI _export GetFilesW(HANDLE hPlugin,struct PluginPanelItem *PanelItem,int ItemsNumber,int Move,const wchar_t **DestPath,int OpMode); + int WINAPI _export GetFindDataW(HANDLE hPlugin,struct PluginPanelItem **pPanelItem,int *pItemsNumber,int OpMode); + int WINAPI _export GetMinFarVersionW(void); + void WINAPI _export GetOpenPluginInfoW(HANDLE hPlugin,struct OpenPluginInfo *Info); + void WINAPI _export GetPluginInfoW(struct PluginInfo *Info); + int WINAPI _export GetVirtualFindDataW(HANDLE hPlugin,struct PluginPanelItem **pPanelItem,int *pItemsNumber,const wchar_t *Path); + int WINAPI _export MakeDirectoryW(HANDLE hPlugin,const wchar_t **Name,int OpMode); + HANDLE WINAPI _export OpenFilePluginW(const wchar_t *Name,const unsigned char *Data,int DataSize,int OpMode); + HANDLE WINAPI _export OpenPluginW(int OpenFrom,INT_PTR Item); + int WINAPI _export ProcessDialogEventW(int Event,void *Param); + int WINAPI _export ProcessEditorEventW(int Event,void *Param); + int WINAPI _export ProcessEditorInputW(const INPUT_RECORD *Rec); + int WINAPI _export ProcessEventW(HANDLE hPlugin,int Event,void *Param); + int WINAPI _export ProcessHostFileW(HANDLE hPlugin,struct PluginPanelItem *PanelItem,int ItemsNumber,int OpMode); + int WINAPI _export ProcessKeyW(HANDLE hPlugin,int Key,unsigned int ControlState); + int WINAPI _export ProcessSynchroEventW(int Event,void *Param); + int WINAPI _export ProcessViewerEventW(int Event,void *Param); + int WINAPI _export PutFilesW(HANDLE hPlugin,struct PluginPanelItem *PanelItem,int ItemsNumber,int Move,const wchar_t *SrcPath,int OpMode); + int WINAPI _export SetDirectoryW(HANDLE hPlugin,const wchar_t *Dir,int OpMode); + int WINAPI _export SetFindListW(HANDLE hPlugin,const struct PluginPanelItem *PanelItem,int ItemsNumber); + void WINAPI _export SetStartupInfoW(const struct PluginStartupInfo *Info); + +EXTERN_C_END +*/ #endif diff --git a/CPP/7zip/UI/Far/FarUtils.cpp b/CPP/7zip/UI/Far/FarUtils.cpp index 01de0233..b980d846 100755 --- a/CPP/7zip/UI/Far/FarUtils.cpp +++ b/CPP/7zip/UI/Far/FarUtils.cpp @@ -4,7 +4,10 @@ #include "Common/StringConvert.h" +#ifndef UNDER_CE #include "Windows/Console.h" +#endif +#include "Windows/Defs.h" #include "Windows/Error.h" #include "FarUtils.h" @@ -417,6 +420,9 @@ void PrintErrorMessage(const char *message, const wchar_t *text) bool WasEscPressed() { + #ifdef UNDER_CE + return false; + #else NConsole::CIn inConsole; HANDLE handle = ::GetStdHandle(STD_INPUT_HANDLE); if(handle == INVALID_HANDLE_VALUE) @@ -438,16 +444,16 @@ bool WasEscPressed() event.Event.KeyEvent.wVirtualKeyCode == VK_ESCAPE) return true; } + #endif } void ShowErrorMessage(DWORD errorCode) { - CSysString message; + UString message; NError::MyFormatMessage(errorCode, message); - message.Replace(TEXT("\x0D"), TEXT("")); - message.Replace(TEXT("\x0A"), TEXT(" ")); - g_StartupInfo.ShowMessage(SystemStringToOemString(message)); - + message.Replace(L"\x0D", L""); + message.Replace(L"\x0A", L" "); + g_StartupInfo.ShowMessage(UnicodeStringToMultiByte(message, CP_OEMCP)); } void ShowLastErrorMessage() diff --git a/CPP/7zip/UI/Far/Main.cpp b/CPP/7zip/UI/Far/Main.cpp index 052f75f9..7cd7d5ee 100755 --- a/CPP/7zip/UI/Far/Main.cpp +++ b/CPP/7zip/UI/Far/Main.cpp @@ -21,8 +21,8 @@ using namespace NWindows; using namespace NFar; static const char *kCommandPrefix = "7-zip"; -static const char *kRegisrtryMainKeyName = ""; -static const char *kRegisrtryValueNameEnabled = "UsedByDefault3"; +static const TCHAR *kRegisrtryMainKeyName = TEXT(""); +static const TCHAR *kRegisrtryValueNameEnabled = TEXT("UsedByDefault3"); static const char *kHelpTopicConfig = "Config"; static bool kPluginEnabledDefault = true; @@ -30,11 +30,17 @@ HINSTANCE g_hInstance; #define NT_CHECK_FAIL_ACTION return FALSE; -BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID) +BOOL WINAPI DllMain( + #ifdef UNDER_CE + HANDLE + #else + HINSTANCE + #endif + hInstance, DWORD dwReason, LPVOID) { if (dwReason == DLL_PROCESS_ATTACH) { - g_hInstance = hInstance; + g_hInstance = (HINSTANCE)hInstance; NT_CHECK } return TRUE; @@ -45,9 +51,9 @@ static struct COptions bool Enabled; } g_Options; -static const char *kPliginNameForRegestry = "7-ZIP"; +static const TCHAR *kPliginNameForRegestry = TEXT("7-ZIP"); -EXTERN_C void WINAPI SetStartupInfo(struct PluginStartupInfo *info) +EXTERN_C void WINAPI SetStartupInfo(const PluginStartupInfo *info) { MY_TRY_BEGIN; g_StartupInfo.Init(*info, kPliginNameForRegestry); @@ -325,11 +331,9 @@ HRESULT OpenArchive(const CSysString &fileName, } */ -static HANDLE MyOpenFilePlugin(const char *name) +static HANDLE MyOpenFilePluginW(const wchar_t *name) { - UINT codePage = ::AreFileApisANSI() ? CP_ACP : CP_OEMCP; - - UString normalizedName = GetUnicodeString(name, codePage); + UString normalizedName = name; normalizedName.Trim(); UString fullName; int fileNamePartStartIndex; @@ -344,7 +348,7 @@ static HANDLE MyOpenFilePlugin(const char *name) CMyComPtr<IInFolderArchive> archiveHandler; // CArchiverInfo archiverInfoResult; - // ::OutputDebugString("before OpenArchive\n"); + // ::OutputDebugStringA("before OpenArchive\n"); CScreenRestorer screenRestorer; { @@ -360,7 +364,7 @@ static HANDLE MyOpenFilePlugin(const char *name) fullName.Left(fileNamePartStartIndex), fullName.Mid(fileNamePartStartIndex)); - // ::OutputDebugString("before OpenArchive\n"); + // ::OutputDebugStringA("before OpenArchive\n"); archiveHandler = new CAgent; CMyComBSTR archiveType; @@ -377,7 +381,7 @@ static HANDLE MyOpenFilePlugin(const char *name) return INVALID_HANDLE_VALUE; } - // ::OutputDebugString("after OpenArchive\n"); + // ::OutputDebugStringA("after OpenArchive\n"); CPlugin *plugin = new CPlugin( fullName, @@ -393,7 +397,18 @@ static HANDLE MyOpenFilePlugin(const char *name) return (HANDLE)(plugin); } -EXTERN_C HANDLE WINAPI OpenFilePlugin(char *name, const unsigned char * /* data */, unsigned int /* dataSize */) +static HANDLE MyOpenFilePlugin(const char *name) +{ + UINT codePage = + #ifdef UNDER_CE + CP_OEMCP; + #else + ::AreFileApisANSI() ? CP_ACP : CP_OEMCP; + #endif + return MyOpenFilePluginW(GetUnicodeString(name, codePage)); +} + +EXTERN_C HANDLE WINAPI OpenFilePlugin(char *name, const unsigned char * /* data */, int /* dataSize */) { MY_TRY_BEGIN; if (name == NULL || (!g_Options.Enabled)) @@ -405,12 +420,27 @@ EXTERN_C HANDLE WINAPI OpenFilePlugin(char *name, const unsigned char * /* data MY_TRY_END2("OpenFilePlugin", INVALID_HANDLE_VALUE); } -EXTERN_C HANDLE WINAPI OpenPlugin(int openFrom, int item) +/* +EXTERN_C HANDLE WINAPI OpenFilePluginW(const wchar_t *name,const unsigned char *Data,int DataSize,int OpMode) +{ + MY_TRY_BEGIN; + if (name == NULL || (!g_Options.Enabled)) + { + // if (!Opt.ProcessShiftF1) + return(INVALID_HANDLE_VALUE); + } + return MyOpenFilePluginW(name); + ::OutputDebugStringA("OpenFilePluginW\n"); + MY_TRY_END2("OpenFilePluginW", INVALID_HANDLE_VALUE); +} +*/ + +EXTERN_C HANDLE WINAPI OpenPlugin(int openFrom, INT_PTR item) { MY_TRY_BEGIN; if(openFrom == OPEN_COMMANDLINE) { - CSysString fileName = (const char *)(UINT_PTR)item; + AString fileName = (const char *)item; if(fileName.IsEmpty()) return INVALID_HANDLE_VALUE; if (fileName.Length() >= 2 && @@ -482,7 +512,7 @@ EXTERN_C int WINAPI GetFiles(HANDLE plugin, struct PluginPanelItem *panelItems, MY_TRY_END2("GetFiles", NFileOperationReturnCode::kError); } -EXTERN_C int WINAPI SetDirectory(HANDLE plugin, char *dir, int opMode) +EXTERN_C int WINAPI SetDirectory(HANDLE plugin, const char *dir, int opMode) { MY_TRY_BEGIN; return(((CPlugin *)plugin)->SetDirectory(dir, opMode)); diff --git a/CPP/7zip/UI/Far/Messages.h b/CPP/7zip/UI/Far/Messages.h index 7dc2ec14..fc3723af 100755 --- a/CPP/7zip/UI/Far/Messages.h +++ b/CPP/7zip/UI/Far/Messages.h @@ -181,4 +181,4 @@ enum EEnum } -#endif
\ No newline at end of file +#endif diff --git a/CPP/7zip/UI/Far/OverwriteDialog.cpp b/CPP/7zip/UI/Far/OverwriteDialog.cpp index 6935fa10..5be6a5f9 100755 --- a/CPP/7zip/UI/Far/OverwriteDialog.cpp +++ b/CPP/7zip/UI/Far/OverwriteDialog.cpp @@ -22,8 +22,8 @@ namespace NOverwriteDialog { struct CFileInfoStrings { - CSysString Size; - CSysString Time; + AString Size; + AString Time; }; void SetFileInfoStrings(const CFileInfo &fileInfo, @@ -51,7 +51,7 @@ void SetFileInfoStrings(const CFileInfo &fileInfo, UString timeString = ConvertFileTimeToString(localFileTime); fileInfoStrings.Time = g_StartupInfo.GetMsgString(NMessageID::kOverwriteModifiedOn); fileInfoStrings.Time += " "; - fileInfoStrings.Time += GetSystemString(timeString, CP_OEMCP); + fileInfoStrings.Time += UnicodeStringToMultiByte(timeString, CP_OEMCP); } } @@ -66,7 +66,10 @@ NResult::EEnum Execute(const CFileInfo &oldFileInfo, const CFileInfo &newFileInf SetFileInfoStrings(oldFileInfo, oldFileInfoStrings); SetFileInfoStrings(newFileInfo, newFileInfoStrings); - struct CInitDialogItem anInitItems[]={ + AString oldName = UnicodeStringToMultiByte(oldFileInfo.Name, CP_OEMCP); + AString newName = UnicodeStringToMultiByte(newFileInfo.Name, CP_OEMCP); + + struct CInitDialogItem initItems[]={ { DI_DOUBLEBOX, 3, 1, kXSize - 4, kYSize - 2, false, false, 0, false, NMessageID::kOverwriteTitle, NULL, NULL }, { DI_TEXT, 5, 2, 0, 0, false, false, 0, false, NMessageID::kOverwriteMessage1, NULL, NULL }, @@ -74,13 +77,13 @@ NResult::EEnum Execute(const CFileInfo &oldFileInfo, const CFileInfo &newFileInf { DI_TEXT, 5, 4, 0, 0, false, false, 0, false, NMessageID::kOverwriteMessageWouldYouLike, NULL, NULL }, - { DI_TEXT, 7, 6, 0, 0, false, false, 0, false, -1, oldFileInfo.Name, NULL }, + { DI_TEXT, 7, 6, 0, 0, false, false, 0, false, -1, oldName, NULL }, { DI_TEXT, 7, 7, 0, 0, false, false, 0, false, -1, oldFileInfoStrings.Size, NULL }, { DI_TEXT, 7, 8, 0, 0, false, false, 0, false, -1, oldFileInfoStrings.Time, NULL }, { DI_TEXT, 5, 10, 0, 0, false, false, 0, false, NMessageID::kOverwriteMessageWithtTisOne, NULL, NULL }, - { DI_TEXT, 7, 12, 0, 0, false, false, 0, false, -1, newFileInfo.Name, NULL }, + { DI_TEXT, 7, 12, 0, 0, false, false, 0, false, -1, newName, NULL }, { DI_TEXT, 7, 13, 0, 0, false, false, 0, false, -1, newFileInfoStrings.Size, NULL }, { DI_TEXT, 7, 14, 0, 0, false, false, 0, false, -1, newFileInfoStrings.Time, NULL }, @@ -94,9 +97,9 @@ NResult::EEnum Execute(const CFileInfo &oldFileInfo, const CFileInfo &newFileInf { DI_BUTTON, 0, kYSize - 3, 0, 0, false, false, DIF_CENTERGROUP, false, NMessageID::kOverwriteCancel, NULL, NULL } }; - const int kNumDialogItems = sizeof(anInitItems) / sizeof(anInitItems[0]); + const int kNumDialogItems = sizeof(initItems) / sizeof(initItems[0]); FarDialogItem aDialogItems[kNumDialogItems]; - g_StartupInfo.InitDialogItems(anInitItems, aDialogItems, kNumDialogItems); + g_StartupInfo.InitDialogItems(initItems, aDialogItems, kNumDialogItems); int anAskCode = g_StartupInfo.ShowDialog(kXSize, kYSize, NULL, aDialogItems, kNumDialogItems); const int kButtonStartPos = kNumDialogItems - 6; diff --git a/CPP/7zip/UI/Far/OverwriteDialog.h b/CPP/7zip/UI/Far/OverwriteDialog.h index 4715e53f..a0842e78 100755 --- a/CPP/7zip/UI/Far/OverwriteDialog.h +++ b/CPP/7zip/UI/Far/OverwriteDialog.h @@ -4,6 +4,7 @@ #define OVERWRITEDIALOG_H #include "Common/MyString.h" +#include "Common/Types.h" namespace NOverwriteDialog { @@ -11,10 +12,11 @@ struct CFileInfo { bool SizeIsDefined; bool TimeIsDefined; - UINT64 Size; + UInt64 Size; FILETIME Time; - CSysString Name; + UString Name; }; + namespace NResult { enum EEnum @@ -24,10 +26,11 @@ namespace NResult kNo, kNoToAll, kAutoRename, - kCancel, + kCancel }; } -NResult::EEnum Execute(const CFileInfo &anOldFileInfo, const CFileInfo &aNewFileInfo); + +NResult::EEnum Execute(const CFileInfo &oldFileInfo, const CFileInfo &newFileInfo); } diff --git a/CPP/7zip/UI/Far/Plugin.cpp b/CPP/7zip/UI/Far/Plugin.cpp index bc70278b..97627517 100755 --- a/CPP/7zip/UI/Far/Plugin.cpp +++ b/CPP/7zip/UI/Far/Plugin.cpp @@ -72,7 +72,7 @@ void CPlugin::ReadPluginPanelItem(PluginPanelItem &panelItem, UInt32 itemIndex) if (prop.vt != VT_BSTR) throw 272340; - CSysString oemString = UnicodeStringToMultiByte(prop.bstrVal, CP_OEMCP); + AString oemString = UnicodeStringToMultiByte(prop.bstrVal, CP_OEMCP); if (oemString == "..") oemString = kDotsReplaceString; @@ -133,9 +133,9 @@ void CPlugin::ReadPluginPanelItem(PluginPanelItem &panelItem, UInt32 itemIndex) panelItem.CustomColumnData = NULL; panelItem.CustomColumnNumber = 0; + panelItem.CRC32 = 0; panelItem.Reserved[0] = 0; panelItem.Reserved[1] = 0; - panelItem.Reserved[2] = 0; } int CPlugin::GetFindData(PluginPanelItem **panelItems, int *itemsNumber, int opMode) @@ -466,7 +466,7 @@ static AString PropToString(const NCOM::CPropVariant &prop, PROPID propID) AString s; if (prop.vt == VT_BSTR) - s = GetSystemString(prop.bstrVal, CP_OEMCP); + s = UnicodeStringToMultiByte(prop.bstrVal, CP_OEMCP); else if (prop.vt == VT_BOOL) { int messageID = VARIANT_BOOLToBool(prop.boolVal) ? @@ -733,7 +733,7 @@ HRESULT CPlugin::ShowAttributesWindow() if (strcmp(pluginPanelItem.FindData.cFileName, "..") == 0 && NFile::NFind::NAttributes::IsDir(pluginPanelItem.FindData.dwFileAttributes)) return S_FALSE; - int itemIndex = pluginPanelItem.UserData; + int itemIndex = (int)pluginPanelItem.UserData; CObjectVector<CArchiveItemProperty> properties; UInt32 numProps; @@ -781,7 +781,7 @@ HRESULT CPlugin::ShowAttributesWindow() NCOM::CPropVariant prop; RINOK(_folder->GetProperty(itemIndex, property.ID, &prop)); - CSysString s = PropToString(prop, property.ID); + AString s = PropToString(prop, property.ID); values.Add(s); { diff --git a/CPP/7zip/UI/Far/PluginDelete.cpp b/CPP/7zip/UI/Far/PluginDelete.cpp index 7d6f0314..182fbfb0 100755 --- a/CPP/7zip/UI/Far/PluginDelete.cpp +++ b/CPP/7zip/UI/Far/PluginDelete.cpp @@ -82,8 +82,8 @@ int CPlugin::DeleteFiles(PluginPanelItem *panelItems, int numItems, int opMode) CRecordVector<UINT32> indices; indices.Reserve(numItems); int i; - for(i = 0; i < numItems; i++) - indices.Add(panelItems[i].UserData); + for (i = 0; i < numItems; i++) + indices.Add((UINT32)panelItems[i].UserData); //////////////////////////// // Save _folder; @@ -93,7 +93,7 @@ int CPlugin::DeleteFiles(PluginPanelItem *panelItems, int numItems, int opMode) CMyComPtr<IOutFolderArchive> outArchive; HRESULT result = m_ArchiveHandler.QueryInterface(IID_IOutFolderArchive, &outArchive); - if(result != S_OK) + if (result != S_OK) { g_StartupInfo.ShowMessage(NMessageID::kUpdateNotSupportedForThisArchive); return FALSE; @@ -151,11 +151,11 @@ int CPlugin::DeleteFiles(PluginPanelItem *panelItems, int numItems, int opMode) { CMyComPtr<IFolderFolder> newFolder; _folder->BindToFolder(pathVector[i], &newFolder); - if(!newFolder ) + if (!newFolder) break; _folder = newFolder; } GetCurrentDir(); - return(TRUE); + return TRUE; } diff --git a/CPP/7zip/UI/Far/PluginRead.cpp b/CPP/7zip/UI/Far/PluginRead.cpp index 45f575fb..965030ea 100755 --- a/CPP/7zip/UI/Far/PluginRead.cpp +++ b/CPP/7zip/UI/Far/PluginRead.cpp @@ -76,23 +76,25 @@ HRESULT CPlugin::ExtractFiles( } NFileOperationReturnCode::EEnum CPlugin::GetFiles(struct PluginPanelItem *panelItems, - int itemsNumber, int move, char *_aDestPath, int opMode) + int itemsNumber, int move, char *destPath, int opMode) { return GetFilesReal(panelItems, itemsNumber, move, - _aDestPath, opMode, (opMode & OPM_SILENT) == 0); + destPath, opMode, (opMode & OPM_SILENT) == 0); } NFileOperationReturnCode::EEnum CPlugin::GetFilesReal(struct PluginPanelItem *panelItems, - int itemsNumber, int move, const char *_aDestPath, int opMode, bool showBox) + int itemsNumber, int move, const char *destPathLoc, int opMode, bool showBox) { - if(move != 0) + if (move != 0) { g_StartupInfo.ShowMessage(NMessageID::kMoveIsNotSupported); return NFileOperationReturnCode::kError; } - CSysString destPath = _aDestPath; - NFile::NName::NormalizeDirPathPrefix(destPath); + AString destPath = destPathLoc; + UString destPathU = GetUnicodeString(destPath, CP_OEMCP); + NFile::NName::NormalizeDirPathPrefix(destPathU); + destPath = UnicodeStringToMultiByte(destPathU, CP_OEMCP); bool extractSelectedFiles = true; @@ -185,17 +187,22 @@ NFileOperationReturnCode::EEnum CPlugin::GetFilesReal(struct PluginPanelItem *pa if (askCode != kOkButtonIndex) return NFileOperationReturnCode::kInterruptedByUser; destPath = dialogItems[kPathIndex].Data; - destPath.Trim(); - if (destPath.IsEmpty()) + destPathU = GetUnicodeString(destPath, CP_OEMCP); + destPathU.Trim(); + if (destPathU.IsEmpty()) { - if(!NFile::NDirectory::MyGetCurrentDirectory(destPath)) + #ifdef UNDER_CE + destPathU = L"\\"; + #else + if (!NFile::NDirectory::MyGetCurrentDirectory(destPathU)) throw 318016; - NFile::NName::NormalizeDirPathPrefix(destPath); + NFile::NName::NormalizeDirPathPrefix(destPathU); + #endif break; } else { - if(destPath[destPath.Length() - 1] == kDirDelimiter) + if (destPathU.Back() == kDirDelimiter) break; } g_StartupInfo.ShowMessage("You must specify directory path"); @@ -244,7 +251,7 @@ NFileOperationReturnCode::EEnum CPlugin::GetFilesReal(struct PluginPanelItem *pa passwordIsDefined = !password.IsEmpty(); } - NFile::NDirectory::CreateComplexDirectory(destPath); + NFile::NDirectory::CreateComplexDirectory(destPathU); /* vector<int> realIndices; @@ -254,11 +261,11 @@ NFileOperationReturnCode::EEnum CPlugin::GetFilesReal(struct PluginPanelItem *pa CRecordVector<UINT32> indices; indices.Reserve(itemsNumber); for (int i = 0; i < itemsNumber; i++) - indices.Add(panelItems[i].UserData); + indices.Add((UINT32)panelItems[i].UserData); HRESULT result = ExtractFiles(decompressAllItems, &indices.Front(), itemsNumber, !showBox, extractionInfo.PathMode, extractionInfo.OverwriteMode, - MultiByteToUnicodeString(destPath, CP_OEMCP), + destPathU, passwordIsDefined, password); // HRESULT result = ExtractFiles(decompressAllItems, realIndices, !showBox, // extractionInfo, destPath, passwordIsDefined, password); @@ -270,9 +277,9 @@ NFileOperationReturnCode::EEnum CPlugin::GetFilesReal(struct PluginPanelItem *pa return NFileOperationReturnCode::kError; } - // if(move != 0) + // if (move != 0) // { - // if(DeleteFiles(panelItems, itemsNumber, opMode) == FALSE) + // if (DeleteFiles(panelItems, itemsNumber, opMode) == FALSE) // return NFileOperationReturnCode::kError; // } return NFileOperationReturnCode::kSuccess; diff --git a/CPP/7zip/UI/Far/PluginWrite.cpp b/CPP/7zip/UI/Far/PluginWrite.cpp index 48b7d98e..ca515c42 100755 --- a/CPP/7zip/UI/Far/PluginWrite.cpp +++ b/CPP/7zip/UI/Far/PluginWrite.cpp @@ -412,16 +412,17 @@ HRESULT CompressFiles(const CObjectVector<PluginPanelItem> &pluginPanelItems) for(i = 0; i < pluginPanelItems.Size(); i++) { const PluginPanelItem &panelItem = pluginPanelItems[i]; - CSysString fullName; + UString fullName; if (strcmp(panelItem.FindData.cFileName, "..") == 0 && NFind::NAttributes::IsDir(panelItem.FindData.dwFileAttributes)) return E_FAIL; if (strcmp(panelItem.FindData.cFileName, ".") == 0 && NFind::NAttributes::IsDir(panelItem.FindData.dwFileAttributes)) return E_FAIL; - if (!MyGetFullPathName(panelItem.FindData.cFileName, fullName)) + UString fileNameUnicode = MultiByteToUnicodeString(panelItem.FindData.cFileName, CP_OEMCP); + if (!MyGetFullPathName(fileNameUnicode, fullName)) return E_FAIL; - fileNames.Add(MultiByteToUnicodeString(fullName, CP_OEMCP)); + fileNames.Add(fullName); } NCompression::CInfo compressionInfo; @@ -496,7 +497,7 @@ HRESULT CompressFiles(const CObjectVector<PluginPanelItem> &pluginPanelItems) const CArcInfoEx &arcInfo = codecs->Formats[archiverIndex]; char updateAddToArchiveString[512]; - const AString s = GetSystemString(arcInfo.Name, CP_OEMCP); + const AString s = UnicodeStringToMultiByte(arcInfo.Name, CP_OEMCP); sprintf(updateAddToArchiveString, g_StartupInfo.GetMsgString(NMessageID::kUpdateAddToArchive), (const char *)s); @@ -777,4 +778,3 @@ HRESULT CompressFiles(const CObjectVector<PluginPanelItem> &pluginPanelItems) return S_OK; } - diff --git a/CPP/7zip/UI/Far/makefile b/CPP/7zip/UI/Far/makefile index 076818e4..0d6f8d68 100755 --- a/CPP/7zip/UI/Far/makefile +++ b/CPP/7zip/UI/Far/makefile @@ -1,11 +1,13 @@ PROG = 7-ZipFar.dll DEF_FILE = Far.def CFLAGS = $(CFLAGS) -I ../../../ \ - -DWIN_LONG_PATH \ -DEXTERNAL_CODECS +!IFNDEF UNDER_CE +CFLAGS = $(CFLAGS) -DWIN_LONG_PATH +!ENDIF + FAR_OBJS = \ - $O\CLSIDConst.obj \ $O\ExtractEngine.obj \ $O\FarUtils.obj \ $O\Main.obj \ diff --git a/CPP/7zip/UI/FileManager/AppState.h b/CPP/7zip/UI/FileManager/AppState.h index 4f8b7bbe..374cf04f 100755 --- a/CPP/7zip/UI/FileManager/AppState.h +++ b/CPP/7zip/UI/FileManager/AppState.h @@ -111,5 +111,4 @@ struct CAppState } }; - -#endif
\ No newline at end of file +#endif diff --git a/CPP/7zip/UI/FileManager/FM.cpp b/CPP/7zip/UI/FileManager/FM.cpp index 639a9b23..f3b48704 100755 --- a/CPP/7zip/UI/FileManager/FM.cpp +++ b/CPP/7zip/UI/FileManager/FM.cpp @@ -384,7 +384,7 @@ static const int kNumSwitches = 1; namespace NKey { enum Enum { - kOpenArachive = 0, + kOpenArachive = 0 }; } diff --git a/CPP/7zip/UI/FileManager/FileFolderPluginOpen.cpp b/CPP/7zip/UI/FileManager/FileFolderPluginOpen.cpp index 25aec359..08f15c18 100755 --- a/CPP/7zip/UI/FileManager/FileFolderPluginOpen.cpp +++ b/CPP/7zip/UI/FileManager/FileFolderPluginOpen.cpp @@ -163,4 +163,4 @@ HRESULT OpenFileFolderPlugin( return t.Result; } return S_FALSE; -}
\ No newline at end of file +} diff --git a/CPP/7zip/UI/FileManager/Panel.cpp b/CPP/7zip/UI/FileManager/Panel.cpp index 34f77861..27aa7a54 100755 --- a/CPP/7zip/UI/FileManager/Panel.cpp +++ b/CPP/7zip/UI/FileManager/Panel.cpp @@ -920,7 +920,7 @@ HRESULT CThreadTest::ProcessVirt() OkMessage = s; } return S_OK; -}; +} /* static void AddSizePair(UINT resourceID, UInt32 langID, UInt64 value, UString &s) diff --git a/CPP/7zip/UI/FileManager/PanelItemOpen.cpp b/CPP/7zip/UI/FileManager/PanelItemOpen.cpp index 8dcc60d5..29c99bfd 100755 --- a/CPP/7zip/UI/FileManager/PanelItemOpen.cpp +++ b/CPP/7zip/UI/FileManager/PanelItemOpen.cpp @@ -440,7 +440,7 @@ HRESULT CThreadCopyFrom::ProcessVirt() fileNames.Add(Name); fileNamePointers.Add(fileNames[0]); return FolderOperations->CopyFrom(PathPrefix, &fileNamePointers.Front(), fileNamePointers.Size(), UpdateCallback); -}; +} HRESULT CPanel::OnOpenItemChanged(const UString &folderPath, const UString &itemName, bool usePassword, const UString &password) diff --git a/CPP/7zip/UI/FileManager/PanelItems.cpp b/CPP/7zip/UI/FileManager/PanelItems.cpp index 05b540b6..90d61b86 100755 --- a/CPP/7zip/UI/FileManager/PanelItems.cpp +++ b/CPP/7zip/UI/FileManager/PanelItems.cpp @@ -166,7 +166,7 @@ void CPanel::InsertColumn(int index) column.fmt = GetColumnAlign(prop.ID, prop.Type); column.iOrder = prop.Order; column.iSubItem = index; - column.pszText = (wchar_t *)(const wchar_t *)prop.Name; + column.pszText = const_cast<wchar_t *>((const wchar_t *)prop.Name); _listView.InsertColumn(index, &column); } @@ -337,7 +337,7 @@ HRESULT CPanel::RefreshListCtrl(const UString &focusedName, int focusedPos, bool int subItem = 0; item.iSubItem = subItem++; item.lParam = kParentIndex; - item.pszText = (wchar_t *)(const wchar_t *)itemName; + item.pszText = const_cast<wchar_t *>((const wchar_t *)itemName); UInt32 attrib = FILE_ATTRIBUTE_DIRECTORY; item.iImage = _extToIconMap.GetIconIndex(attrib, itemName); if (item.iImage < 0) @@ -391,10 +391,10 @@ HRESULT CPanel::RefreshListCtrl(const UString &focusedName, int focusedPos, bool pos = posNew; while (itemName[++pos] == ' '); } - item.pszText = (wchar_t *)(const wchar_t *)correctedName; + item.pszText = const_cast<wchar_t *>((const wchar_t *)correctedName); } else - item.pszText = (wchar_t *)(const wchar_t *)itemName; + item.pszText = const_cast<wchar_t *>((const wchar_t *)itemName); NCOM::CPropVariant prop; RINOK(_folder->GetProperty(i, kpidAttrib, &prop)); diff --git a/CPP/7zip/UI/FileManager/PanelOperations.cpp b/CPP/7zip/UI/FileManager/PanelOperations.cpp index 579208d2..0c6d3122 100755 --- a/CPP/7zip/UI/FileManager/PanelOperations.cpp +++ b/CPP/7zip/UI/FileManager/PanelOperations.cpp @@ -50,7 +50,7 @@ public: HRESULT Result; - CThreadFolderOperations(EFolderOpType opType): OpType(opType), Result(E_FAIL) {}; + CThreadFolderOperations(EFolderOpType opType): OpType(opType), Result(E_FAIL) {} HRESULT DoOperation(CPanel &panel, const UString &progressTitle, const UString &titleError); }; @@ -72,7 +72,7 @@ HRESULT CThreadFolderOperations::ProcessVirt() Result = E_FAIL; } return Result; -}; +} HRESULT CThreadFolderOperations::DoOperation(CPanel &panel, const UString &progressTitle, const UString &titleError) diff --git a/CPP/7zip/UI/FileManager/ProgressDialog2.cpp b/CPP/7zip/UI/FileManager/ProgressDialog2.cpp index 313b6181..3d878a61 100755 --- a/CPP/7zip/UI/FileManager/ProgressDialog2.cpp +++ b/CPP/7zip/UI/FileManager/ProgressDialog2.cpp @@ -941,7 +941,7 @@ void CProgressDialog::ProcessWasFinished() PostMessage(kCloseMessage); else _needClose = true; -}; +} HRESULT CProgressThreadVirt::Create(const UString &title, HWND parentWindow) diff --git a/CPP/7zip/UI/FileManager/RootFolder.cpp b/CPP/7zip/UI/FileManager/RootFolder.cpp index 1f4886d2..0715a8be 100755 --- a/CPP/7zip/UI/FileManager/RootFolder.cpp +++ b/CPP/7zip/UI/FileManager/RootFolder.cpp @@ -72,7 +72,7 @@ void CRootFolder::Init() _names[ROOT_INDEX_VOLUMES] = kVolPrefix; _iconIndices[ROOT_INDEX_VOLUMES] = GetIconIndexForCSIDL(CSIDL_DRIVES); #endif -}; +} STDMETHODIMP CRootFolder::LoadItems() { diff --git a/CPP/7zip/UI/GUI/CompressDialog.cpp b/CPP/7zip/UI/GUI/CompressDialog.cpp index 25c20c29..ea9d9c2c 100755 --- a/CPP/7zip/UI/GUI/CompressDialog.cpp +++ b/CPP/7zip/UI/GUI/CompressDialog.cpp @@ -115,7 +115,7 @@ enum EMethodID kBZip2, kDeflate, kDeflate64, - kPPMdZip, + kPPMdZip }; static const LPCWSTR kMethodsNames[] = @@ -244,7 +244,7 @@ static bool IsMethodSupportedBySfx(int methodID) if (methodID == g_7zSfxMethods[i]) return true; return false; -}; +} static UInt64 GetMaxRamSizeForProgram() { diff --git a/CPP/7zip/UI/GUI/CompressDialog.h b/CPP/7zip/UI/GUI/CompressDialog.h index 19c75875..86f7b173 100755 --- a/CPP/7zip/UI/GUI/CompressDialog.h +++ b/CPP/7zip/UI/GUI/CompressDialog.h @@ -22,7 +22,7 @@ namespace NCompressDialog kAdd, kUpdate, kFresh, - kSynchronize, + kSynchronize }; } struct CInfo diff --git a/CPP/7zip/UI/GUI/ExtractGUI.cpp b/CPP/7zip/UI/GUI/ExtractGUI.cpp index 54ffd51c..a976833c 100755 --- a/CPP/7zip/UI/GUI/ExtractGUI.cpp +++ b/CPP/7zip/UI/GUI/ExtractGUI.cpp @@ -106,7 +106,7 @@ HRESULT CThreadExtracting::ProcessVirt() } #endif return res; -}; +} HRESULT ExtractGUI( CCodecs *codecs, diff --git a/CPP/7zip/UI/GUI/UpdateCallbackGUI.cpp b/CPP/7zip/UI/GUI/UpdateCallbackGUI.cpp index 862c96a1..8ec01867 100755 --- a/CPP/7zip/UI/GUI/UpdateCallbackGUI.cpp +++ b/CPP/7zip/UI/GUI/UpdateCallbackGUI.cpp @@ -172,7 +172,7 @@ HRESULT CUpdateCallbackGUI::CloseProgress() { ProgressDialog->MyClose(); return S_OK; -}; +} */ diff --git a/CPP/7zip/UI/GUI/UpdateGUI.cpp b/CPP/7zip/UI/GUI/UpdateGUI.cpp index ed6cae54..7ee74fc8 100755 --- a/CPP/7zip/UI/GUI/UpdateGUI.cpp +++ b/CPP/7zip/UI/GUI/UpdateGUI.cpp @@ -57,7 +57,7 @@ HRESULT CThreadUpdating::ProcessVirt() if (ei.SystemError != S_OK && ei.SystemError != E_FAIL && ei.SystemError != E_ABORT) return ei.SystemError; return res; -}; +} static void AddProp(CObjectVector<CProperty> &properties, const UString &name, const UString &value) { diff --git a/CPP/7zip/UI/makefile b/CPP/7zip/UI/makefile index d6de40a8..1b0cdbe1 100755 --- a/CPP/7zip/UI/makefile +++ b/CPP/7zip/UI/makefile @@ -2,6 +2,7 @@ DIRS = \ Client7z\~ \ Console\~ \ Explorer\~ \ + Far\~ \ FileManager\~ \ GUI\~ \ diff --git a/CPP/Common/ComTry.h b/CPP/Common/ComTry.h index 5153362f..fb4ef045 100755 --- a/CPP/Common/ComTry.h +++ b/CPP/Common/ComTry.h @@ -10,8 +10,8 @@ #define COM_TRY_BEGIN try { #define COM_TRY_END } catch(...) { return E_OUTOFMEMORY; } - // catch(const CNewException &) { return E_OUTOFMEMORY; }\ - // catch(const CSystemException &e) { return e.ErrorCode; }\ + // catch(const CNewException &) { return E_OUTOFMEMORY; } + // catch(const CSystemException &e) { return e.ErrorCode; } // catch(...) { return E_FAIL; } #endif diff --git a/CPP/Common/CommandLineParser.h b/CPP/Common/CommandLineParser.h index 6c7226a1..c57da9c4 100755 --- a/CPP/Common/CommandLineParser.h +++ b/CPP/Common/CommandLineParser.h @@ -59,7 +59,7 @@ public: struct CCommandForm { - wchar_t *IDString; + const wchar_t *IDString; bool PostStringMode; }; diff --git a/CPP/Common/MyGuidDef.h b/CPP/Common/MyGuidDef.h index 337884f6..3c52cc07 100755 --- a/CPP/Common/MyGuidDef.h +++ b/CPP/Common/MyGuidDef.h @@ -38,7 +38,7 @@ inline int operator!=(REFGUID g1, REFGUID g2) { return !(g1 == g2); } #define MY_EXTERN_C extern #endif -#endif // GUID_DEFINED +#endif #ifdef DEFINE_GUID diff --git a/CPP/Common/MyVector.h b/CPP/Common/MyVector.h index 079e8ae4..28b7e3c8 100755 --- a/CPP/Common/MyVector.h +++ b/CPP/Common/MyVector.h @@ -166,7 +166,7 @@ class CObjectVector: public CPointerVector public: CObjectVector() {}; ~CObjectVector() { Clear(); }; - CObjectVector(const CObjectVector &v) { *this = v; } + CObjectVector(const CObjectVector &v): CPointerVector() { *this = v; } CObjectVector& operator=(const CObjectVector &v) { Clear(); diff --git a/CPP/Windows/COM.cpp b/CPP/Windows/COM.cpp index 2f9fdcda..a746de12 100755 --- a/CPP/Windows/COM.cpp +++ b/CPP/Windows/COM.cpp @@ -34,4 +34,4 @@ HRESULT StringToGUIDA(const char *string, GUID &classID) return StringToGUIDW(MultiByteToUnicodeString(string), classID); } -}}
\ No newline at end of file +}} diff --git a/CPP/Windows/COM.h b/CPP/Windows/COM.h index cf003d59..506bbbc6 100755 --- a/CPP/Windows/COM.h +++ b/CPP/Windows/COM.h @@ -53,7 +53,7 @@ AString GUIDToStringA(REFGUID guid); #define GUIDToString GUIDToStringW #else #define GUIDToString GUIDToStringA -#endif // !UNICODE +#endif HRESULT StringToGUIDW(const wchar_t *string, GUID &classID); HRESULT StringToGUIDA(const char *string, GUID &classID); @@ -61,7 +61,7 @@ HRESULT StringToGUIDA(const char *string, GUID &classID); #define StringToGUID StringToGUIDW #else #define StringToGUID StringToGUIDA -#endif // !UNICODE +#endif }} diff --git a/CPP/Windows/Console.cpp b/CPP/Windows/Console.cpp index 1dffc377..7773fee2 100755 --- a/CPP/Windows/Console.cpp +++ b/CPP/Windows/Console.cpp @@ -7,4 +7,4 @@ namespace NWindows{ namespace NConsole{ -}}
\ No newline at end of file +}} diff --git a/CPP/Windows/Console.h b/CPP/Windows/Console.h index b4e6d35b..99ae90f1 100755 --- a/CPP/Windows/Console.h +++ b/CPP/Windows/Console.h @@ -49,4 +49,4 @@ public: }} -#endif
\ No newline at end of file +#endif diff --git a/CPP/Windows/Control/CommandBar.h b/CPP/Windows/Control/CommandBar.h index 4cbe07b6..387c5e2d 100755 --- a/CPP/Windows/Control/CommandBar.h +++ b/CPP/Windows/Control/CommandBar.h @@ -45,4 +45,4 @@ public: #endif -#endif
\ No newline at end of file +#endif diff --git a/CPP/Windows/Control/Edit.h b/CPP/Windows/Control/Edit.h index d1af3644..c4bf5704 100755 --- a/CPP/Windows/Control/Edit.h +++ b/CPP/Windows/Control/Edit.h @@ -4,7 +4,6 @@ #define __WINDOWS_CONTROL_EDIT_H #include "Windows/Window.h" -#include "Windows/Defs.h" namespace NWindows { namespace NControl { @@ -12,10 +11,9 @@ namespace NControl { class CEdit: public CWindow { public: - void SetPasswordChar(WPARAM c) - { SendMessage(EM_SETPASSWORDCHAR, c); } + void SetPasswordChar(WPARAM c) { SendMessage(EM_SETPASSWORDCHAR, c); } }; }} -#endif
\ No newline at end of file +#endif diff --git a/CPP/Windows/Control/ImageList.h b/CPP/Windows/Control/ImageList.h index 791c96fd..127cd1ed 100755 --- a/CPP/Windows/Control/ImageList.h +++ b/CPP/Windows/Control/ImageList.h @@ -83,4 +83,3 @@ public: }} #endif -
\ No newline at end of file diff --git a/CPP/Windows/Control/ReBar.h b/CPP/Windows/Control/ReBar.h index ec27f0ed..8e11c139 100755 --- a/CPP/Windows/Control/ReBar.h +++ b/CPP/Windows/Control/ReBar.h @@ -32,4 +32,4 @@ public: }} -#endif
\ No newline at end of file +#endif diff --git a/CPP/Windows/Control/StatusBar.h b/CPP/Windows/Control/StatusBar.h index e8018a56..8766188b 100755 --- a/CPP/Windows/Control/StatusBar.h +++ b/CPP/Windows/Control/StatusBar.h @@ -40,4 +40,4 @@ public: }} -#endif
\ No newline at end of file +#endif diff --git a/CPP/Windows/Control/Trackbar.h b/CPP/Windows/Control/Trackbar.h index 64120f98..42dc4e40 100755 --- a/CPP/Windows/Control/Trackbar.h +++ b/CPP/Windows/Control/Trackbar.h @@ -25,4 +25,4 @@ public: }} -#endif
\ No newline at end of file +#endif diff --git a/CPP/Windows/Control/Window2.h b/CPP/Windows/Control/Window2.h index b016a13d..2af031b8 100755 --- a/CPP/Windows/Control/Window2.h +++ b/CPP/Windows/Control/Window2.h @@ -55,4 +55,4 @@ public: }} -#endif
\ No newline at end of file +#endif diff --git a/CPP/Windows/FileMapping.cpp b/CPP/Windows/FileMapping.cpp index d884afb1..55048fdb 100755 --- a/CPP/Windows/FileMapping.cpp +++ b/CPP/Windows/FileMapping.cpp @@ -9,6 +9,4 @@ namespace NFile { namespace NMapping { - - -}}}
\ No newline at end of file +}}} diff --git a/CPP/Windows/Process.cpp b/CPP/Windows/Process.cpp index d600abe0..9bcee7d5 100755 --- a/CPP/Windows/Process.cpp +++ b/CPP/Windows/Process.cpp @@ -8,7 +8,7 @@ #ifndef _UNICODE extern bool g_IsNT; -#endif _UNICODE +#endif namespace NWindows { diff --git a/CPP/Windows/ProcessMessages.cpp b/CPP/Windows/ProcessMessages.cpp index a2a9247c..0f48aee2 100755 --- a/CPP/Windows/ProcessMessages.cpp +++ b/CPP/Windows/ProcessMessages.cpp @@ -19,4 +19,4 @@ void ProcessMessages(HWND window) } } -}
\ No newline at end of file +} diff --git a/CPP/Windows/PropVariant.cpp b/CPP/Windows/PropVariant.cpp index b95bd242..3675778d 100755 --- a/CPP/Windows/PropVariant.cpp +++ b/CPP/Windows/PropVariant.cpp @@ -168,7 +168,7 @@ HRESULT CPropVariant::Copy(const PROPVARIANT* pSrc) memmove((PROPVARIANT*)this, pSrc, sizeof(PROPVARIANT)); return S_OK; } - return ::VariantCopy((tagVARIANT *)this, (tagVARIANT *)(pSrc)); + return ::VariantCopy((tagVARIANT *)this, (tagVARIANT *)const_cast<PROPVARIANT *>(pSrc)); } diff --git a/DOC/7zFormat.txt b/DOC/7zFormat.txt index a82c12e5..55b52b1b 100755 --- a/DOC/7zFormat.txt +++ b/DOC/7zFormat.txt @@ -399,7 +399,7 @@ FilesInfo UINT64 DataIndex [] for(Definded Items) - UINT32 Time + UINT64 Time [] kNames: (0x11) diff --git a/DOC/7zip.inf b/DOC/7zip.inf index 442eff92..400f7f96 100755 --- a/DOC/7zip.inf +++ b/DOC/7zip.inf @@ -10,8 +10,8 @@ AppName = "7-Zip" InstallDir = %CE1%\%AppName% [Strings] -AppVer = "9.16" -AppDate = "2010-09-07" +AppVer = "9.17" +AppDate = "2010-10-04" [CEDevice] ; ProcessorType = 2577 ; ARM diff --git a/DOC/7zip.nsi b/DOC/7zip.nsi index 8a23d65d..54ed3424 100755 --- a/DOC/7zip.nsi +++ b/DOC/7zip.nsi @@ -2,7 +2,7 @@ ;Defines !define VERSION_MAJOR 9 -!define VERSION_MINOR 16 +!define VERSION_MINOR 17 !define VERSION_POSTFIX_FULL " beta" !ifdef WIN64 !ifdef IA64 diff --git a/DOC/7zip.wxs b/DOC/7zip.wxs index ed7c05d3..83465d43 100755 --- a/DOC/7zip.wxs +++ b/DOC/7zip.wxs @@ -1,7 +1,7 @@ <?xml version="1.0"?> <?define VerMajor = "9" ?> -<?define VerMinor = "16" ?> +<?define VerMinor = "17" ?> <?define VerBuild = "00" ?> <?define MmVer = "$(var.VerMajor).$(var.VerMinor)" ?> <?define MmHex = "0$(var.VerMajor)$(var.VerMinor)" ?> diff --git a/DOC/history.txt b/DOC/history.txt index 0d5e4a90..aa383647 100755 --- a/DOC/history.txt +++ b/DOC/history.txt @@ -1,6 +1,14 @@ Sources history of the 7-Zip ---------------------------- +9.17 2010-10-04 +------------------------- +- IStream.h::IOutStream:: + STDMETHOD(SetSize)(Int64 newSize) PURE; + was changed to + STDMETHOD(SetSize)(UInt64 newSize) PURE; + + 9.09 2009-12-12 ------------------------- - The bug was fixed: diff --git a/DOC/lzma.txt b/DOC/lzma.txt index 439bcf26..47369042 100755 --- a/DOC/lzma.txt +++ b/DOC/lzma.txt @@ -1,4 +1,4 @@ -LZMA SDK 9.16 +LZMA SDK 9.17 ------------- LZMA SDK provides the documentation, samples, header files, libraries, diff --git a/DOC/readme.txt b/DOC/readme.txt index ddcd23b9..a6d781ca 100755 --- a/DOC/readme.txt +++ b/DOC/readme.txt @@ -1,4 +1,4 @@ -7-Zip 9.16 Sources +7-Zip 9.17 Sources ------------------ 7-Zip is a file archiver for Windows. |