pool = mgr->pool + slot;
if( pool->slot )
#ifdef unix
- munmap (pool->map, (mgr->poolmask+1) << mgr->page_bits);
+ munmap (pool->map, (uid)(mgr->poolmask+1) << mgr->page_bits);
#else
{
FlushViewOfFile(pool->map, 0);
#ifdef unix
flag = PROT_READ | ( bt->mgr->mode == BT_ro ? 0 : PROT_WRITE );
- pool->map = mmap (0, (bt->mgr->poolmask+1) << bt->mgr->page_bits, flag, MAP_SHARED, bt->mgr->idx, off);
+ pool->map = mmap (0, (uid)(bt->mgr->poolmask+1) << bt->mgr->page_bits, flag, MAP_SHARED, bt->mgr->idx, off);
if( pool->map == MAP_FAILED )
return bt->err = BTERR_map;
return bt->err = BTERR_map;
flag = ( bt->mgr->mode == BT_ro ? FILE_MAP_READ : FILE_MAP_WRITE );
- pool->map = MapViewOfFile(pool->hmap, flag, (DWORD)(off >> 32), (DWORD)off, (bt->mgr->poolmask+1) << bt->mgr->page_bits);
+ pool->map = MapViewOfFile(pool->hmap, flag, (DWORD)(off >> 32), (DWORD)off, (uid)(bt->mgr->poolmask+1) << bt->mgr->page_bits);
if( !pool->map )
return bt->err = BTERR_map;
#endif
// remove old file mapping
#ifdef unix
- munmap (pool->map, (bt->mgr->poolmask+1) << bt->mgr->page_bits);
+ munmap (pool->map, (uid)(bt->mgr->poolmask+1) << bt->mgr->page_bits);
#else
// FlushViewOfFile(pool->map, 0);
UnmapViewOfFile(pool->map);
else
return 0;
- // if key exists, return TRUE
- // otherwise return FALSE
+ // if key exists, return >= 0 value bytes copied
+ // otherwise return (-1)
- if( !keycmp (ptr, key, keylen) ) {
+ if( !slotptr(set->page, slot)->dead && !keycmp (ptr, key, keylen) ) {
val = valptr (set->page,slot);
if( valmax > val->len )
valmax = val->len;
// set up the slot
- slotptr(page, idx)->off = nxt;
+ slotptr(page, ++idx)->off = nxt;
if( !(slotptr(page, idx)->dead = slotptr(bt->frame, cnt)->dead) )
page->act++;
return bt->err;
}
- // if key already exists, update id and return
+ // if key already exists, update value and return
if( reuse = !keycmp (ptr, key, keylen) )
if( val = valptr(set->page, slot), val->len >= vallen ) {
}
typedef struct {
- char type, idx;
+ char idx;
+ char *type;
char *infile;
BtMgr *mgr;
int num;
bt = bt_open (args->mgr);
- switch(args->type | 0x20)
+ switch(args->type[0] | 0x20)
{
case 'a':
fprintf(stderr, "started latch mgr audit\n");
else if( args->num )
sprintf((char *)key+len, "%.9d", line + args->idx * args->num), len += 9;
+ if( (args->type[1] | 0x20) == 'p' )
+ len = 10;
if( bt_deletekey (bt, key, len, 0) )
fprintf(stderr, "Error %d Line: %d\n", bt->err, line), exit(0);
len = 0;
else if( args->num )
sprintf((char *)key+len, "%.9d", line + args->idx * args->num), len += 9;
+ if( (args->type[1] | 0x20) == 'p' )
+ len = 10;
if( bt_findkey (bt, key, len, NULL, 0) == 0 )
found++;
else if( bt->err )
for( idx = 0; idx < cnt; idx++ ) {
args[idx].infile = argv[idx + 7];
- args[idx].type = argv[2][0];
+ args[idx].type = argv[2];
args[idx].mgr = mgr;
args[idx].num = num;
args[idx].idx = idx;