mirror of
https://github.com/reactos/reactos.git
synced 2025-04-21 12:40:33 +00:00
[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:
parent
5040fe13f1
commit
d1aeb20e33
1 changed files with 10 additions and 9 deletions
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue