X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=isamb%2Fisamb.c;h=b09ea62adf2a9d94f5eebef72394a4e847f344bf;hb=7932a969b3849997dfc607686b19fab1637cd26e;hp=d1722e0472502c06a427cfdf461d54a9fe9e8eac;hpb=5437b50633032595afe6f87dc0f989bc92a5aea8;p=idzebra-moved-to-github.git diff --git a/isamb/isamb.c b/isamb/isamb.c index d1722e0..b09ea62 100644 --- a/isamb/isamb.c +++ b/isamb/isamb.c @@ -1,5 +1,5 @@ -/* $Id: isamb.c,v 1.59 2004-11-19 10:27:09 heikki Exp $ - Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004 +/* $Id: isamb.c,v 1.64 2005-01-02 23:24:07 adam Exp $ + Copyright (C) 1995-2005 Index Data Aps This file is part of the Zebra server. @@ -21,9 +21,9 @@ Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA */ #include +#include #include -#include -#include +#include #include #ifndef ISAMB_DEBUG @@ -205,10 +205,14 @@ ISAMB isamb_open (BFiles bfs, const char *name, int writeflag, ISAMC_M *method, isamb->file[i].head.first_block = ISAMB_CACHE_ENTRY_SIZE/b_size+1; isamb->file[i].head.last_block = isamb->file[i].head.first_block; isamb->file[i].head.block_size = b_size; +#if ISAMB_PTR_CODEC if (i == isamb->no_cat-1 || b_size > 128) isamb->file[i].head.block_offset = 8; else isamb->file[i].head.block_offset = 4; +#else + isamb->file[i].head.block_offset = 11; +#endif isamb->file[i].head.block_max = b_size - isamb->file[i].head.block_offset; isamb->file[i].head.free_list = 0; @@ -384,7 +388,7 @@ void isamb_close (ISAMB isamb) encode_ptr(&dst, isamb->file[i].head.block_size); encode_ptr(&dst, isamb->file[i].head.block_max); encode_ptr(&dst, isamb->file[i].head.free_list); - memset(dst, '\0', 16); /* ensure no random bytes are written */ + memset(dst, '\0', b_size); /* ensure no random bytes are written */ len = dst - hbuf; @@ -1094,7 +1098,7 @@ ISAMB_P isamb_merge (ISAMB b, ISAMC_P pos, ISAMC_I *stream) char *dst = p2->bytes + p2->size; encode_ptr (&dst, p->pos); - assert (sub_size < 40); + assert (sub_size < 80 && sub_size > 1); encode_ptr (&dst, sub_size); memcpy (dst, sub_item, sub_size); dst += sub_size; @@ -1129,6 +1133,8 @@ ISAMB_PP isamb_pp_open_x (ISAMB isamb, ISAMB_P pos, int *level, int scope) ISAMB_PP pp = xmalloc (sizeof(*pp)); int i; + assert(pos); + pp->isamb = isamb; pp->block = xmalloc (ISAMB_MAX_LEVEL * sizeof(*pp->block)); @@ -1152,8 +1158,6 @@ ISAMB_PP isamb_pp_open_x (ISAMB isamb, ISAMB_P pos, int *level, int scope) pp->no_blocks++; if (p->leaf) break; - - decode_ptr (&src, &pos); p->offset = src - p->bytes; pp->level++;