projects
/
idzebra-moved-to-github.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Work on bug #550: Avoid exit. In particular the mfile/cfile/bfile has
[idzebra-moved-to-github.git]
/
isamb
/
isamb.c
diff --git
a/isamb/isamb.c
b/isamb/isamb.c
index
dd2f84a
..
8e464ba
100644
(file)
--- 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
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);
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];
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,
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);
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;
/* 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_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);
}
xfree(isamb->file);
xfree(isamb->method);