diff --git a/src/sys/ubixfsv2/btree.cpp b/src/sys/ubixfsv2/btree.cpp index 4574449..7f38f8f 100644 --- a/src/sys/ubixfsv2/btree.cpp +++ b/src/sys/ubixfsv2/btree.cpp @@ -212,8 +212,9 @@ } // else ubixfsInode * tmpInode = (ubixfsInode *)bnode->childHead[curSlot]; - assert(tmpInode); + for (unsigned int i = 0; i < (B_MAX_CHILD_COUNT+1) >> 1; i++) { + assert(tmpInode); tmpInode = tmpInode->next; } // for i @@ -241,46 +242,51 @@ bNode * newNode = allocEmptyNode(); if (newNode == NULL) return; - unsigned int splitLoc = (B_MAX_KEYS+1) >> 1; - unsigned int shift = B_MAX_KEYS - splitLoc; + unsigned int splitLoc = ((B_MAX_KEYS+1) >> 1); + unsigned int shift = B_MAX_KEYS - splitLoc +1; +cout << "splitLoc: " << splitLoc << endl; +cout << "shift: " << shift << endl; - newNode->used = shift; + newNode->used = splitLoc; newNode->parent = oldNode->parent; newNode->leafNode = oldNode->leafNode; - oldNode->used -= newNode->used+1; + oldNode->used -= newNode->used; + +cout << "newNode->used: " << newNode->used << endl; +cout << "oldNode->used: " << oldNode->used << endl; memcpy(&newNode->keys[0], &oldNode->keys[splitLoc], - sizeof(newNode->keys[0]) * shift); + sizeof(newNode->keys[0]) * (shift-1)); - memset(&oldNode->keys[splitLoc], 0, sizeof(newNode->keys[0]) * shift); + memset(&oldNode->keys[splitLoc], 0, sizeof(newNode->keys[0]) * (shift-1)); memcpy(&newNode->present[0], &oldNode->present[splitLoc], - sizeof(newNode->present[0]) * (shift+1)); + sizeof(newNode->present[0]) * shift); - memset(&oldNode->present[splitLoc], 0, sizeof(newNode->present[0])*(shift+1)); + memset(&oldNode->present[splitLoc], 0, sizeof(newNode->present[0]) * shift); memcpy(&newNode->childHead[0], &oldNode->childHead[splitLoc], - sizeof(newNode->childHead[0]) * (shift+1)); + sizeof(newNode->childHead[0]) * shift); memset(&oldNode->childHead[splitLoc], 0, - sizeof(newNode->childHead[0]) * (shift+1)); + sizeof(newNode->childHead[0]) * shift); memcpy(&newNode->childTail[0], &oldNode->childTail[splitLoc], - sizeof(newNode->childTail[0]) * (shift+1)); + sizeof(newNode->childTail[0]) * shift); memset(&oldNode->childTail[splitLoc], 0, - sizeof(newNode->childTail[0]) * (shift+1)); + sizeof(newNode->childTail[0]) * shift); memcpy(&newNode->childCount[0], &oldNode->childCount[splitLoc], - sizeof(newNode->childCount[0]) * (shift+1)); + sizeof(newNode->childCount[0]) * shift); memset(&oldNode->childCount[splitLoc], 0, - sizeof(newNode->childCount[0]) * (shift+1)); + sizeof(newNode->childCount[0]) * shift); tmpInode = GetFirstNode(newNode); assert(tmpInode); diff --git a/src/sys/ubixfsv2/btree.h b/src/sys/ubixfsv2/btree.h index ca49612..cdfb88c 100644 --- a/src/sys/ubixfsv2/btree.h +++ b/src/sys/ubixfsv2/btree.h @@ -7,7 +7,7 @@ #define B_NODE_MAGIC_1 0xDEADBEEF #define B_NODE_MAGIC_2 0x1900BABE -#define B_MAX_KEYS 14 +#define B_MAX_KEYS 4 #define B_MAX_NAME_LENGTH 256 #define B_MAX_CHILD_COUNT 4