return free(mgr), free(latchmgr), NULL;
} else if( mode == BT_ro )
return free(latchmgr), bt_mgrclose (mgr), NULL;
+ else
+ initit = 1;
#else
latchmgr = VirtualAlloc(NULL, BT_maxpage, MEM_COMMIT, PAGE_READWRITE);
size = GetFileSize(mgr->idx, amt);
bt_putid(right2->page->left, left_page_no);
bt_unlockpage (BtLockWrite, right2->latch);
bt_unpinlatch (right2->latch);
+ bt_unpinpool (right2->pool);
return 0;
}
BTERR bt_deletekey (BtDb *bt, unsigned char *key, uint len, uint lvl)
{
unsigned char lowerfence[BT_keyarray], higherfence[BT_keyarray];
-BtPageSet set[1], right[1], right2[1];
uint slot, idx, found, fence;
+BtPageSet set[1], right[1];
unsigned char value[BtId];
BtKey *ptr, *tst;
BtVal *val;
val = valptr(bt->frame, cnt);
nxt -= val->len + sizeof(BtVal);
- ((unsigned char *)page)[nxt] = val->len;
- memcpy ((unsigned char *)page + nxt + sizeof(BtVal), val->value, val->len);
+ memcpy ((unsigned char *)page + nxt, val, val->len + sizeof(BtVal));
// copy the key across
continue;
src = valptr(set->page, cnt);
nxt -= src->len + sizeof(BtVal);
- val = (BtVal*)((unsigned char *)bt->frame + nxt);
- memcpy (val->value, src->value, src->len);
- val->len = src->len;
+ memcpy ((unsigned char *)bt->frame + nxt, src, src->len + sizeof(BtVal));
key = keyptr(set->page, cnt);
nxt -= key->len + sizeof(BtKey);
- ptr = (BtKey*)((unsigned char *)bt->frame + nxt);
- memcpy (ptr, key, key->len + sizeof(BtKey));
+ memcpy ((unsigned char *)bt->frame + nxt, key, key->len + sizeof(BtVal));
// add librarian slot
while( cnt++ < max ) {
if( slotptr(bt->frame, cnt)->dead )
continue;
- val = valptr(bt->frame, cnt);
- nxt -= val->len + sizeof(BtVal);
- ((unsigned char *)set->page)[nxt] = val->len;
- memcpy ((unsigned char *)set->page + nxt + sizeof(BtVal), val->value, val->len);
+ src = valptr(bt->frame, cnt);
+ nxt -= src->len + sizeof(BtVal);
+ memcpy ((unsigned char *)set->page + nxt, src, src->len + sizeof(BtVal));
key = keyptr(bt->frame, cnt);
nxt -= key->len + sizeof(BtKey);