| Index: third_party/lzma/v4_65/files/CPP/7zip/Archive/Split/SplitHandler.cpp
|
| diff --git a/third_party/lzma/v4_65/files/CPP/7zip/Archive/Split/SplitHandler.cpp b/third_party/lzma/v4_65/files/CPP/7zip/Archive/Split/SplitHandler.cpp
|
| deleted file mode 100644
|
| index 61b7f4a72aa1153008aee48b7befde0399e0ffa3..0000000000000000000000000000000000000000
|
| --- a/third_party/lzma/v4_65/files/CPP/7zip/Archive/Split/SplitHandler.cpp
|
| +++ /dev/null
|
| @@ -1,357 +0,0 @@
|
| -// SplitHandler.cpp
|
| -
|
| -#include "StdAfx.h"
|
| -
|
| -#include "Common/ComTry.h"
|
| -#include "Common/Defs.h"
|
| -#include "Common/NewHandler.h"
|
| -#include "Common/StringConvert.h"
|
| -
|
| -#include "Windows/PropVariant.h"
|
| -#include "Windows/Time.h"
|
| -
|
| -#include "../../Common/ProgressUtils.h"
|
| -
|
| -#include "../../Compress/CopyCoder.h"
|
| -
|
| -#include "../Common/ItemNameUtils.h"
|
| -#include "../Common/MultiStream.h"
|
| -
|
| -#include "SplitHandler.h"
|
| -
|
| -using namespace NWindows;
|
| -using namespace NTime;
|
| -
|
| -namespace NArchive {
|
| -namespace NSplit {
|
| -
|
| -STATPROPSTG kProps[] =
|
| -{
|
| - { NULL, kpidPath, VT_BSTR},
|
| - { NULL, kpidSize, VT_UI8},
|
| - { NULL, kpidPackSize, VT_UI8},
|
| -};
|
| -
|
| -IMP_IInArchive_Props
|
| -IMP_IInArchive_ArcProps_NO
|
| -
|
| -class CSeqName
|
| -{
|
| -public:
|
| - UString _unchangedPart;
|
| - UString _changedPart;
|
| - bool _splitStyle;
|
| - UString GetNextName()
|
| - {
|
| - UString newName;
|
| - if (_splitStyle)
|
| - {
|
| - int i;
|
| - int numLetters = _changedPart.Length();
|
| - for (i = numLetters - 1; i >= 0; i--)
|
| - {
|
| - wchar_t c = _changedPart[i];
|
| - if (c == 'z')
|
| - {
|
| - c = 'a';
|
| - newName = c + newName;
|
| - continue;
|
| - }
|
| - else if (c == 'Z')
|
| - {
|
| - c = 'A';
|
| - newName = c + newName;
|
| - continue;
|
| - }
|
| - c++;
|
| - if ((c == 'z' || c == 'Z') && i == 0)
|
| - {
|
| - _unchangedPart += c;
|
| - wchar_t newChar = (c == 'z') ? L'a' : L'A';
|
| - newName.Empty();
|
| - numLetters++;
|
| - for (int k = 0; k < numLetters; k++)
|
| - newName += newChar;
|
| - break;
|
| - }
|
| - newName = c + newName;
|
| - i--;
|
| - for (; i >= 0; i--)
|
| - newName = _changedPart[i] + newName;
|
| - break;
|
| - }
|
| - }
|
| - else
|
| - {
|
| - int i;
|
| - int numLetters = _changedPart.Length();
|
| - for (i = numLetters - 1; i >= 0; i--)
|
| - {
|
| - wchar_t c = _changedPart[i];
|
| - if (c == L'9')
|
| - {
|
| - c = L'0';
|
| - newName = c + newName;
|
| - if (i == 0)
|
| - newName = UString(L'1') + newName;
|
| - continue;
|
| - }
|
| - c++;
|
| - newName = c + newName;
|
| - i--;
|
| - for (; i >= 0; i--)
|
| - newName = _changedPart[i] + newName;
|
| - break;
|
| - }
|
| - }
|
| - _changedPart = newName;
|
| - return _unchangedPart + _changedPart;
|
| - }
|
| -};
|
| -
|
| -STDMETHODIMP CHandler::Open(IInStream *stream,
|
| - const UInt64 * /* maxCheckStartPosition */,
|
| - IArchiveOpenCallback *openArchiveCallback)
|
| -{
|
| - COM_TRY_BEGIN
|
| - Close();
|
| - if (openArchiveCallback == 0)
|
| - return S_FALSE;
|
| - // try
|
| - {
|
| - CMyComPtr<IArchiveOpenVolumeCallback> openVolumeCallback;
|
| - CMyComPtr<IArchiveOpenCallback> openArchiveCallbackWrap = openArchiveCallback;
|
| - if (openArchiveCallbackWrap.QueryInterface(IID_IArchiveOpenVolumeCallback,
|
| - &openVolumeCallback) != S_OK)
|
| - return S_FALSE;
|
| -
|
| - {
|
| - NCOM::CPropVariant prop;
|
| - RINOK(openVolumeCallback->GetProperty(kpidName, &prop));
|
| - if (prop.vt != VT_BSTR)
|
| - return S_FALSE;
|
| - _name = prop.bstrVal;
|
| - }
|
| -
|
| - int dotPos = _name.ReverseFind('.');
|
| - UString prefix, ext;
|
| - if (dotPos >= 0)
|
| - {
|
| - prefix = _name.Left(dotPos + 1);
|
| - ext = _name.Mid(dotPos + 1);
|
| - }
|
| - else
|
| - ext = _name;
|
| - UString extBig = ext;
|
| - extBig.MakeUpper();
|
| -
|
| - CSeqName seqName;
|
| -
|
| - int numLetters = 2;
|
| - bool splitStyle = false;
|
| - if (extBig.Right(2) == L"AA")
|
| - {
|
| - splitStyle = true;
|
| - while (numLetters < extBig.Length())
|
| - {
|
| - if (extBig[extBig.Length() - numLetters - 1] != 'A')
|
| - break;
|
| - numLetters++;
|
| - }
|
| - }
|
| - else if (ext.Right(2) == L"01")
|
| - {
|
| - while (numLetters < extBig.Length())
|
| - {
|
| - if (extBig[extBig.Length() - numLetters - 1] != '0')
|
| - break;
|
| - numLetters++;
|
| - }
|
| - if (numLetters != ext.Length())
|
| - return S_FALSE;
|
| - }
|
| - else
|
| - return S_FALSE;
|
| -
|
| - _streams.Add(stream);
|
| -
|
| - seqName._unchangedPart = prefix + ext.Left(extBig.Length() - numLetters);
|
| - seqName._changedPart = ext.Right(numLetters);
|
| - seqName._splitStyle = splitStyle;
|
| -
|
| - if (prefix.Length() < 1)
|
| - _subName = L"file";
|
| - else
|
| - _subName = prefix.Left(prefix.Length() - 1);
|
| -
|
| - _totalSize = 0;
|
| - UInt64 size;
|
| - {
|
| - NCOM::CPropVariant prop;
|
| - RINOK(openVolumeCallback->GetProperty(kpidSize, &prop));
|
| - if (prop.vt != VT_UI8)
|
| - return E_INVALIDARG;
|
| - size = prop.uhVal.QuadPart;
|
| - }
|
| - _totalSize += size;
|
| - _sizes.Add(size);
|
| -
|
| - if (openArchiveCallback != NULL)
|
| - {
|
| - UInt64 numFiles = _streams.Size();
|
| - RINOK(openArchiveCallback->SetCompleted(&numFiles, NULL));
|
| - }
|
| -
|
| - for (;;)
|
| - {
|
| - UString fullName = seqName.GetNextName();
|
| - CMyComPtr<IInStream> nextStream;
|
| - HRESULT result = openVolumeCallback->GetStream(fullName, &nextStream);
|
| - if (result == S_FALSE)
|
| - break;
|
| - if (result != S_OK)
|
| - return result;
|
| - if (!stream)
|
| - break;
|
| - {
|
| - NCOM::CPropVariant prop;
|
| - RINOK(openVolumeCallback->GetProperty(kpidSize, &prop));
|
| - if (prop.vt != VT_UI8)
|
| - return E_INVALIDARG;
|
| - size = prop.uhVal.QuadPart;
|
| - }
|
| - _totalSize += size;
|
| - _sizes.Add(size);
|
| - _streams.Add(nextStream);
|
| - if (openArchiveCallback != NULL)
|
| - {
|
| - UInt64 numFiles = _streams.Size();
|
| - RINOK(openArchiveCallback->SetCompleted(&numFiles, NULL));
|
| - }
|
| - }
|
| - }
|
| - /*
|
| - catch(...)
|
| - {
|
| - return S_FALSE;
|
| - }
|
| - */
|
| - return S_OK;
|
| - COM_TRY_END
|
| -}
|
| -
|
| -STDMETHODIMP CHandler::Close()
|
| -{
|
| - _sizes.Clear();
|
| - _streams.Clear();
|
| - return S_OK;
|
| -}
|
| -
|
| -STDMETHODIMP CHandler::GetNumberOfItems(UInt32 *numItems)
|
| -{
|
| - *numItems = _streams.IsEmpty() ? 0 : 1;
|
| - return S_OK;
|
| -}
|
| -
|
| -STDMETHODIMP CHandler::GetProperty(UInt32 /* index */, PROPID propID, PROPVARIANT *value)
|
| -{
|
| - NWindows::NCOM::CPropVariant prop;
|
| - switch(propID)
|
| - {
|
| - case kpidPath:
|
| - prop = _subName;
|
| - break;
|
| - case kpidSize:
|
| - case kpidPackSize:
|
| - prop = _totalSize;
|
| - break;
|
| - }
|
| - prop.Detach(value);
|
| - return S_OK;
|
| -}
|
| -
|
| -STDMETHODIMP CHandler::Extract(const UInt32* indices, UInt32 numItems,
|
| - Int32 _aTestMode, IArchiveExtractCallback *_anExtractCallback)
|
| -{
|
| - COM_TRY_BEGIN
|
| -
|
| - if (numItems != UInt32(-1))
|
| - {
|
| - if (numItems != 1)
|
| - return E_INVALIDARG;
|
| - if (indices[0] != 0)
|
| - return E_INVALIDARG;
|
| - }
|
| - bool testMode = (_aTestMode != 0);
|
| - CMyComPtr<IArchiveExtractCallback> extractCallback = _anExtractCallback;
|
| - extractCallback->SetTotal(_totalSize);
|
| -
|
| - /*
|
| - CMyComPtr<IArchiveVolumeExtractCallback> volumeExtractCallback;
|
| - if (extractCallback.QueryInterface(&volumeExtractCallback) != S_OK)
|
| - return E_FAIL;
|
| - */
|
| -
|
| - UInt64 currentTotalSize = 0;
|
| - UInt64 currentItemSize;
|
| -
|
| - RINOK(extractCallback->SetCompleted(¤tTotalSize));
|
| - CMyComPtr<ISequentialOutStream> realOutStream;
|
| - Int32 askMode;
|
| - askMode = testMode ? NArchive::NExtract::NAskMode::kTest :
|
| - NArchive::NExtract::NAskMode::kExtract;
|
| - Int32 index = 0;
|
| - RINOK(extractCallback->GetStream(index, &realOutStream, askMode));
|
| -
|
| - RINOK(extractCallback->PrepareOperation(askMode));
|
| - if (testMode)
|
| - {
|
| - RINOK(extractCallback->SetOperationResult(NArchive::NExtract::NOperationResult::kOK));
|
| - return S_OK;
|
| - }
|
| -
|
| - if (!testMode && (!realOutStream))
|
| - return S_OK;
|
| -
|
| - NCompress::CCopyCoder *copyCoderSpec = new NCompress::CCopyCoder;
|
| - CMyComPtr<ICompressCoder> copyCoder = copyCoderSpec;
|
| -
|
| - CLocalProgress *lps = new CLocalProgress;
|
| - CMyComPtr<ICompressProgressInfo> progress = lps;
|
| - lps->Init(extractCallback, false);
|
| -
|
| - for (int i = 0; i < _streams.Size(); i++, currentTotalSize += currentItemSize)
|
| - {
|
| - lps->InSize = lps->OutSize = currentTotalSize;
|
| - RINOK(lps->SetCur());
|
| - IInStream *inStream = _streams[i];
|
| - RINOK(inStream->Seek(0, STREAM_SEEK_SET, NULL));
|
| - RINOK(copyCoder->Code(inStream, realOutStream, NULL, NULL, progress));
|
| - currentItemSize = copyCoderSpec->TotalSize;
|
| - }
|
| - realOutStream.Release();
|
| - return extractCallback->SetOperationResult(NArchive::NExtract::NOperationResult::kOK);
|
| - COM_TRY_END
|
| -}
|
| -
|
| -STDMETHODIMP CHandler::GetStream(UInt32 index, ISequentialInStream **stream)
|
| -{
|
| - if (index != 0)
|
| - return E_INVALIDARG;
|
| - *stream = 0;
|
| - CMultiStream *streamSpec = new CMultiStream;
|
| - CMyComPtr<ISequentialInStream> streamTemp = streamSpec;
|
| - for (int i = 0; i < _streams.Size(); i++)
|
| - {
|
| - CMultiStream::CSubStreamInfo subStreamInfo;
|
| - subStreamInfo.Stream = _streams[i];
|
| - subStreamInfo.Pos = 0;
|
| - subStreamInfo.Size = _sizes[i];
|
| - streamSpec->Streams.Add(subStreamInfo);
|
| - }
|
| - streamSpec->Init();
|
| - *stream = streamTemp.Detach();
|
| - return S_OK;
|
| -}
|
| -
|
| -}}
|
|
|