-/* $Id: isamb.c,v 1.89 2006-12-18 23:40:08 adam Exp $
- Copyright (C) 1995-2006
+/* $Id: isamb.c,v 1.93 2007-04-03 16:54:46 adam Exp $
+ Copyright (C) 1995-2007
Index Data ApS
This file is part of the Zebra server.
if (memcmp(hbuf, "isamb", 5))
{
yaz_log(YLOG_WARN, "bad isamb header for file %s", fname);
+ isamb_close(isamb);
return 0;
}
if (sscanf(hbuf+5, "%d %d %d", &major, &minor, &len) != 3)
{
yaz_log(YLOG_WARN, "bad isamb header for file %s", fname);
+ isamb_close(isamb);
return 0;
}
if (major != ISAMB_MAJOR_VERSION)
{
yaz_log(YLOG_WARN, "bad major version for file %s %d, must be %d",
fname, major, ISAMB_MAJOR_VERSION);
+ isamb_close(isamb);
return 0;
}
for (left = len - sizes[i]; left > 0; left = left - sizes[i])
yaz_log(YLOG_WARN, "truncated isamb header for "
"file=%s len=%d pos=%d",
fname, len, pos);
+ isamb_close(isamb);
return 0;
}
}
decode_ptr(&src, &isamb->root_ptr);
}
assert (isamb->file[i].head.block_size >= isamb->file[i].head.block_offset);
- isamb->file[i].head_dirty = 0;
+ /* must rewrite the header if root ptr is in use (bug #1017) */
+ if (use_root_ptr && writeflag)
+ isamb->file[i].head_dirty = 1;
+ else
+ isamb->file[i].head_dirty = 0;
assert(isamb->file[i].head.block_size == sizes[i]);
}
#if ISAMB_DEBUG
yaz_log(YLOG_DEBUG, "isamb_close returned "ZINT_FORMAT" values, "
"skipped "ZINT_FORMAT,
isamb->skipped_numbers, isamb->returned_numbers);
+
for (i = 0; i<isamb->no_cat; i++)
{
flush_blocks (isamb, i);
#else
zint item_len;
decode_item_len(&src, &item_len);
- assert (item_len > 0 && item_len < 80);
+ assert (item_len > 0 && item_len < 128);
src += item_len;
#endif
decode_ptr(&src, &pos);
#if INT_ENCODE
const char *sub_item_ptr = sub_item;
#endif
- assert (sub_size < 80 && sub_size > 1);
+ assert (sub_size < 128 && sub_size > 1);
memcpy (dst, startp, src - startp);
#endif
encode_ptr(&dst, p->pos);
- assert (sub_size < 80 && sub_size > 1);
+ assert (sub_size < 128 && sub_size > 1);
#if INT_ENCODE
(*b->method->codec.reset)(c1);
(*b->method->codec.encode)(c1, &dst, &sub_item_ptr);