From 54490d51d5c6b0d794dcbad2d634d4c95fc25b6c Mon Sep 17 00:00:00 2001 From: Igor Pavlov Date: Mon, 15 Jun 2015 00:00:00 +0000 Subject: 15.05 --- CPP/7zip/Archive/ArchiveExports.cpp | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) (limited to 'CPP/7zip/Archive/ArchiveExports.cpp') diff --git a/CPP/7zip/Archive/ArchiveExports.cpp b/CPP/7zip/Archive/ArchiveExports.cpp index 0a520413..28e9946d 100644 --- a/CPP/7zip/Archive/ArchiveExports.cpp +++ b/CPP/7zip/Archive/ArchiveExports.cpp @@ -22,17 +22,19 @@ void RegisterArc(const CArcInfo *arcInfo) throw() const char *p = arcInfo->Name; if (p[0] == '7' && p[1] == 'z' && p[2] == 0) g_DefaultArcIndex = g_NumArcs; - g_Arcs[g_NumArcs] = arcInfo; - g_NumArcs++; + g_Arcs[g_NumArcs++] = arcInfo; } } DEFINE_GUID(CLSID_CArchiveHandler, -0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x00); + k_7zip_GUID_Data1, + k_7zip_GUID_Data2, + k_7zip_GUID_Data3_Common, + 0x10, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x00); #define CLS_ARC_ID_ITEM(cls) ((cls).Data4[5]) -static inline HRESULT SetPropString(const char *s, unsigned size, PROPVARIANT *value) +static inline HRESULT SetPropStrFromBin(const char *s, unsigned size, PROPVARIANT *value) { if ((value->bstrVal = ::SysAllocStringByteLen(s, size)) != 0) value->vt = VT_BSTR; @@ -41,18 +43,18 @@ static inline HRESULT SetPropString(const char *s, unsigned size, PROPVARIANT *v static inline HRESULT SetPropGUID(const GUID &guid, PROPVARIANT *value) { - return SetPropString((const char *)&guid, sizeof(GUID), value); + return SetPropStrFromBin((const char *)&guid, sizeof(guid), value); } -int FindFormatCalssId(const GUID *clsID) +int FindFormatCalssId(const GUID *clsid) { - GUID cls = *clsID; + GUID cls = *clsid; CLS_ARC_ID_ITEM(cls) = 0; if (cls != CLSID_CArchiveHandler) return -1; - Byte id = CLS_ARC_ID_ITEM(*clsID); + Byte id = CLS_ARC_ID_ITEM(*clsid); for (unsigned i = 0; i < g_NumArcs; i++) - if (g_Arcs[i]->ClassId == id) + if (g_Arcs[i]->Id == id) return (int)i; return -1; } @@ -101,7 +103,7 @@ STDAPI GetHandlerProperty2(UInt32 formatIndex, PROPID propID, PROPVARIANT *value case NArchive::NHandlerPropID::kClassID: { GUID clsId = CLSID_CArchiveHandler; - CLS_ARC_ID_ITEM(clsId) = arc.ClassId; + CLS_ARC_ID_ITEM(clsId) = arc.Id; return SetPropGUID(clsId, value); } case NArchive::NHandlerPropID::kExtension: if (arc.Ext) prop = arc.Ext; break; @@ -115,12 +117,12 @@ STDAPI GetHandlerProperty2(UInt32 formatIndex, PROPID propID, PROPVARIANT *value // case NArchive::NHandlerPropID::kVersion: prop = (UInt32)MY_VER_MIX; break; case NArchive::NHandlerPropID::kSignature: - if (!arc.IsMultiSignature()) - return SetPropString((const char *)arc.Signature, arc.SignatureSize, value); + if (arc.SignatureSize != 0 && !arc.IsMultiSignature()) + return SetPropStrFromBin((const char *)arc.Signature, arc.SignatureSize, value); break; case NArchive::NHandlerPropID::kMultiSignature: - if (arc.IsMultiSignature()) - return SetPropString((const char *)arc.Signature, arc.SignatureSize, value); + if (arc.SignatureSize != 0 && arc.IsMultiSignature()) + return SetPropStrFromBin((const char *)arc.Signature, arc.SignatureSize, value); break; } prop.Detach(value); -- cgit v1.2.3