X-Git-Url: http://git.indexdata.com/?p=idzebra-moved-to-github.git;a=blobdiff_plain;f=isamb%2Fisamb.c;h=8e464ba951e651cb3f18030fd57d9fbe9fff9ecd;hp=dd2f84aecbaa257c6a761b2a6916b9674e31b032;hb=0f78f3fe78e859d9f0d3f0d3e13fcd28085dd427;hpb=91500c092797da8e769f1e63ff0c6bd67aad0fc8 diff --git a/isamb/isamb.c b/isamb/isamb.c index dd2f84a..8e464ba 100644 --- a/isamb/isamb.c +++ b/isamb/isamb.c @@ -1,4 +1,4 @@ -/* $Id: isamb.c,v 1.84 2006-09-26 12:56:33 adam Exp $ +/* $Id: isamb.c,v 1.85 2006-11-14 08:12:08 adam Exp $ Copyright (C) 1995-2006 Index Data ApS @@ -199,12 +199,19 @@ ISAMB isamb_open(BFiles bfs, const char *name, int writeflag, ISAMC_M *method, assert(cache == 0); isamb->file = xmalloc(sizeof(*isamb->file) * isamb->no_cat); + + for (i = 0; i < isamb->no_cat; i++) + { + isamb->file[i].bf = 0; + isamb->file[i].head_dirty = 0; + isamb->file[i].cache_entries = 0; + } + for (i = 0; i < isamb->no_cat; i++) { char fname[DST_BUF_SIZE]; char hbuf[DST_BUF_SIZE]; - isamb->file[i].cache_entries = 0; - isamb->file[i].head_dirty = 0; + sprintf(fname, "%s%c", name, i+'A'); if (cache) isamb->file[i].bf = bf_open(bfs, fname, ISAMB_CACHE_ENTRY_SIZE, @@ -212,6 +219,12 @@ ISAMB isamb_open(BFiles bfs, const char *name, int writeflag, ISAMC_M *method, else isamb->file[i].bf = bf_open(bfs, fname, b_size, writeflag); + if (!isamb->file[i].bf) + { + isamb_close(isamb); + return 0; + } + /* fill-in default values (for empty isamb) */ 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; @@ -414,7 +427,8 @@ void isamb_close (ISAMB isamb) bf_write(isamb->file[i].bf, pos, 0, 0, hbuf + pos*b_size); } } - bf_close (isamb->file[i].bf); + if (isamb->file[i].bf) + bf_close (isamb->file[i].bf); } xfree(isamb->file); xfree(isamb->method);