HRESULT CInArchive::Open(IInStream *inStream) { _stream = inStream; UInt64 pos; RINOK(_stream->Seek(0, STREAM_SEEK_CUR, &pos)); RINOK(_stream->Seek(0, STREAM_SEEK_END, &_archiveSize)); RINOK(_stream->Seek(pos, STREAM_SEEK_SET, &_position)); HRESULT res = S_FALSE; try { res = Open2(); } catch(...) { Clear(); res = S_FALSE; } _stream.Release(); return res; }
STDMETHODIMP CHandler::Open(IInStream *inStream, const UInt64 * /* maxCheckStartPosition */, IArchiveOpenCallback * /* openArchiveCallback */) { COM_TRY_BEGIN Close(); try { if (Open2(inStream) != S_OK) return S_FALSE; _inStream = inStream; } catch(...) { return S_FALSE; } return S_OK; COM_TRY_END }
HRESULT CInArchive::Open( const UInt64 *searchHeaderSizeLimit, CDatabaseEx &database) { return Open2(database.Stream, searchHeaderSizeLimit, database); }