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

84 lines
3.5 KiB
C

/****************************************************************************/
/* abacom.c */
/* */
/* BA code common to DD and WD */
/* */
/* Copyright(c) Microsoft 1997-1998 */
/****************************************************************************/
#ifdef DC_DEBUG
/****************************************************************************/
/* Name: BACheckList */
/* */
/* Purpose: Check the integrity of the BA list */
/****************************************************************************/
void RDPCALL SHCLASS BACheckList(void)
{
unsigned usedCount, freeCount;
unsigned next;
unsigned prev;
UINT32 totalArea;
DC_BEGIN_FN("BACheckList");
/************************************************************************/
/* Check used list */
/************************************************************************/
usedCount = 0;
totalArea = 0;
next = _pShm->ba.firstRect;
prev = BA_INVALID_RECT_INDEX;
while (next != BA_INVALID_RECT_INDEX)
{
TRC_ASSERT((_pShm->ba.bounds[next].inUse),
(TB,"BA used list entry not marked in use"));
TRC_ASSERT((_pShm->ba.bounds[next].iPrev == prev),
(TB,"BA used list entry iPrev not correct (%u, expected %u)",
_pShm->ba.bounds[next].iPrev, prev));
totalArea += _pShm->ba.bounds[next].area;
usedCount++;
prev = next;
next = _pShm->ba.bounds[next].iNext;
}
TRC_ASSERT((usedCount == _pShm->ba.rectsUsed),
(TB,"BA used list inconsistent count (%u, expected %u)",
_pShm->ba.rectsUsed, usedCount));
TRC_ASSERT((usedCount <= BA_TOTAL_NUM_RECTS),
(TB,"Too many used list rectangles (%d)", usedCount));
TRC_ASSERT((totalArea == _pShm->ba.totalArea),
(TB,"BA totalArea not correct (shm=%u, elements=%u)",
_pShm->ba.totalArea, totalArea));
/************************************************************************/
/* Check free list */
/************************************************************************/
freeCount = 0;
next = _pShm->ba.firstFreeRect;
while (next != BA_INVALID_RECT_INDEX)
{
TRC_ASSERT((!_pShm->ba.bounds[next].inUse),
(TB,"BA free list entry not marked free"));
freeCount++;
next = _pShm->ba.bounds[next].iNext;
}
TRC_ASSERT((freeCount == (BA_TOTAL_NUM_RECTS - _pShm->ba.rectsUsed)),
(TB,"BA free list inconsistent count (%u, expected %u)",
freeCount, (BA_TOTAL_NUM_RECTS - _pShm->ba.rectsUsed)));
TRC_ASSERT((freeCount <= BA_TOTAL_NUM_RECTS),
(TB,"Too many free list rectangles (%d)", freeCount));
TRC_ASSERT(((freeCount + usedCount) == BA_TOTAL_NUM_RECTS),
(TB,"Used+free (%u) != total rects", usedCount + freeCount));
DC_END_FN();
}
#endif // DC_DEBUG