diff options
Diffstat (limited to 'CPP')
-rwxr-xr-x | CPP/7zip/Archive/7z/7zExtract.cpp | 43 | ||||
-rwxr-xr-x | CPP/7zip/Archive/ArchiveExports.cpp | 2 | ||||
-rwxr-xr-x | CPP/7zip/Archive/Cab/CabHandler.cpp | 28 | ||||
-rwxr-xr-x | CPP/7zip/Archive/FatHandler.cpp | 4 | ||||
-rwxr-xr-x | CPP/7zip/Archive/Wim/WimHandler.cpp | 5 | ||||
-rwxr-xr-x | CPP/7zip/Archive/Wim/WimHandlerOut.cpp | 10 | ||||
-rwxr-xr-x | CPP/7zip/Archive/Wim/WimIn.cpp | 7 | ||||
-rwxr-xr-x | CPP/7zip/Bundles/Alone7z/resource.rc | 2 | ||||
-rwxr-xr-x | CPP/7zip/MyVersion.h | 8 | ||||
-rwxr-xr-x | CPP/7zip/UI/Console/List.cpp | 12 | ||||
-rwxr-xr-x | CPP/7zip/UI/FileManager/AboutDialog.rc | 2 | ||||
-rwxr-xr-x | CPP/7zip/UI/FileManager/Panel.h | 10 | ||||
-rwxr-xr-x | CPP/7zip/UI/FileManager/PanelItems.cpp | 64 | ||||
-rwxr-xr-x | CPP/7zip/UI/FileManager/PanelListNotify.cpp | 7 | ||||
-rwxr-xr-x | CPP/Windows/PropVariant.cpp | 14 |
15 files changed, 114 insertions, 104 deletions
diff --git a/CPP/7zip/Archive/7z/7zExtract.cpp b/CPP/7zip/Archive/7z/7zExtract.cpp index eb3ee502..d55f38e1 100755 --- a/CPP/7zip/Archive/7z/7zExtract.cpp +++ b/CPP/7zip/Archive/7z/7zExtract.cpp @@ -2,15 +2,14 @@ #include "StdAfx.h" -#include "7zHandler.h" -#include "7zFolderOutStream.h" -#include "7zDecode.h" -// #include "7z1Decode.h" - #include "../../../Common/ComTry.h" -#include "../../Common/StreamObjects.h" + #include "../../Common/ProgressUtils.h" -#include "../../Common/LimitedStreams.h" + +#include "7zDecode.h" +// #include "7z1Decode.h" +#include "7zFolderOutStream.h" +#include "7zHandler.h" namespace NArchive { namespace N7z { @@ -73,13 +72,13 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems, */ CObjectVector<CExtractFolderInfo> extractFolderInfoVector; - for(UInt32 ii = 0; ii < numItems; ii++) + for (UInt32 ii = 0; ii < numItems; ii++) { // UInt32 fileIndex = allFilesMode ? indexIndex : indices[indexIndex]; UInt32 ref2Index = allFilesMode ? ii : indices[ii]; // const CRef2 &ref2 = _refs[ref2Index]; - // for(UInt32 ri = 0; ri < ref2.Refs.Size(); ri++) + // for (UInt32 ri = 0; ri < ref2.Refs.Size(); ri++) { #ifdef _7Z_VOL // const CRef &ref = ref2.Refs[ri]; @@ -149,27 +148,26 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems, ); // CDecoder1 decoder; - UInt64 currentTotalPacked = 0; - UInt64 currentTotalUnpacked = 0; - UInt64 totalFolderUnpacked; - UInt64 totalFolderPacked; + UInt64 totalPacked = 0; + UInt64 totalUnpacked = 0; + UInt64 curPacked, curUnpacked; CLocalProgress *lps = new CLocalProgress; CMyComPtr<ICompressProgressInfo> progress = lps; lps->Init(extractCallback, false); - for(int i = 0; i < extractFolderInfoVector.Size(); i++, - currentTotalUnpacked += totalFolderUnpacked, - currentTotalPacked += totalFolderPacked) + for (int i = 0;; i++, totalUnpacked += curUnpacked, totalPacked += curPacked) { - lps->OutSize = currentTotalUnpacked; - lps->InSize = currentTotalPacked; + lps->OutSize = totalUnpacked; + lps->InSize = totalPacked; RINOK(lps->SetCur()); + + if (i >= extractFolderInfoVector.Size()) + break; const CExtractFolderInfo &efi = extractFolderInfoVector[i]; - totalFolderUnpacked = efi.UnpackSize; - - totalFolderPacked = 0; + curUnpacked = efi.UnpackSize; + curPacked = 0; CFolderOutStream *folderOutStream = new CFolderOutStream; CMyComPtr<ISequentialOutStream> outStream(folderOutStream); @@ -187,7 +185,6 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems, else startIndex = db.FolderStartFileIndex[efi.FolderIndex]; - HRESULT result = folderOutStream->Init(&db, #ifdef _7Z_VOL volume.StartRef2Index, @@ -205,7 +202,7 @@ STDMETHODIMP CHandler::Extract(const UInt32 *indices, UInt32 numItems, CNum folderIndex = efi.FolderIndex; const CFolder &folderInfo = db.Folders[folderIndex]; - totalFolderPacked = _db.GetFolderFullPackSize(folderIndex); + curPacked = _db.GetFolderFullPackSize(folderIndex); CNum packStreamIndex = db.FolderStartPackStreamIndex[folderIndex]; UInt64 folderStartPackPos = db.GetFolderStreamPos(folderIndex, 0); diff --git a/CPP/7zip/Archive/ArchiveExports.cpp b/CPP/7zip/Archive/ArchiveExports.cpp index 5dcf9806..c7908b59 100755 --- a/CPP/7zip/Archive/ArchiveExports.cpp +++ b/CPP/7zip/Archive/ArchiveExports.cpp @@ -85,6 +85,7 @@ STDAPI CreateArchiver(const GUID *clsid, const GUID *iid, void **outObject) STDAPI GetHandlerProperty2(UInt32 formatIndex, PROPID propID, PROPVARIANT *value) { + COM_TRY_BEGIN if (formatIndex >= g_NumArcs) return E_INVALIDARG; const CArcInfo &arc = *g_Arcs[formatIndex]; @@ -119,6 +120,7 @@ STDAPI GetHandlerProperty2(UInt32 formatIndex, PROPID propID, PROPVARIANT *value } prop.Detach(value); return S_OK; + COM_TRY_END } STDAPI GetHandlerProperty(PROPID propID, PROPVARIANT *value) diff --git a/CPP/7zip/Archive/Cab/CabHandler.cpp b/CPP/7zip/Archive/Cab/CabHandler.cpp index 9fb91423..20f670d3 100755 --- a/CPP/7zip/Archive/Cab/CabHandler.cpp +++ b/CPP/7zip/Archive/Cab/CabHandler.cpp @@ -41,7 +41,7 @@ enum }; #endif -STATPROPSTG kProps[] = +static STATPROPSTG kProps[] = { { NULL, kpidPath, VT_BSTR}, { NULL, kpidSize, VT_UI8}, @@ -57,18 +57,18 @@ STATPROPSTG kProps[] = #endif }; -static const wchar_t *kMethods[] = +static const char *kMethods[] = { - L"None", - L"MSZip", - L"Quantum", - L"LZX" + "None", + "MSZip", + "Quantum", + "LZX" }; static const int kNumMethods = sizeof(kMethods) / sizeof(kMethods[0]); -static const wchar_t *kUnknownMethod = L"Unknown"; +static const char *kUnknownMethod = "Unknown"; -STATPROPSTG kArcProps[] = +static STATPROPSTG kArcProps[] = { { NULL, kpidMethod, VT_BSTR}, // { NULL, kpidSolid, VT_BOOL}, @@ -87,7 +87,7 @@ STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value) { case kpidMethod: { - UString resString; + AString resString; CRecordVector<Byte> ids; int i; for (int v = 0; v < m_Database.Volumes.Size(); v++) @@ -99,9 +99,9 @@ STDMETHODIMP CHandler::GetArchiveProperty(PROPID propID, PROPVARIANT *value) for (i = 0; i < ids.Size(); i++) { Byte id = ids[i]; - UString method = (id < kNumMethods) ? kMethods[id] : kUnknownMethod; + AString method = (id < kNumMethods) ? kMethods[id] : kUnknownMethod; if (!resString.IsEmpty()) - resString += L' '; + resString += ' '; resString += method; } prop = resString; @@ -171,12 +171,12 @@ STDMETHODIMP CHandler::GetProperty(UInt32 index, PROPID propID, PROPVARIANT *va UInt32 realFolderIndex = item.GetFolderIndex(db.Folders.Size()); const CFolder &folder = db.Folders[realFolderIndex]; int methodIndex = folder.GetCompressionMethod(); - UString method = (methodIndex < kNumMethods) ? kMethods[methodIndex] : kUnknownMethod; + AString method = (methodIndex < kNumMethods) ? kMethods[methodIndex] : kUnknownMethod; if (methodIndex == NHeader::NCompressionMethodMajor::kLZX || methodIndex == NHeader::NCompressionMethodMajor::kQuantum) { - method += L":"; - wchar_t temp[32]; + method += ':'; + char temp[32]; ConvertUInt64ToString(folder.CompressionTypeMinor, temp); method += temp; } diff --git a/CPP/7zip/Archive/FatHandler.cpp b/CPP/7zip/Archive/FatHandler.cpp index 6d7b249c..22a61f88 100755 --- a/CPP/7zip/Archive/FatHandler.cpp +++ b/CPP/7zip/Archive/FatHandler.cpp @@ -578,8 +578,12 @@ HRESULT CDatabase::Open() return S_FALSE; UInt64 fileSize; RINOK(InStream->Seek(0, STREAM_SEEK_END, &fileSize)); + + /* we comment that check to support truncated images */ + /* if (fileSize < Header.GetPhySize()) return S_FALSE; + */ if (Header.IsFat32()) { diff --git a/CPP/7zip/Archive/Wim/WimHandler.cpp b/CPP/7zip/Archive/Wim/WimHandler.cpp index 8092a34c..9bea60dd 100755 --- a/CPP/7zip/Archive/Wim/WimHandler.cpp +++ b/CPP/7zip/Archive/Wim/WimHandler.cpp @@ -391,7 +391,6 @@ STDMETHODIMP CHandler::Open(IInStream *inStream, { COM_TRY_BEGIN Close(); - try { CMyComPtr<IArchiveOpenVolumeCallback> openVolumeCallback; @@ -488,10 +487,6 @@ STDMETHODIMP CHandler::Open(IInStream *inStream, _xmlInComments = (_xmls.Size() == 1 && !_db.ShowImageNumber); } - catch(...) - { - return S_FALSE; - } return S_OK; COM_TRY_END } diff --git a/CPP/7zip/Archive/Wim/WimHandlerOut.cpp b/CPP/7zip/Archive/Wim/WimHandlerOut.cpp index d51eb81a..c7eb9980 100755 --- a/CPP/7zip/Archive/Wim/WimHandlerOut.cpp +++ b/CPP/7zip/Archive/Wim/WimHandlerOut.cpp @@ -258,7 +258,7 @@ static size_t WriteItem(const CUpdateItem &item, Byte *p, const Byte *hash) return totalLen; } -void WriteTree(const CDir &tree, CRecordVector<CSha1Hash> &digests, +static void WriteTree(const CDir &tree, CRecordVector<CSha1Hash> &digests, CUpdateItem &defaultDirItem, CObjectVector<CUpdateItem> &updateItems, Byte *dest, size_t &pos) { @@ -488,11 +488,15 @@ static HRESULT UpdateArchive(ISequentialOutStream *seqOutStream, const UInt32 kSecuritySize = 8; size_t pos = kSecuritySize; WriteTree(rootFolder, hashes.Digests, ri, updateItems, NULL, pos); + CByteBuffer meta; meta.SetCapacity(pos); - // memset(meta, 0, kSecuritySize); - Set32((Byte *)meta, 0); // only if there is no security data, we can use 0 here. + + // we can write 0 here only if there is no security data, imageX does it, + // but some programs expect size = 8 + Set32((Byte *)meta, 8); // size of security data Set32((Byte *)meta + 4, 0); // num security entries + pos = kSecuritySize; WriteTree(rootFolder, hashes.Digests, ri, updateItems, (Byte *)meta, pos); diff --git a/CPP/7zip/Archive/Wim/WimIn.cpp b/CPP/7zip/Archive/Wim/WimIn.cpp index b65b4c44..4ea028af 100755 --- a/CPP/7zip/Archive/Wim/WimIn.cpp +++ b/CPP/7zip/Archive/Wim/WimIn.cpp @@ -384,7 +384,12 @@ HRESULT CDatabase::ParseDirItem(size_t pos, int parent) return S_FALSE; UInt32 fileNameLen = Get16(p + 0x24); - if ((fileNameLen & 1) != 0 || ((0x26 + fileNameLen + 6) & ~7) != len) + if ((fileNameLen & 1) != 0) + return S_FALSE; + /* Probably different versions of ImageX can use different number of + additional ZEROs. So we don't use exact check. */ + UInt32 fileNameLen2 = (fileNameLen == 0 ? fileNameLen : fileNameLen + 2); + if (((0x26 + fileNameLen2 + 6) & ~7) > len) return S_FALSE; UString name; diff --git a/CPP/7zip/Bundles/Alone7z/resource.rc b/CPP/7zip/Bundles/Alone7z/resource.rc index fc9063c1..f4ee3577 100755 --- a/CPP/7zip/Bundles/Alone7z/resource.rc +++ b/CPP/7zip/Bundles/Alone7z/resource.rc @@ -1,3 +1,3 @@ #include "../../MyVersionInfo.rc" -MY_VERSION_INFO_APP("7-Zip Standalone Console", "7za") +MY_VERSION_INFO_APP("7-Zip Standalone Console", "7zr") diff --git a/CPP/7zip/MyVersion.h b/CPP/7zip/MyVersion.h index d46b673b..acfcc6b4 100755 --- a/CPP/7zip/MyVersion.h +++ b/CPP/7zip/MyVersion.h @@ -1,8 +1,8 @@ #define MY_VER_MAJOR 9 -#define MY_VER_MINOR 14 +#define MY_VER_MINOR 15 #define MY_VER_BUILD 0 -#define MY_VERSION "9.14 beta" -#define MY_7ZIP_VERSION "7-Zip 9.14 beta" -#define MY_DATE "2010-06-04" +#define MY_VERSION "9.15 beta" +#define MY_7ZIP_VERSION "7-Zip 9.15 beta" +#define MY_DATE "2010-06-20" #define MY_COPYRIGHT "Copyright (c) 1999-2010 Igor Pavlov" #define MY_VERSION_COPYRIGHT_DATE MY_VERSION " " MY_COPYRIGHT " " MY_DATE diff --git a/CPP/7zip/UI/Console/List.cpp b/CPP/7zip/UI/Console/List.cpp index 85eeea20..b06641f2 100755 --- a/CPP/7zip/UI/Console/List.cpp +++ b/CPP/7zip/UI/Console/List.cpp @@ -514,11 +514,9 @@ HRESULT ListArchives(CCodecs *codecs, const CIntVector &formatIndices, CMyComBSTR name; PROPID propID; VARTYPE vt; - if (archive->GetArchivePropertyInfo(j, &name, &propID, &vt) != S_OK) - continue; + RINOK(archive->GetArchivePropertyInfo(j, &name, &propID, &vt)); NCOM::CPropVariant prop; - if (archive->GetArchiveProperty(propID, &prop) != S_OK) - continue; + RINOK(archive->GetArchiveProperty(propID, &prop)); UString s = ConvertPropertyToString(prop, propID); if (!s.IsEmpty()) PrintPropPair(GetPropName(propID, name), s); @@ -536,11 +534,9 @@ HRESULT ListArchives(CCodecs *codecs, const CIntVector &formatIndices, CMyComBSTR name; PROPID propID; VARTYPE vt; - if (archive->GetPropertyInfo(j, &name, &propID, &vt) != S_OK) - continue; + RINOK(archive->GetPropertyInfo(j, &name, &propID, &vt)); NCOM::CPropVariant prop; - if (archive->GetProperty(mainIndex, propID, &prop) != S_OK) - continue; + RINOK(archive->GetProperty(mainIndex, propID, &prop)); UString s = ConvertPropertyToString(prop, propID); if (!s.IsEmpty()) PrintPropPair(GetPropName(propID, name), s); diff --git a/CPP/7zip/UI/FileManager/AboutDialog.rc b/CPP/7zip/UI/FileManager/AboutDialog.rc index d8f923a7..fcf2ae6e 100755 --- a/CPP/7zip/UI/FileManager/AboutDialog.rc +++ b/CPP/7zip/UI/FileManager/AboutDialog.rc @@ -21,6 +21,6 @@ CAPTION "About 7-Zip" ICON IDI_LOGO, -1, m, m, 32, 32, SS_REALSIZEIMAGE LTEXT MY_7ZIP_VERSION, -1, m, 54, xc, 8 LTEXT MY_COPYRIGHT, -1, m, 67, xc, 8 - LTEXT "7-Zip is free software. However, you can support development of 7-Zip by registering.", + LTEXT "7-Zip is free software", IDC_ABOUT_STATIC_REGISTER_INFO, m, y, xc, (by - y - 1) } diff --git a/CPP/7zip/UI/FileManager/Panel.h b/CPP/7zip/UI/FileManager/Panel.h index fb6d255b..9cda94a4 100755 --- a/CPP/7zip/UI/FileManager/Panel.h +++ b/CPP/7zip/UI/FileManager/Panel.h @@ -236,12 +236,12 @@ private: void ChangeWindowSize(int xSize, int ySize); - void InitColumns(); + HRESULT InitColumns(); // void InitColumns2(PROPID sortID); void InsertColumn(int index); void SetFocusedSelectedItem(int index, bool select); - void RefreshListCtrl(const UString &focusedName, int focusedPos, bool selectFocused, + HRESULT RefreshListCtrl(const UString &focusedName, int focusedPos, bool selectFocused, const UStringVector &selectedNames); void OnShiftSelectMessage(); @@ -335,8 +335,8 @@ public: void GetSelectedNames(UStringVector &selectedNames); void SaveSelectedState(CSelectedState &s); - void RefreshListCtrl(const CSelectedState &s); - void RefreshListCtrlSaveFocused(); + HRESULT RefreshListCtrl(const CSelectedState &s); + HRESULT RefreshListCtrlSaveFocused(); UString GetItemName(int itemIndex) const; UString GetItemPrefix(int itemIndex) const; @@ -517,7 +517,7 @@ public: // bool _passwordIsDefined; // UString _password; - void RefreshListCtrl(); + HRESULT RefreshListCtrl(); void MessageBoxInfo(LPCWSTR message, LPCWSTR caption); void MessageBox(LPCWSTR message); diff --git a/CPP/7zip/UI/FileManager/PanelItems.cpp b/CPP/7zip/UI/FileManager/PanelItems.cpp index 626d4309..05b540b6 100755 --- a/CPP/7zip/UI/FileManager/PanelItems.cpp +++ b/CPP/7zip/UI/FileManager/PanelItems.cpp @@ -55,7 +55,7 @@ static int GetColumnAlign(PROPID propID, VARTYPE varType) } } -void CPanel::InitColumns() +HRESULT CPanel::InitColumns() { if (_needSaveInfo) SaveListViewInfo(); @@ -88,8 +88,7 @@ void CPanel::InitColumns() PROPID propID; VARTYPE varType; - if (_folder->GetPropertyInfo(i, &name, &propID, &varType) != S_OK) - throw 1; + RINOK(_folder->GetPropertyInfo(i, &name, &propID, &varType)); if (propID == kpidIsDir) continue; @@ -110,7 +109,7 @@ void CPanel::InitColumns() break; int order = 0; - for(i = 0; i < _listViewInfo.Columns.Size(); i++) + for (i = 0; i < _listViewInfo.Columns.Size(); i++) { const CColumnInfo &columnInfo = _listViewInfo.Columns[i]; int index = _properties.FindItemWithID(columnInfo.PropID); @@ -124,7 +123,7 @@ void CPanel::InitColumns() continue; } } - for(i = 0; i < _properties.Size(); i++) + for (i = 0; i < _properties.Size(); i++) { CItemProperty &item = _properties[i]; if (item.Order < 0) @@ -155,6 +154,7 @@ void CPanel::InitColumns() { InsertColumn(i); } + return S_OK; } void CPanel::InsertColumn(int index) @@ -170,9 +170,9 @@ void CPanel::InsertColumn(int index) _listView.InsertColumn(index, &column); } -void CPanel::RefreshListCtrl() +HRESULT CPanel::RefreshListCtrl() { - RefreshListCtrl(UString(), -1, true, UStringVector()); + return RefreshListCtrl(UString(), -1, true, UStringVector()); } int CALLBACK CompareItems(LPARAM lParam1, LPARAM lParam2, LPARAM lpData); @@ -239,19 +239,19 @@ void CPanel::SaveSelectedState(CSelectedState &s) GetSelectedNames(s.SelectedNames); } -void CPanel::RefreshListCtrl(const CSelectedState &s) +HRESULT CPanel::RefreshListCtrl(const CSelectedState &s) { bool selectFocused = s.SelectFocused; if (_mySelectMode) selectFocused = true; - RefreshListCtrl(s.FocusedName, s.FocusedItem, selectFocused, s.SelectedNames); + return RefreshListCtrl(s.FocusedName, s.FocusedItem, selectFocused, s.SelectedNames); } -void CPanel::RefreshListCtrlSaveFocused() +HRESULT CPanel::RefreshListCtrlSaveFocused() { CSelectedState state; SaveSelectedState(state); - RefreshListCtrl(state); + return RefreshListCtrl(state); } void CPanel::SetFocusedSelectedItem(int index, bool select) @@ -268,7 +268,7 @@ void CPanel::SetFocusedSelectedItem(int index, bool select) } } -void CPanel::RefreshListCtrl(const UString &focusedName, int focusedPos, bool selectFocused, +HRESULT CPanel::RefreshListCtrl(const UString &focusedName, int focusedPos, bool selectFocused, const UStringVector &selectedNames) { _dontShowMode = false; @@ -309,11 +309,8 @@ void CPanel::RefreshListCtrl(const UString &focusedName, int focusedPos, bool se if (folderSetFlatMode) folderSetFlatMode->SetFlatMode(BoolToInt(_flatMode)); - if (_folder->LoadItems() != S_OK) - return; - - InitColumns(); - + RINOK(_folder->LoadItems()); + RINOK(InitColumns()); // OutputDebugString(TEXT("Start Dir\n")); UInt32 numItems; @@ -345,13 +342,13 @@ void CPanel::RefreshListCtrl(const UString &focusedName, int focusedPos, bool se item.iImage = _extToIconMap.GetIconIndex(attrib, itemName); if (item.iImage < 0) item.iImage = 0; - if(_listView.InsertItem(&item) == -1) - return; + if (_listView.InsertItem(&item) == -1) + return E_FAIL; } // OutputDebugStringA("S1\n"); - for(UInt32 i = 0; i < numItems; i++) + for (UInt32 i = 0; i < numItems; i++) { UString itemName = GetItemName(i); const UString relPath = GetItemRelPath(i); @@ -400,7 +397,7 @@ void CPanel::RefreshListCtrl(const UString &focusedName, int focusedPos, bool se item.pszText = (wchar_t *)(const wchar_t *)itemName; NCOM::CPropVariant prop; - _folder->GetProperty(i, kpidAttrib, &prop); + RINOK(_folder->GetProperty(i, kpidAttrib, &prop)); UInt32 attrib = 0; if (prop.vt == VT_UI4) attrib = prop.ulVal; @@ -430,12 +427,12 @@ void CPanel::RefreshListCtrl(const UString &focusedName, int focusedPos, bool se if (item.iImage < 0) item.iImage = 0; - if(_listView.InsertItem(&item) == -1) - return; // error + if (_listView.InsertItem(&item) == -1) + return E_FAIL; // error } // OutputDebugStringA("End2\n"); - if(_listView.GetItemCount() > 0 && cursorIndex >= 0) + if (_listView.GetItemCount() > 0 && cursorIndex >= 0) SetFocusedSelectedItem(cursorIndex, selectFocused); _listView.SortItems(CompareItems, (LPARAM)this); if (cursorIndex < 0 && _listView.GetItemCount() > 0) @@ -452,6 +449,7 @@ void CPanel::RefreshListCtrl(const UString &focusedName, int focusedPos, bool se /* _listView.UpdateWindow(); */ + return S_OK; } void CPanel::GetSelectedItemsIndices(CRecordVector<UInt32> &indices) const @@ -482,7 +480,7 @@ void CPanel::GetOperatedItemIndices(CRecordVector<UInt32> &indices) const int focusedItem = _listView.GetFocusedItem(); if (focusedItem >= 0) { - if(_listView.GetItemState(focusedItem, LVIS_SELECTED) == LVIS_SELECTED) + if (_listView.GetItemState(focusedItem, LVIS_SELECTED) == LVIS_SELECTED) { int realIndex = GetRealItemIndex(focusedItem); if (realIndex != kParentIndex) @@ -572,7 +570,7 @@ void CPanel::OpenSelectedItems(bool tryInternal) } bool dirIsStarted = false; - for(int i = 0; i < indices.Size(); i++) + for (int i = 0; i < indices.Size(); i++) { UInt32 index = indices[i]; // CFileInfo &aFile = m_Files[index]; @@ -666,7 +664,7 @@ void CPanel::ReadListViewInfo() void CPanel::SaveListViewInfo() { int i; - for(i = 0; i < _visibleProperties.Size(); i++) + for (i = 0; i < _visibleProperties.Size(); i++) { CItemProperty &prop = _visibleProperties[i]; LVCOLUMN winColumnInfo; @@ -683,7 +681,7 @@ void CPanel::SaveListViewInfo() PROPID sortPropID = _sortID; _visibleProperties.Sort(); - for(i = 0; i < _visibleProperties.Size(); i++) + for (i = 0; i < _visibleProperties.Size(); i++) { const CItemProperty &prop = _visibleProperties[i]; CColumnInfo columnInfo; @@ -692,7 +690,7 @@ void CPanel::SaveListViewInfo() columnInfo.Width = prop.Width; viewInfo.Columns.Add(columnInfo); } - for(i = 0; i < _properties.Size(); i++) + for (i = 0; i < _properties.Size(); i++) { const CItemProperty &prop = _properties[i]; if (!prop.IsVisible) @@ -719,7 +717,7 @@ void CPanel::SaveListViewInfo() bool CPanel::OnRightClick(MY_NMLISTVIEW_NMITEMACTIVATE *itemActiveate, LRESULT &result) { - if(itemActiveate->hdr.hwndFrom == HWND(_listView)) + if (itemActiveate->hdr.hwndFrom == HWND(_listView)) return false; POINT point; ::GetCursorPos(&point); @@ -737,7 +735,7 @@ void CPanel::ShowColumnsContextMenu(int x, int y) menu.CreatePopup(); const int kCommandStart = 100; - for(int i = 0; i < _properties.Size(); i++) + for (int i = 0; i < _properties.Size(); i++) { const CItemProperty &prop = _properties[i]; UINT flags = MF_STRING; @@ -785,7 +783,9 @@ void CPanel::ShowColumnsContextMenu(int x, int y) void CPanel::OnReload() { - RefreshListCtrlSaveFocused(); + HRESULT res = RefreshListCtrlSaveFocused(); + if (res != S_OK) + MessageBoxError(res); OnRefreshStatusBar(); } diff --git a/CPP/7zip/UI/FileManager/PanelListNotify.cpp b/CPP/7zip/UI/FileManager/PanelListNotify.cpp index 43d7981b..2051b5c6 100755 --- a/CPP/7zip/UI/FileManager/PanelListNotify.cpp +++ b/CPP/7zip/UI/FileManager/PanelListNotify.cpp @@ -149,9 +149,10 @@ LRESULT CPanel::SetItemText(LVITEMW &item) if (needRead) */ - if (_folder->GetProperty(realIndex, propID, &prop) != S_OK) - throw 2723407; - + HRESULT res = _folder->GetProperty(realIndex, propID, &prop); + if (res != S_OK) + s = UString(L"Error: ") + HResultToMessage(res); + else if ((prop.vt == VT_UI8 || prop.vt == VT_UI4) && ( propID == kpidSize || propID == kpidPackSize || diff --git a/CPP/Windows/PropVariant.cpp b/CPP/Windows/PropVariant.cpp index c2b15744..b95bd242 100755 --- a/CPP/Windows/PropVariant.cpp +++ b/CPP/Windows/PropVariant.cpp @@ -50,6 +50,8 @@ CPropVariant& CPropVariant::operator=(BSTR bstrSrc) return *this; } +static const char *kMemException = "out of memory"; + CPropVariant& CPropVariant::operator=(LPCOLESTR lpszSrc) { InternalClear(); @@ -58,8 +60,9 @@ CPropVariant& CPropVariant::operator=(LPCOLESTR lpszSrc) bstrVal = ::SysAllocString(lpszSrc); if (bstrVal == NULL && lpszSrc != NULL) { - vt = VT_ERROR; - scode = E_OUTOFMEMORY; + throw kMemException; + // vt = VT_ERROR; + // scode = E_OUTOFMEMORY; } return *this; } @@ -74,8 +77,9 @@ CPropVariant& CPropVariant::operator=(const char *s) bstrVal = ::SysAllocStringByteLen(0, (UINT)len * sizeof(OLECHAR)); if (bstrVal == NULL) { - vt = VT_ERROR; - scode = E_OUTOFMEMORY; + throw kMemException; + // vt = VT_ERROR; + // scode = E_OUTOFMEMORY; } else { @@ -204,6 +208,8 @@ void CPropVariant::InternalCopy(const PROPVARIANT *pSrc) HRESULT hr = Copy(pSrc); if (FAILED(hr)) { + if (hr == E_OUTOFMEMORY) + throw kMemException; vt = VT_ERROR; scode = hr; } |