* Sebastian Hammer, Adam Dickmeiss
*
* $Log: isamc.c,v $
- * Revision 1.6 1996-11-08 11:15:29 adam
+ * Revision 1.8 1997-09-17 12:19:20 adam
+ * Zebra version corresponds to YAZ version 1.4.
+ * Changed Zebra server so that it doesn't depend on global common_resource.
+ *
+ * Revision 1.7 1997/02/12 20:42:43 adam
+ * Bug fix: during isc_merge operations, some pages weren't marked dirty
+ * even though they should be. At this point the merge operation marks
+ * a page dirty if the previous page changed at all. A better approach is
+ * to mark it dirty if the last key written changed in previous page.
+ *
+ * Revision 1.6 1996/11/08 11:15:29 adam
* Number of keys in chain are stored in first block and the function
* to retrieve this information, isc_pp_num is implemented.
*
}
-ISAMC isc_open (const char *name, int writeflag, ISAMC_M method)
+ISAMC isc_open (BFiles bfs, const char *name, int writeflag, ISAMC_M method)
{
ISAMC is;
ISAMC_filecat filecat;
char fname[512];
sprintf (fname, "%s%c", name, i+'A');
- is->files[i].bf = bf_open (fname, is->method->filecat[i].bsize,
+ is->files[i].bf = bf_open (bfs, fname, is->method->filecat[i].bsize,
writeflag);
is->files[i].head_is_dirty = 0;
if (!bf_read (is->files[i].bf, 0, 0, sizeof(ISAMC_head),
int isc_read_block (ISAMC is, int cat, int pos, char *dst)
{
++(is->files[cat].no_reads);
- if (is->method->debug > 2)
- logf (LOG_LOG, "isc: read_block %d %d", cat, pos);
return bf_read (is->files[cat].bf, pos, 0, 0, dst);
}
assert (pp->next != pp->pos);
pp->offset = src - pp->buf;
assert (pp->offset == ISAMC_BLOCK_OFFSET_1);
+ if (is->method->debug > 2)
+ logf (LOG_LOG, "isc: read_block size=%d %d %d",
+ pp->size, pp->cat, pp->pos);
}
return pp;
}
isc_release_block (is, pp->cat, pp->pos);
(*is->method->code_item)(ISAMC_DECODE, pp->decodeClientData, dst, &src);
pp->offset = src - pp->buf;
+ if (is->method->debug > 2)
+ logf (LOG_LOG, "isc: read_block size=%d %d %d",
+ pp->size, pp->cat, pp->pos);
return 2;
}
(*is->method->code_item)(ISAMC_DECODE, pp->decodeClientData, dst, &src);