mirror of
https://github.com/Xevion/easy7zip.git
synced 2025-12-10 06:07:07 -06:00
15.05
This commit is contained in:
committed by
Kornel Lesiński
parent
0713a3ab80
commit
54490d51d5
@@ -82,10 +82,22 @@ namespace NArchive
|
||||
kUnexpectedEnd,
|
||||
kDataAfterEnd,
|
||||
kIsNotArc,
|
||||
kHeadersError
|
||||
kHeadersError,
|
||||
kWrongPassword
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
namespace NEventIndexType
|
||||
{
|
||||
enum
|
||||
{
|
||||
kNoIndex = 0,
|
||||
kInArcIndex,
|
||||
kBlockIndex,
|
||||
kOutArcIndex
|
||||
};
|
||||
}
|
||||
|
||||
namespace NUpdate
|
||||
{
|
||||
@@ -110,17 +122,59 @@ ARCHIVE_INTERFACE(IArchiveOpenCallback, 0x10)
|
||||
};
|
||||
|
||||
/*
|
||||
IArchiveExtractCallback::GetStream
|
||||
Result:
|
||||
IArchiveExtractCallback::
|
||||
|
||||
7-Zip doesn't call IArchiveExtractCallback functions
|
||||
GetStream()
|
||||
PrepareOperation()
|
||||
SetOperationResult()
|
||||
from different threads simultaneously.
|
||||
But 7-Zip can call functions for IProgress or ICompressProgressInfo functions
|
||||
from another threads simultaneously with calls for IArchiveExtractCallback interface.
|
||||
|
||||
IArchiveExtractCallback::GetStream()
|
||||
UInt32 index - index of item in Archive
|
||||
Int32 askExtractMode (Extract::NAskMode)
|
||||
if (askMode != NExtract::NAskMode::kExtract)
|
||||
{
|
||||
then the callee can not real stream: (*inStream == NULL)
|
||||
}
|
||||
|
||||
Out:
|
||||
(*inStream == NULL) - for directories
|
||||
(*inStream == NULL) - if link (hard link or symbolic link) was created
|
||||
if (*inStream == NULL && askMode == NExtract::NAskMode::kExtract)
|
||||
{
|
||||
then the caller must skip extracting of that file.
|
||||
}
|
||||
|
||||
returns:
|
||||
S_OK : OK
|
||||
S_FALSE : data error (for decoders)
|
||||
|
||||
if (IProgress::SetTotal() was called)
|
||||
{
|
||||
IProgress::SetCompleted(completeValue) uses
|
||||
packSize - for some stream formats (xz, gz, bz2, lzma, z, ppmd).
|
||||
unpackSize - for another formats.
|
||||
}
|
||||
else
|
||||
{
|
||||
IProgress::SetCompleted(completeValue) uses packSize.
|
||||
}
|
||||
|
||||
SetOperationResult()
|
||||
7-Zip calls SetOperationResult at the end of extracting,
|
||||
so the callee can close the file, set attributes, timestamps and security information.
|
||||
|
||||
Int32 opRes (NExtract::NOperationResult)
|
||||
*/
|
||||
|
||||
#define INTERFACE_IArchiveExtractCallback(x) \
|
||||
INTERFACE_IProgress(x) \
|
||||
STDMETHOD(GetStream)(UInt32 index, ISequentialOutStream **outStream, Int32 askExtractMode) x; \
|
||||
STDMETHOD(PrepareOperation)(Int32 askExtractMode) x; \
|
||||
STDMETHOD(SetOperationResult)(Int32 resultEOperationResult) x; \
|
||||
STDMETHOD(SetOperationResult)(Int32 opRes) x; \
|
||||
|
||||
ARCHIVE_INTERFACE_SUB(IArchiveExtractCallback, IProgress, 0x20)
|
||||
{
|
||||
@@ -128,6 +182,25 @@ ARCHIVE_INTERFACE_SUB(IArchiveExtractCallback, IProgress, 0x20)
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*
|
||||
IArchiveExtractCallbackMessage can be requested from IArchiveExtractCallback object
|
||||
by Extract() or UpdateItems() functions to report about extracting errors
|
||||
ReportExtractResult()
|
||||
UInt32 indexType (NEventIndexType)
|
||||
UInt32 index
|
||||
Int32 opRes (NExtract::NOperationResult)
|
||||
*/
|
||||
|
||||
#define INTERFACE_IArchiveExtractCallbackMessage(x) \
|
||||
STDMETHOD(ReportExtractResult)(UInt32 indexType, UInt32 index, Int32 opRes) x; \
|
||||
|
||||
ARCHIVE_INTERFACE_SUB(IArchiveExtractCallbackMessage, IProgress, 0x21)
|
||||
{
|
||||
INTERFACE_IArchiveExtractCallbackMessage(PURE)
|
||||
};
|
||||
|
||||
|
||||
#define INTERFACE_IArchiveOpenVolumeCallback(x) \
|
||||
STDMETHOD(GetProperty)(PROPID propID, PROPVARIANT *value) x; \
|
||||
STDMETHOD(GetStream)(const wchar_t *name, IInStream **inStream) x; \
|
||||
@@ -183,9 +256,6 @@ Notes:
|
||||
Some IInArchive handlers will work incorrectly in that case.
|
||||
*/
|
||||
|
||||
/* MSVC allows the code where there is throw() in declaration of function,
|
||||
but there is no throw() in definition of function. */
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#define MY_NO_THROW_DECL_ONLY throw()
|
||||
#else
|
||||
@@ -202,7 +272,7 @@ Notes:
|
||||
STDMETHOD(GetNumberOfProperties)(UInt32 *numProps) MY_NO_THROW_DECL_ONLY x; \
|
||||
STDMETHOD(GetPropertyInfo)(UInt32 index, BSTR *name, PROPID *propID, VARTYPE *varType) MY_NO_THROW_DECL_ONLY x; \
|
||||
STDMETHOD(GetNumberOfArchiveProperties)(UInt32 *numProps) MY_NO_THROW_DECL_ONLY x; \
|
||||
STDMETHOD(GetArchivePropertyInfo)(UInt32 index, BSTR *name, PROPID *propID, VARTYPE *varType) MY_NO_THROW_DECL_ONLY x;
|
||||
STDMETHOD(GetArchivePropertyInfo)(UInt32 index, BSTR *name, PROPID *propID, VARTYPE *varType) MY_NO_THROW_DECL_ONLY x; \
|
||||
|
||||
ARCHIVE_INTERFACE(IInArchive, 0x60)
|
||||
{
|
||||
@@ -324,6 +394,8 @@ The order of calling for hard links:
|
||||
- GetStream()
|
||||
- GetProperty(kpidHardLink)
|
||||
|
||||
SetOperationResult()
|
||||
Int32 opRes (NExtract::NOperationResult::kOK)
|
||||
*/
|
||||
|
||||
#define INTERFACE_IArchiveUpdateCallback(x) \
|
||||
@@ -348,6 +420,40 @@ ARCHIVE_INTERFACE_SUB(IArchiveUpdateCallback2, IArchiveUpdateCallback, 0x82)
|
||||
INTERFACE_IArchiveUpdateCallback2(PURE);
|
||||
};
|
||||
|
||||
namespace NUpdateNotifyOp
|
||||
{
|
||||
enum
|
||||
{
|
||||
kAdd = 0,
|
||||
kUpdate,
|
||||
kAnalyze,
|
||||
kReplicate,
|
||||
kRepack,
|
||||
kSkip,
|
||||
kDelete,
|
||||
kHeader
|
||||
|
||||
// kNumDefined
|
||||
};
|
||||
};
|
||||
|
||||
/*
|
||||
IArchiveUpdateCallbackFile::ReportOperation
|
||||
UInt32 indexType (NEventIndexType)
|
||||
UInt32 index
|
||||
UInt32 notifyOp (NUpdateNotifyOp)
|
||||
*/
|
||||
|
||||
#define INTERFACE_IArchiveUpdateCallbackFile(x) \
|
||||
STDMETHOD(GetStream2)(UInt32 index, ISequentialInStream **inStream, UInt32 notifyOp) x; \
|
||||
STDMETHOD(ReportOperation)(UInt32 indexType, UInt32 index, UInt32 notifyOp) x; \
|
||||
|
||||
ARCHIVE_INTERFACE(IArchiveUpdateCallbackFile, 0x83)
|
||||
{
|
||||
INTERFACE_IArchiveUpdateCallbackFile(PURE);
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
UpdateItems()
|
||||
-------------
|
||||
@@ -382,7 +488,7 @@ ARCHIVE_INTERFACE(IOutArchive, 0xA0)
|
||||
|
||||
ARCHIVE_INTERFACE(ISetProperties, 0x03)
|
||||
{
|
||||
STDMETHOD(SetProperties)(const wchar_t **names, const PROPVARIANT *values, UInt32 numProps) PURE;
|
||||
STDMETHOD(SetProperties)(const wchar_t * const *names, const PROPVARIANT *values, UInt32 numProps) PURE;
|
||||
};
|
||||
|
||||
ARCHIVE_INTERFACE(IArchiveKeepModeForNextOpen, 0x04)
|
||||
|
||||
Reference in New Issue
Block a user