[ntoskrnl/cm]

- CmpSelectLeaf fixes: looking into an incorrect cell, returning wrong cell, slightly simplify code and add more comments for clarity. Thanks to Michael Martin for spotting these bugs.

svn path=/trunk/; revision=44285
This commit is contained in:
Aleksey Bragin 2009-11-24 22:56:43 +00:00
parent 5040fe13f1
commit d1aeb20e33

View file

@ -1344,6 +1344,8 @@ CmpSelectLeaf(IN PHHIVE Hive,
*RootCell = &IndexKey->List[SubKeyIndex];
return LeafCell;
}
/* It didn't fit, so proceed to splitting */
}
else
{
@ -1380,22 +1382,22 @@ CmpSelectLeaf(IN PHHIVE Hive,
/* Check if it's above */
if (Result >= 0)
{
/* Get the first cell in the index */
LeafCell = IndexKey->List[0];
/* Get the cell in the index */
LeafCell = IndexKey->List[SubKeyIndex];
LeafKey = (PCM_KEY_INDEX)HvGetCell(Hive, LeafCell);
/* Return an error in case of problems */
if (!LeafKey) return HCELL_NIL;
/* Check if it fits into this leaf and break */
/* Check if it fits into this leaf */
if (LeafKey->Count < CmpMaxIndexPerHblock)
{
/* Fill in the result and return the cell */
*RootCell = &IndexKey->List[SubKeyIndex + 1];
*RootCell = &IndexKey->List[SubKeyIndex];
return LeafCell;
}
/* No, it doesn't fit, check the other leaf */
/* No, it doesn't fit, check the next adjacent leaf */
if (SubKeyIndex < (IndexKey->Count - 1))
{
/* Yes, there is space */
@ -1413,6 +1415,8 @@ CmpSelectLeaf(IN PHHIVE Hive,
return LeafCell;
}
}
/* It didn't fit, so proceed to splitting */
}
else
{
@ -1429,11 +1433,8 @@ CmpSelectLeaf(IN PHHIVE Hive,
/* Check if it fits and break */
if (LeafKey->Count < CmpMaxIndexPerHblock)
{
/* Decrement the subkey index */
SubKeyIndex--;
/* Fill in the result and return the cell */
*RootCell = &IndexKey->List[SubKeyIndex];
*RootCell = &IndexKey->List[SubKeyIndex - 1];
return LeafCell;
}
}