diff options
author | Igor Pavlov <ipavlov@users.sourceforge.net> | 2008-08-13 04:00:00 +0400 |
---|---|---|
committer | Kornel LesiĆski <kornel@geekhood.net> | 2016-05-28 02:15:56 +0300 |
commit | 173c07e166fdf6fcd20f18ea73008f1b628945df (patch) | |
tree | 13ebea85cdc4c16ae93714ff0627ee9f91ad7e08 /CPP/7zip/Archive/Cpio | |
parent | 3901bf0ab88106a5b031cba7bc18d60cdebf7eef (diff) |
4.59 beta
Diffstat (limited to 'CPP/7zip/Archive/Cpio')
-rwxr-xr-x | CPP/7zip/Archive/Cpio/CpioHandler.cpp | 71 | ||||
-rwxr-xr-x | CPP/7zip/Archive/Cpio/CpioHandler.h | 2 | ||||
-rwxr-xr-x | CPP/7zip/Archive/Cpio/CpioHeader.cpp | 2 | ||||
-rwxr-xr-x | CPP/7zip/Archive/Cpio/CpioHeader.h | 4 | ||||
-rwxr-xr-x | CPP/7zip/Archive/Cpio/CpioIn.cpp | 14 | ||||
-rwxr-xr-x | CPP/7zip/Archive/Cpio/CpioItem.h | 2 | ||||
-rwxr-xr-x | CPP/7zip/Archive/Cpio/StdAfx.cpp | 3 | ||||
-rwxr-xr-x | CPP/7zip/Archive/Cpio/cpio.ico | bin | 3638 -> 0 bytes |
8 files changed, 50 insertions, 48 deletions
diff --git a/CPP/7zip/Archive/Cpio/CpioHandler.cpp b/CPP/7zip/Archive/Cpio/CpioHandler.cpp index e2392b86..e034c87b 100755 --- a/CPP/7zip/Archive/Cpio/CpioHandler.cpp +++ b/CPP/7zip/Archive/Cpio/CpioHandler.cpp @@ -27,20 +27,20 @@ namespace NArchive { namespace NCpio { /* -enum // PropID +enum { kpidinode = kpidUserDefined, kpidiChkSum }; */ -STATPROPSTG kProps[] = +STATPROPSTG kProps[] = { { NULL, kpidPath, VT_BSTR}, - { NULL, kpidIsFolder, VT_BOOL}, + { NULL, kpidIsDir, VT_BOOL}, { NULL, kpidSize, VT_UI8}, - { NULL, kpidPackedSize, VT_UI8}, - { NULL, kpidLastWriteTime, VT_FILETIME}, + { NULL, kpidPackSize, VT_UI8}, + { NULL, kpidMTime, VT_FILETIME}, // { NULL, kpidUser, VT_BSTR}, // { NULL, kpidGroup, VT_BSTR}, // { L"inode", kpidinode, VT_UI4} @@ -50,27 +50,28 @@ STATPROPSTG kProps[] = IMP_IInArchive_Props IMP_IInArchive_ArcProps_NO -STDMETHODIMP CHandler::Open(IInStream *stream, +STDMETHODIMP CHandler::Open(IInStream *stream, const UInt64 * /* maxCheckStartPosition */, - IArchiveOpenCallback *openArchiveCallback) + IArchiveOpenCallback *callback) { COM_TRY_BEGIN // try { CInArchive archive; - if (archive.Open(stream) != S_OK) - return S_FALSE; - - _items.Clear(); + UInt64 endPos = 0; + bool needSetTotal = true; - if (openArchiveCallback != NULL) + if (callback != NULL) { - RINOK(openArchiveCallback->SetTotal(NULL, NULL)); - UInt64 numFiles = _items.Size(); - RINOK(openArchiveCallback->SetCompleted(&numFiles, NULL)); + RINOK(stream->Seek(0, STREAM_SEEK_END, &endPos)); + RINOK(stream->Seek(0, STREAM_SEEK_SET, NULL)); } + RINOK(archive.Open(stream)); + + _items.Clear(); + for (;;) { CItemEx item; @@ -84,10 +85,19 @@ STDMETHODIMP CHandler::Open(IInStream *stream, break; _items.Add(item); archive.SkeepDataRecords(item.Size, item.Align); - if (openArchiveCallback != NULL) + if (callback != NULL) { - UInt64 numFiles = _items.Size(); - RINOK(openArchiveCallback->SetCompleted(&numFiles, NULL)); + if (needSetTotal) + { + RINOK(callback->SetTotal(NULL, &endPos)); + needSetTotal = false; + } + if (_items.Size() % 100 == 0) + { + UInt64 numFiles = _items.Size(); + UInt64 numBytes = item.HeaderPosition; + RINOK(callback->SetCompleted(&numFiles, &numBytes)); + } } } if (_items.Size() == 0) @@ -127,17 +137,16 @@ STDMETHODIMP CHandler::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *val switch(propID) { case kpidPath: - prop = (const wchar_t *)NItemName::GetOSName( - MultiByteToUnicodeString(item.Name, CP_OEMCP)); + prop = NItemName::GetOSName(MultiByteToUnicodeString(item.Name, CP_OEMCP)); break; - case kpidIsFolder: - prop = item.IsDirectory(); + case kpidIsDir: + prop = item.IsDir(); break; case kpidSize: - case kpidPackedSize: + case kpidPackSize: prop = (UInt64)item.Size; break; - case kpidLastWriteTime: + case kpidMTime: { FILETIME utcFileTime; if (item.ModificationTime != 0) @@ -151,12 +160,8 @@ STDMETHODIMP CHandler::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *val break; } /* - case kpidinode: - prop = item.inode; - break; - case kpidiChkSum: - prop = item.ChkSum; - break; + case kpidinode: prop = item.inode; break; + case kpidiChkSum: prop = item.ChkSum; break; */ } prop.Detach(value); @@ -199,14 +204,14 @@ STDMETHODIMP CHandler::Extract(const UInt32* indices, UInt32 numItems, lps->InSize = lps->OutSize = currentTotalSize; RINOK(lps->SetCur()); CMyComPtr<ISequentialOutStream> realOutStream; - Int32 askMode = testMode ? + Int32 askMode = testMode ? NArchive::NExtract::NAskMode::kTest : NArchive::NExtract::NAskMode::kExtract; Int32 index = allFilesMode ? i : indices[i]; const CItemEx &item = _items[index]; RINOK(extractCallback->GetStream(index, &realOutStream, askMode)); currentItemSize = item.Size; - if (item.IsDirectory()) + if (item.IsDir()) { RINOK(extractCallback->PrepareOperation(askMode)); RINOK(extractCallback->SetOperationResult(NArchive::NExtract::NOperationResult::kOK)); @@ -224,7 +229,7 @@ STDMETHODIMP CHandler::Extract(const UInt32* indices, UInt32 numItems, streamSpec->Init(item.Size); RINOK(copyCoder->Code(inStream, realOutStream, NULL, NULL, progress)); realOutStream.Release(); - RINOK(extractCallback->SetOperationResult((copyCoderSpec->TotalSize == item.Size) ? + RINOK(extractCallback->SetOperationResult((copyCoderSpec->TotalSize == item.Size) ? NArchive::NExtract::NOperationResult::kOK: NArchive::NExtract::NOperationResult::kDataError)); } diff --git a/CPP/7zip/Archive/Cpio/CpioHandler.h b/CPP/7zip/Archive/Cpio/CpioHandler.h index 3b4e7036..1993c37f 100755 --- a/CPP/7zip/Archive/Cpio/CpioHandler.h +++ b/CPP/7zip/Archive/Cpio/CpioHandler.h @@ -11,7 +11,7 @@ namespace NArchive { namespace NCpio { -class CHandler: +class CHandler: public IInArchive, public CMyUnknownImp { diff --git a/CPP/7zip/Archive/Cpio/CpioHeader.cpp b/CPP/7zip/Archive/Cpio/CpioHeader.cpp index 9e4d99cb..f7b5a414 100755 --- a/CPP/7zip/Archive/Cpio/CpioHeader.cpp +++ b/CPP/7zip/Archive/Cpio/CpioHeader.cpp @@ -8,7 +8,7 @@ namespace NArchive { namespace NCpio { namespace NFileHeader { - namespace NMagic + namespace NMagic { extern const char *kMagic1 = "070701"; extern const char *kMagic2 = "070702"; diff --git a/CPP/7zip/Archive/Cpio/CpioHeader.h b/CPP/7zip/Archive/Cpio/CpioHeader.h index 40a0014a..21afcc17 100755 --- a/CPP/7zip/Archive/Cpio/CpioHeader.h +++ b/CPP/7zip/Archive/Cpio/CpioHeader.h @@ -10,7 +10,7 @@ namespace NCpio { namespace NFileHeader { - namespace NMagic + namespace NMagic { extern const char *kMagic1; extern const char *kMagic2; @@ -56,7 +56,7 @@ namespace NFileHeader char NameSize[8]; // count includes terminating NUL in pathname char ChkSum[8]; // 0 for "new" portable format; for CRC format the sum of all the bytes in the file bool CheckMagic() const - { return memcmp(Magic, NMagic::kMagic1, 6) == 0 || + { return memcmp(Magic, NMagic::kMagic1, 6) == 0 || memcmp(Magic, NMagic::kMagic2, 6) == 0; }; }; */ diff --git a/CPP/7zip/Archive/Cpio/CpioIn.cpp b/CPP/7zip/Archive/Cpio/CpioIn.cpp index 4732a32e..d4d807e1 100755 --- a/CPP/7zip/Archive/Cpio/CpioIn.cpp +++ b/CPP/7zip/Archive/Cpio/CpioIn.cpp @@ -140,12 +140,12 @@ HRESULT CInArchive::GetNextItem(bool &filled, CItemEx &item) UInt32 nameSize; - bool oldBE = + bool oldBE = _block[0] == NFileHeader::NMagic::kMagicForRecord2[1] && _block[1] == NFileHeader::NMagic::kMagicForRecord2[0]; bool binMode = (_block[0] == NFileHeader::NMagic::kMagicForRecord2[0] && - _block[1] == NFileHeader::NMagic::kMagicForRecord2[1]) || + _block[1] == NFileHeader::NMagic::kMagicForRecord2[1]) || oldBE; if (binMode) @@ -175,7 +175,7 @@ HRESULT CInArchive::GetNextItem(bool &filled, CItemEx &item) item.ChkSum = 0; item.HeaderSize = GetAlignedSize( nameSize + NFileHeader::kRecord2Size, item.Align); - nameSize = item.HeaderSize - NFileHeader::kRecord2Size; + nameSize = item.HeaderSize - NFileHeader::kRecord2Size; } else { @@ -183,8 +183,8 @@ HRESULT CInArchive::GetNextItem(bool &filled, CItemEx &item) if (processedSize != 4) return S_FALSE; - bool magicOK = - memcmp(_block, NFileHeader::NMagic::kMagic1, 6) == 0 || + bool magicOK = + memcmp(_block, NFileHeader::NMagic::kMagic1, 6) == 0 || memcmp(_block, NFileHeader::NMagic::kMagic2, 6) == 0; _blockPos = 6; if (magicOK) @@ -211,7 +211,7 @@ HRESULT CInArchive::GetNextItem(bool &filled, CItemEx &item) GetFromHex(item.ChkSum); item.HeaderSize = GetAlignedSize( nameSize + NFileHeader::kRecordSize, item.Align); - nameSize = item.HeaderSize - NFileHeader::kRecordSize; + nameSize = item.HeaderSize - NFileHeader::kRecordSize; } else { @@ -237,7 +237,7 @@ HRESULT CInArchive::GetNextItem(bool &filled, CItemEx &item) GetFromOct11(item.Size); // ????? item.HeaderSize = GetAlignedSize( nameSize + NFileHeader::kOctRecordSize, item.Align); - nameSize = item.HeaderSize - NFileHeader::kOctRecordSize; + nameSize = item.HeaderSize - NFileHeader::kOctRecordSize; } } if (nameSize == 0 || nameSize >= (1 << 27)) diff --git a/CPP/7zip/Archive/Cpio/CpioItem.h b/CPP/7zip/Archive/Cpio/CpioItem.h index cee8b5b3..70aa384d 100755 --- a/CPP/7zip/Archive/Cpio/CpioItem.h +++ b/CPP/7zip/Archive/Cpio/CpioItem.h @@ -34,7 +34,7 @@ struct CItem UInt32 Align; - bool IsDirectory() const + bool IsDir() const #ifdef _WIN32 { return (Mode & _S_IFMT) == _S_IFDIR; } #else diff --git a/CPP/7zip/Archive/Cpio/StdAfx.cpp b/CPP/7zip/Archive/Cpio/StdAfx.cpp deleted file mode 100755 index d0feea85..00000000 --- a/CPP/7zip/Archive/Cpio/StdAfx.cpp +++ /dev/null @@ -1,3 +0,0 @@ -// StdAfx.cpp - -#include "StdAfx.h" diff --git a/CPP/7zip/Archive/Cpio/cpio.ico b/CPP/7zip/Archive/Cpio/cpio.ico Binary files differdeleted file mode 100755 index 9abaabc7..00000000 --- a/CPP/7zip/Archive/Cpio/cpio.ico +++ /dev/null |