Windows2003-3790/termsrv/drivers/rdp/inc/aoacom.c
2020-09-30 16:53:55 +02:00

75 lines
2.5 KiB
C

/****************************************************************************/
// aoacom.c
//
// Functions common to OA in WD and DD
//
// Copyright (C) 1997-2000 Microsoft Corporation
/****************************************************************************/
#ifdef DLL_DISP
#define _pShm pddShm
#else
#define _pShm m_pShm
#endif
/****************************************************************************/
// OA_ResetOrderList
//
// Frees all Orders and Additional Order Data in the Order List.
// Frees up the Order Heap memory.
/****************************************************************************/
__inline void SHCLASS OA_ResetOrderList()
{
// Simply clear the list head, the heap contents become useless.
_pShm->oa.TotalOrderBytes = 0;
_pShm->oa.nextOrder = 0;
InitializeListHead(&_pShm->oa.orderListHead);
}
/****************************************************************************/
// OA_RemoveListOrder
//
// Removes the specified order from the Order List by marking it as spoilt.
// Returns a pointer to the order following the removed order.
/****************************************************************************/
PINT_ORDER SHCLASS OA_RemoveListOrder(PINT_ORDER pCondemnedOrder)
{
PINT_ORDER pNextOrder;
DC_BEGIN_FN("OA_RemoveListOrder");
TRC_DBG((TB, "Remove list order (%p)", pCondemnedOrder));
// Store a ptr to the next order. If we are at the end of the list
// we return NULL.
if (pCondemnedOrder->list.Flink != &_pShm->oa.orderListHead)
pNextOrder = CONTAINING_RECORD(pCondemnedOrder->list.Flink,
INT_ORDER, list);
else
pNextOrder = NULL;
// Remove the order.
RemoveEntryList(&pCondemnedOrder->list);
TRC_ASSERT((_pShm->oa.TotalOrderBytes >= pCondemnedOrder->OrderLength),
(TB,"We're removing too many bytes from the order heap - "
"TotalOrderBytes=%u, ord size to remove=%u",
_pShm->oa.TotalOrderBytes, pCondemnedOrder->OrderLength));
_pShm->oa.TotalOrderBytes -= pCondemnedOrder->OrderLength;
// Check that the list is still consistent with the total number of
// order bytes.
if (_pShm->oa.TotalOrderBytes == 0 &&
!IsListEmpty(&_pShm->oa.orderListHead)) {
TRC_ERR((TB, "List not empty when total ord bytes==0"));
InitializeListHead(&_pShm->oa.orderListHead);
}
DC_END_FN();
return pNextOrder;
}