-Records rec_open(BFiles bfs, int rw, int compression_method)
-{
- Records p;
- int i, r;
- int version;
- ZEBRA_RES ret = ZEBRA_OK;
-
- p = (Records) xmalloc(sizeof(*p));
- memset(&p->head, '\0', sizeof(p->head));
- p->compression_method = compression_method;
- p->rw = rw;
- p->tmp_size = 1024;
- p->recindex = recindex_open(bfs, rw);
- p->tmp_buf = (char *) xmalloc(p->tmp_size);
- r = rec_read_head(p->recindex, p->tmp_buf);
- switch (r)
- {
- case 0:
- memcpy(p->head.magic, REC_HEAD_MAGIC, sizeof(p->head.magic));
- sprintf(p->head.version, "%3d", REC_VERSION);
- p->head.index_free = 0;
- p->head.index_last = 1;
- p->head.no_records = 0;
- p->head.total_bytes = 0;
- for (i = 0; i<REC_BLOCK_TYPES; i++)
- {
- p->head.block_free[i] = 0;
- p->head.block_last[i] = 1;
- p->head.block_used[i] = 0;
- }
- p->head.block_size[0] = 128;
- p->head.block_move[0] = 0;
- for (i = 1; i<REC_BLOCK_TYPES; i++)
- {
- p->head.block_size[i] = p->head.block_size[i-1] * 4;
- p->head.block_move[i] = p->head.block_size[i] * 24;
- }
- if (rw)
- {
- if (rec_write_head(p->recindex, &p->head, sizeof(p->head)) != ZEBRA_OK)
- ret = ZEBRA_FAIL;
- }
- break;
- case 1:
- memcpy(&p->head, p->tmp_buf, sizeof(p->head));
- if (memcmp(p->head.magic, REC_HEAD_MAGIC, sizeof(p->head.magic)))
- {
- yaz_log(YLOG_FATAL, "file %s has bad format",
- recindex_get_fname(p->recindex));
- ret = ZEBRA_FAIL;
- }
- version = atoi(p->head.version);
- if (version != REC_VERSION)
- {
- yaz_log(YLOG_FATAL, "file %s is version %d, but version"
- " %d is required",
- recindex_get_fname(p->recindex), version, REC_VERSION);
- ret = ZEBRA_FAIL;
- }
- break;
- }
- for (i = 0; i<REC_BLOCK_TYPES; i++)