Skip to content

Commit 3ab0882

Browse files
committed
OrcLib: MemoryStream: add parameter to ctor for initial allocation
1 parent bd90b78 commit 3ab0882

File tree

5 files changed

+11
-22
lines changed

5 files changed

+11
-22
lines changed

src/OrcLib/EmbeddedResource.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -559,7 +559,7 @@ HRESULT Orc::EmbeddedResource::ExtractToBuffer(const std::wstring& szImageFileRe
559559
if (item.Size > 0)
560560
{
561561
using namespace msl::utilities;
562-
if (FAILED(hr = stream->OpenForReadWrite(SafeInt<DWORD>(item.Size))))
562+
if (FAILED(hr = stream->OpenForReadWrite(4096, SafeInt<DWORD>(item.Size))))
563563
return nullptr;
564564
pOutput = stream;
565565
return stream;

src/OrcLib/MemoryStream.cpp

+2-5
Original file line numberDiff line numberDiff line change
@@ -93,15 +93,12 @@ MemoryStream::OpenForReadWrite
9393
Creates an empty stream which can be written to. All writes to the stream will
9494
be kept in a growable memory buffer
9595
*/
96-
HRESULT MemoryStream::OpenForReadWrite(DWORD dwReservedBytes)
96+
HRESULT MemoryStream::OpenForReadWrite(DWORD dwSize, DWORD dwReservedBytes)
9797
{
9898
HRESULT hr = E_FAIL;
9999
Close();
100100

101-
DWORD dwPageSize = 0L;
102-
SystemDetails::GetPageSize(dwPageSize);
103-
104-
if (FAILED(hr = SetBufferSize(dwPageSize, dwReservedBytes)))
101+
if (FAILED(hr = SetBufferSize(dwSize, dwReservedBytes)))
105102
return hr;
106103

107104
m_bReadOnly = false;

src/OrcLib/MemoryStream.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ class MemoryStream : public ByteStream
5454
//
5555
// CByteStream implementation
5656
//
57-
STDMETHOD(OpenForReadWrite)(DWORD dwReservedBytes = kDefaultReservedBytes);
57+
STDMETHOD(OpenForReadWrite)(DWORD dwSize = 4096, DWORD dwReservedBytes = kDefaultReservedBytes);
5858

5959
STDMETHOD(OpenForReadOnly)(__in PVOID pBuffer, __in size_t cbBuffer);
6060

src/OrcLib/PEInfo.cpp

+7-9
Original file line numberDiff line numberDiff line change
@@ -330,8 +330,8 @@ HRESULT PEInfo::OpenVersionInformation()
330330
rsrc_rsrc_offset = (size_t)-1;
331331
for (size_t i = 0; i < rsrc_entry_count; i++)
332332
{
333-
PIMAGE_RESOURCE_DIRECTORY_ENTRY pde = (PIMAGE_RESOURCE_DIRECTORY_ENTRY)(
334-
(LPBYTE)rsrc_dir + sizeof(IMAGE_RESOURCE_DIRECTORY) + i * sizeof(IMAGE_RESOURCE_DIRECTORY_ENTRY));
333+
PIMAGE_RESOURCE_DIRECTORY_ENTRY pde =
334+
(PIMAGE_RESOURCE_DIRECTORY_ENTRY)((LPBYTE)rsrc_dir + sizeof(IMAGE_RESOURCE_DIRECTORY) + i * sizeof(IMAGE_RESOURCE_DIRECTORY_ENTRY));
335335
if ((!pde->NameIsString) && (pde->Id == RESOURCE_ID_VERSION) && (pde->DataIsDirectory))
336336
{
337337
rsrc_rsrc_offset = pde->OffsetToDirectory;
@@ -361,8 +361,8 @@ HRESULT PEInfo::OpenVersionInformation()
361361
rsrc_rsrc_offset = (size_t)-1;
362362
for (size_t i = 0; i < rsrc_entry_count; i++)
363363
{
364-
PIMAGE_RESOURCE_DIRECTORY_ENTRY pde = (PIMAGE_RESOURCE_DIRECTORY_ENTRY)(
365-
(LPBYTE)rsrc_dir + sizeof(IMAGE_RESOURCE_DIRECTORY) + i * sizeof(IMAGE_RESOURCE_DIRECTORY_ENTRY));
364+
PIMAGE_RESOURCE_DIRECTORY_ENTRY pde =
365+
(PIMAGE_RESOURCE_DIRECTORY_ENTRY)((LPBYTE)rsrc_dir + sizeof(IMAGE_RESOURCE_DIRECTORY) + i * sizeof(IMAGE_RESOURCE_DIRECTORY_ENTRY));
366366
if (pde->DataIsDirectory)
367367
{
368368
rsrc_rsrc_offset = pde->OffsetToDirectory; // take any available children
@@ -391,8 +391,8 @@ HRESULT PEInfo::OpenVersionInformation()
391391
rsrc_rsrc_offset = static_cast<size_t>(-1);
392392
for (size_t i = 0; i < rsrc_entry_count; i++)
393393
{
394-
PIMAGE_RESOURCE_DIRECTORY_ENTRY pde = (PIMAGE_RESOURCE_DIRECTORY_ENTRY)(
395-
(LPBYTE)rsrc_dir + sizeof(IMAGE_RESOURCE_DIRECTORY) + i * sizeof(IMAGE_RESOURCE_DIRECTORY_ENTRY));
394+
PIMAGE_RESOURCE_DIRECTORY_ENTRY pde =
395+
(PIMAGE_RESOURCE_DIRECTORY_ENTRY)((LPBYTE)rsrc_dir + sizeof(IMAGE_RESOURCE_DIRECTORY) + i * sizeof(IMAGE_RESOURCE_DIRECTORY_ENTRY));
396396
if ((!pde->NameIsString) && (!pde->DataIsDirectory))
397397
{
398398
// TODO check LANG (pde->Id)
@@ -581,11 +581,9 @@ HRESULT PEInfo::OpenAllHash(Intentions localIntentions)
581581
if (memstream == nullptr)
582582
return E_OUTOFMEMORY;
583583

584-
if (FAILED(hr = memstream->OpenForReadWrite()))
584+
if (FAILED(hr = memstream->OpenForReadWrite(stream->GetSize())))
585585
return hr;
586586

587-
if (FAILED(hr = memstream->SetSize(stream->GetSize())))
588-
return hr;
589587
ULONGLONG ullWritten = 0LL;
590588
if (FAILED(hr = stream->CopyTo(*memstream, &ullWritten)))
591589
return hr;

src/OrcLib/TemporaryStream.cpp

-6
Original file line numberDiff line numberDiff line change
@@ -91,12 +91,6 @@ STDMETHODIMP TemporaryStream::Open(
9191

9292
m_pMemStream = make_shared<MemoryStream>();
9393

94-
if (FAILED(hr = m_pMemStream->SetSize(dwMemThreshold)))
95-
{
96-
Log::Error("Failed to resize memory buffer [{}]", SystemError(hr));
97-
return hr;
98-
}
99-
10094
if (FAILED(hr = m_pMemStream->OpenForReadWrite(dwMemThreshold)))
10195
{
10296
Log::Debug("Failed to open memstream for {} bytes, using file stream", dwMemThreshold);

0 commit comments

Comments
 (0)