Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

132 lines
2.8 KiB

//*********************************************************************
//* Microsoft Windows **
//* Copyright(c) Microsoft Corp., 1998 **
//*********************************************************************
#include "pre.h"
CStorage::CStorage(void)
{
// initialize all items
for (int i=0; i<MAX_STORGE_ITEM; i++)
{
m_pItem[i] = NULL;
}
}
CStorage::~CStorage(void)
{
// Clean up
for (int i=0; i<MAX_STORGE_ITEM; i++)
{
if (m_pItem[i])
{
if (m_pItem[i]->pData)
{
delete [] m_pItem[i]->pData;
}
delete m_pItem[i];
}
}
}
// Associate the data with a key and puts it in storage
BOOL CStorage::Set(
STORAGEKEY key,
void far * pData,
DWORD dwSize
)
{
// checks for existence of previous item
if (m_pItem[key])
{
// Checks if a new allocation is necessary
if (m_pItem[key]->dwSize < dwSize )
{
// Too small, new reallocation
if (m_pItem[key]->pData)
{
delete [] m_pItem[key]->pData;
m_pItem[key]->pData = (void*) new CHAR[dwSize];
}
}
}
else
{
// Allocate a new item
m_pItem[key] = new ITEM;
if (m_pItem[key])
{
m_pItem[key]->pData = (void*) new CHAR[dwSize];
}
else
{
return FALSE;
}
}
if (m_pItem[key]->pData)
{
memcpy( m_pItem[key]->pData, pData, dwSize );
m_pItem[key]->dwSize = dwSize;
return TRUE;
}
return FALSE;
}
// Get the data with the specified key
void* CStorage::Get(STORAGEKEY key)
{
if (key < MAX_STORGE_ITEM)
{
if (m_pItem[key])
{
return m_pItem[key]->pData;
}
}
return NULL;
}
// Compare the data with the specified key with the data
// pointed by pData with size dwSize
BOOL CStorage::Compare
(
STORAGEKEY key,
void far * pData,
DWORD dwSize
)
{
// Make sure key is within our range
if (key < MAX_STORGE_ITEM)
{
// make sure item is non-null
if (m_pItem[key])
{
// make sure item has data
if (m_pItem[key]->pData && pData)
{
if (m_pItem[key]->dwSize == dwSize)
{
if (memcmp(m_pItem[key]->pData,
pData,
dwSize) == 0)
{
return TRUE;
}
}
}
}
}
return FALSE;
}