122 lines
2.4 KiB
C++
122 lines
2.4 KiB
C++
|
#include "pch.h"
|
||
|
#pragma hdrstop
|
||
|
#include "modset.h"
|
||
|
|
||
|
VOID
|
||
|
CModuleListSet::DumpSetToConsole ()
|
||
|
{
|
||
|
static CHAR pszBuf [4096];
|
||
|
CHAR* pch;
|
||
|
ULONG cch;
|
||
|
ULONG cchLeft;
|
||
|
const CModuleList* pScan;
|
||
|
|
||
|
Assert (this);
|
||
|
|
||
|
*pszBuf = 0;
|
||
|
pch = pszBuf;
|
||
|
cchLeft = celems(pszBuf);
|
||
|
|
||
|
for (pScan = begin(); pScan != end(); pScan++)
|
||
|
{
|
||
|
cch = cchLeft - 1;
|
||
|
|
||
|
if (pScan->FDumpToString (pch, &cch))
|
||
|
{
|
||
|
strcat (pch, "\n");
|
||
|
cch++;
|
||
|
|
||
|
Assert (cchLeft >= cch);
|
||
|
pch += cch;
|
||
|
cchLeft -= cch;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
// Not enough room, time to flush the buffer.
|
||
|
//
|
||
|
printf(pszBuf);
|
||
|
*pszBuf = 0;
|
||
|
pch = pszBuf;
|
||
|
cchLeft = celems(pszBuf);
|
||
|
|
||
|
// Redo this entry
|
||
|
pScan--;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (pch > pszBuf)
|
||
|
{
|
||
|
printf(pszBuf);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
BOOL
|
||
|
CModuleListSet::FContainsModuleList (
|
||
|
IN const CModuleList* pList) const
|
||
|
{
|
||
|
const CModuleList* pScan;
|
||
|
|
||
|
Assert (this);
|
||
|
Assert (pList);
|
||
|
|
||
|
for (pScan = begin(); pScan != end(); pScan++)
|
||
|
{
|
||
|
if (pScan->FIsSameModuleListAs (pList))
|
||
|
{
|
||
|
return TRUE;
|
||
|
}
|
||
|
}
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
HRESULT
|
||
|
CModuleListSet::HrAddModuleList (
|
||
|
IN const CModuleList* pList,
|
||
|
IN DWORD dwFlags /* INS_FLAGS */)
|
||
|
{
|
||
|
HRESULT hr;
|
||
|
|
||
|
Assert (this);
|
||
|
Assert (pList);
|
||
|
Assert (!pList->empty());
|
||
|
Assert ((dwFlags & INS_ASSERT_IF_DUP) || (dwFlags & INS_IGNORE_IF_DUP));
|
||
|
Assert ((dwFlags & INS_APPEND) || (dwFlags & INS_INSERT));
|
||
|
Assert (!(INS_SORTED & dwFlags) && !(INS_NON_SORTED & dwFlags));
|
||
|
|
||
|
if (FContainsModuleList (pList))
|
||
|
{
|
||
|
// If the caller didn't tell us to ignore duplicates, we assert
|
||
|
// if there is one.
|
||
|
//
|
||
|
// If we have a dup, we want the caller to be aware that it
|
||
|
// is possible, and pass us the flag telling us to ignore it.
|
||
|
// Otherwise, we assert to let them know. (And we still ignore
|
||
|
// it.)
|
||
|
Assert (dwFlags & INS_IGNORE_IF_DUP);
|
||
|
|
||
|
return S_OK;
|
||
|
}
|
||
|
|
||
|
__try
|
||
|
{
|
||
|
// Either insert the bindpath or append it.
|
||
|
//
|
||
|
iterator iter = begin();
|
||
|
|
||
|
if (dwFlags & INS_APPEND)
|
||
|
{
|
||
|
iter = end();
|
||
|
}
|
||
|
|
||
|
insert (iter, *pList);
|
||
|
hr = S_OK;
|
||
|
}
|
||
|
__except(EXCEPTION_EXECUTE_HANDLER)
|
||
|
{
|
||
|
hr = E_OUTOFMEMORY;
|
||
|
}
|
||
|
|
||
|
return hr;
|
||
|
}
|
||
|
|