139 lines
3.3 KiB
C++
139 lines
3.3 KiB
C++
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
Copyright (c) 1989-1999 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
sdesc.cxx
|
|
|
|
Abstract:
|
|
|
|
stub descriptor manager implementation.
|
|
|
|
Notes:
|
|
|
|
|
|
History:
|
|
|
|
Nov-02-1993 VibhasC Created
|
|
|
|
----------------------------------------------------------------------------*/
|
|
|
|
/****************************************************************************
|
|
* include files
|
|
***************************************************************************/
|
|
|
|
#include "becls.hxx"
|
|
#pragma hdrstop
|
|
|
|
/****************************************************************************
|
|
* local definitions
|
|
***************************************************************************/
|
|
/****************************************************************************
|
|
* local data
|
|
***************************************************************************/
|
|
|
|
/****************************************************************************
|
|
* externs
|
|
***************************************************************************/
|
|
/****************************************************************************/
|
|
|
|
SDESC *
|
|
SDESCMGR::Register(
|
|
PNAME AllocRtnName,
|
|
PNAME FreeRtnName,
|
|
PNAME RundownRtnName )
|
|
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
|
|
Routine Description:
|
|
|
|
The constructor.
|
|
|
|
Arguments:
|
|
|
|
AllocRtnName - The allocator rtn name.
|
|
FreeRtnName - Free rtn name
|
|
InterfaceName - interface name without any mangling.
|
|
RundownRtnName - The context handle rundown in case necessary.
|
|
|
|
Return Value:
|
|
|
|
NA
|
|
|
|
Notes:
|
|
|
|
Make an entry into the dictionary if it does not exist.
|
|
----------------------------------------------------------------------------*/
|
|
{
|
|
SDESC NewDesc;
|
|
SDESC * pNewDesc;
|
|
Dict_Status Status;
|
|
|
|
NewDesc.AllocRtnName = AllocRtnName;
|
|
NewDesc.FreeRtnName = FreeRtnName;
|
|
NewDesc.RundownRtnName = RundownRtnName;
|
|
|
|
Status = Dict_Find( &NewDesc );
|
|
|
|
switch( Status )
|
|
{
|
|
case EMPTY_DICTIONARY:
|
|
case ITEM_NOT_FOUND:
|
|
|
|
pNewDesc = new SDESC;
|
|
pNewDesc->AllocRtnName = AllocRtnName;
|
|
pNewDesc->FreeRtnName = FreeRtnName;
|
|
pNewDesc->RundownRtnName = RundownRtnName;
|
|
pNewDesc->ResetEmitted();
|
|
|
|
Dict_Insert( (pUserType)pNewDesc );
|
|
return pNewDesc;
|
|
|
|
default:
|
|
return (SDESC *)Dict_Curr_Item();
|
|
|
|
}
|
|
}
|
|
|
|
SSIZE_T
|
|
SDESCMGR::Compare(
|
|
pUserType pFirst,
|
|
pUserType pSecond )
|
|
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
|
|
Routine Description:
|
|
|
|
Compare stub descriptors.
|
|
|
|
Arguments:
|
|
|
|
pFirst - A pointer to the first stub descriptor.
|
|
pSecond - A pointer to the second stub descriptor.
|
|
|
|
Return Value:
|
|
|
|
Notes:
|
|
|
|
WE MAKE AN ASSUMPTION THAT THE ALLOC AND FREE AND RUNDOWN ROUTINE NAMES
|
|
WILL NEVER BE NULL POINTERS. IF NOTHING, THEY MUST POINT TO NULL STRINGS
|
|
----------------------------------------------------------------------------*/
|
|
{
|
|
SDESC * p1 = (SDESC *)pFirst;
|
|
SDESC * p2 = (SDESC *)pSecond;
|
|
int Result;
|
|
|
|
if( (Result = strcmp( (const char *)p1->AllocRtnName,
|
|
(const char *)p2->AllocRtnName ) ) == 0 )
|
|
{
|
|
if( (Result = strcmp( (const char *)p1->FreeRtnName,
|
|
(const char *)p2->FreeRtnName ) ) == 0 )
|
|
{
|
|
Result = strcmp( (const char *)p1->RundownRtnName,
|
|
(const char *)p2->RundownRtnName );
|
|
}
|
|
}
|
|
|
|
return Result;
|
|
}
|
|
void
|
|
PrintSDesc( void * ) { }
|