mirror of
https://github.com/Xevion/easy7zip.git
synced 2025-12-09 22:07:05 -06:00
9.38
This commit is contained in:
committed by
Kornel Lesiński
parent
7e021179cd
commit
0713a3ab80
@@ -14,31 +14,59 @@
|
||||
STREAM_INTERFACE(ISequentialInStream, 0x01)
|
||||
{
|
||||
STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize) PURE;
|
||||
|
||||
/*
|
||||
Out: if size != 0, return_value = S_OK and (*processedSize == 0),
|
||||
then there are no more bytes in stream.
|
||||
if (size > 0) && there are bytes in stream,
|
||||
this function must read at least 1 byte.
|
||||
This function is allowed to read less than number of remaining bytes in stream.
|
||||
You must call Read function in loop, if you need exact amount of data
|
||||
The requirement for caller: (processedSize != NULL).
|
||||
The callee can allow (processedSize == NULL) for compatibility reasons.
|
||||
|
||||
if (size == 0), this function returns S_OK and (*processedSize) is set to 0.
|
||||
|
||||
If seek pointer before Read() function call was changed to position past the
|
||||
end of stream, the Read() function returns S_OK and *processedSize is set to 0.
|
||||
if (size != 0)
|
||||
{
|
||||
Partial read is allowed: (*processedSize <= avail_size && *processedSize <= size),
|
||||
where (avail_size) is the size of remaining bytes in stream.
|
||||
If (avail_size != 0), this function must read at least 1 byte: (*processedSize > 0).
|
||||
You must call Read() in loop, if you need to read exact amount of data.
|
||||
}
|
||||
|
||||
If seek pointer before Read() call was changed to position past the end of stream:
|
||||
if (seek_pointer >= stream_size), this function returns S_OK and (*processedSize) is set to 0.
|
||||
|
||||
ERROR CASES:
|
||||
If the function returns error code, then (*processedSize) is size of
|
||||
data written to (data) buffer (it can be data before error or data with errors).
|
||||
The recommended way for callee to work with reading errors:
|
||||
1) write part of data before error to (data) buffer and return S_OK.
|
||||
2) return error code for further calls of Read().
|
||||
*/
|
||||
};
|
||||
|
||||
STREAM_INTERFACE(ISequentialOutStream, 0x02)
|
||||
{
|
||||
STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize) PURE;
|
||||
|
||||
/*
|
||||
if (size > 0) this function must write at least 1 byte.
|
||||
This function is allowed to write less than "size".
|
||||
You must call Write function in loop, if you need to write exact amount of data
|
||||
The requirement for caller: (processedSize != NULL).
|
||||
The callee can allow (processedSize == NULL) for compatibility reasons.
|
||||
|
||||
if (size != 0)
|
||||
{
|
||||
Partial write is allowed: (*processedSize <= size),
|
||||
but this function must write at least 1 byte: (*processedSize > 0).
|
||||
You must call Write() in loop, if you need to write exact amount of data.
|
||||
}
|
||||
|
||||
ERROR CASES:
|
||||
If the function returns error code, then (*processedSize) is size of
|
||||
data written from (data) buffer.
|
||||
*/
|
||||
};
|
||||
|
||||
|
||||
#ifdef __HRESULT_FROM_WIN32
|
||||
#define HRESULT_WIN32_ERROR_NEGATIVE_SEEK __HRESULT_FROM_WIN32(ERROR_NEGATIVE_SEEK)
|
||||
#else
|
||||
#define HRESULT_WIN32_ERROR_NEGATIVE_SEEK HRESULT_FROM_WIN32(ERROR_NEGATIVE_SEEK)
|
||||
#endif
|
||||
|
||||
/* Seek() Function
|
||||
If you seek before the beginning of the stream, Seek() function returns error code:
|
||||
|
||||
Reference in New Issue
Block a user