Author: fireball Date: Tue Nov 24 23:56:43 2009 New Revision: 44285
URL: http://svn.reactos.org/svn/reactos?rev=44285&view=rev Log: [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.
Modified: trunk/reactos/ntoskrnl/config/cmindex.c
Modified: trunk/reactos/ntoskrnl/config/cmindex.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/config/cmindex.c?r... ============================================================================== --- trunk/reactos/ntoskrnl/config/cmindex.c [iso-8859-1] (original) +++ trunk/reactos/ntoskrnl/config/cmindex.c [iso-8859-1] Tue Nov 24 23:56:43 2009 @@ -1344,6 +1344,8 @@ *RootCell = &IndexKey->List[SubKeyIndex]; return LeafCell; } + + /* It didn't fit, so proceed to splitting */ } else { @@ -1380,22 +1382,22 @@ /* 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 @@ return LeafCell; } } + + /* It didn't fit, so proceed to splitting */ } else { @@ -1429,11 +1433,8 @@ /* 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; } }