X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=threadskv1.c;h=67761e784e7e11bc803af759070d68c1c53a2f00;hb=d7c3af351b1839f3722af5f86a355bb76d3dd6b0;hp=c127f812ff84808126014efdc13a51576841cd6c;hpb=0166a3fce8692dcaa4cfce48b983d233d71305ea;p=btree diff --git a/threadskv1.c b/threadskv1.c index c127f81..67761e7 100644 --- a/threadskv1.c +++ b/threadskv1.c @@ -742,7 +742,7 @@ uint slot; 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); @@ -1125,7 +1125,7 @@ int flag; #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; @@ -1136,7 +1136,7 @@ int flag; 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 @@ -1272,7 +1272,7 @@ BtPool *pool, *node, *next; // 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); @@ -1787,10 +1787,10 @@ int ret; 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; @@ -1859,7 +1859,7 @@ BtVal val; // 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++; @@ -2077,7 +2077,7 @@ BtVal val; 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 ) { @@ -2364,7 +2364,8 @@ BtKey ptr; } typedef struct { - char type, idx; + char idx; + char *type; char *infile; BtMgr *mgr; int num; @@ -2391,7 +2392,7 @@ FILE *in; bt = bt_open (args->mgr); - switch(args->type | 0x20) + switch(args->type[0] | 0x20) { case 'a': fprintf(stderr, "started latch mgr audit\n"); @@ -2452,6 +2453,8 @@ FILE *in; 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; @@ -2474,6 +2477,8 @@ FILE *in; 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 ) @@ -2629,7 +2634,7 @@ BtDb *bt; 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;