X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=bfile%2Fcfile.c;h=6c228f353964182df8845fe13bb1ab2445cb8d6b;hb=7edae22b5d556f3db505615888ef02b950dd5e83;hp=d728dc78b94c2f60b24793d4da02ec81d8b8ec4e;hpb=9cb291694ad137f4e72c8c31203ced6ca3741f2c;p=idzebra-moved-to-github.git diff --git a/bfile/cfile.c b/bfile/cfile.c index d728dc7..6c228f3 100644 --- a/bfile/cfile.c +++ b/bfile/cfile.c @@ -4,7 +4,24 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: cfile.c,v $ - * Revision 1.10 1996-02-07 14:03:46 adam + * Revision 1.15 1996-04-18 16:02:56 adam + * Changed logging a bit. + * Removed warning message when commiting flat shadow files. + * + * Revision 1.14 1996/04/12 07:01:55 adam + * Yet another bug fix (next_block was initialized to 0; now set to 1). + * + * Revision 1.13 1996/04/09 14:48:49 adam + * Bug fix: offset calculation when using flat files was completely broken. + * + * Revision 1.12 1996/04/09 06:47:28 adam + * Function scan_areadef doesn't use sscanf (%n fails on this Linux). + * + * Revision 1.11 1996/03/26 15:59:05 adam + * The directory of the shadow table file can be specified by the new + * bf_lockDir call. + * + * Revision 1.10 1996/02/07 14:03:46 adam * Work on flat indexed shadow files. * * Revision 1.9 1996/02/07 10:08:43 adam @@ -94,6 +111,7 @@ CFile cf_open (MFile mf, MFile_area area, const char *fname, int hash_bytes; cf->rmf = mf; + logf (LOG_LOG, "cf_open %s %s", cf->rmf->name, wflag ? "rdwr" : "rd"); sprintf (path, "%s-b", fname); if (!(cf->block_mf = mf_open (area, path, block_size, wflag))) { @@ -133,6 +151,7 @@ CFile cf_open (MFile mf, MFile_area area, const char *fname, assert (cf->head.hash_size > 2); hash_bytes = cf->head.hash_size * sizeof(int); assert (cf->head.next_bucket > 0); + assert (cf->head.next_block > 0); if (cf->head.state == 1) cf->array = xmalloc (hash_bytes); else @@ -265,7 +284,7 @@ static struct CFile_hash_bucket *new_bucket (CFile cf, int *block_no, int hno) static int cf_lookup_flat (CFile cf, int no) { int hno = (no*sizeof(int))/HASH_BSIZE; - int off = (no*sizeof(int)) - hno*sizeof(HASH_BSIZE); + int off = (no*sizeof(int)) - hno*HASH_BSIZE; int vno = 0; mf_read (cf->hash_mf, hno+cf->head.next_bucket, off, sizeof(int), &vno); @@ -308,11 +327,12 @@ static int cf_lookup_hash (CFile cf, int no) static void cf_write_flat (CFile cf, int no, int vno) { int hno = (no*sizeof(int))/HASH_BSIZE; - int off = (no*sizeof(int)) - hno*sizeof(HASH_BSIZE); + int off = (no*sizeof(int)) - hno*HASH_BSIZE; hno += cf->head.next_bucket; if (hno >= cf->head.flat_bucket) cf->head.flat_bucket = hno+1; + cf->dirty = 1; mf_write (cf->hash_mf, hno, off, sizeof(int), &vno); } @@ -321,7 +341,7 @@ static void cf_moveto_flat (CFile cf) struct CFile_hash_bucket *p; int i, j; - logf (LOG_LOG, "Moving to flat shadow."); + logf (LOG_LOG, "Moving to flat shadow: %s", cf->rmf->name); logf (LOG_LOG, "hits=%d miss=%d bucket_in_memory=%d total=%d", cf->no_hits, cf->no_miss, cf->bucket_in_memory, cf->head.next_bucket - cf->head.first_bucket); @@ -345,6 +365,7 @@ static void cf_moveto_flat (CFile cf) xfree (cf->parray); cf->parray = NULL; cf->head.state = 2; + cf->dirty = 1; } static int cf_lookup (CFile cf, int no) @@ -470,13 +491,13 @@ int cf_write (CFile cf, int no, int offset, int num, const void *buf) int cf_close (CFile cf) { - logf (LOG_LOG, "cf_close"); logf (LOG_LOG, "hits=%d miss=%d bucket_in_memory=%d total=%d", cf->no_hits, cf->no_miss, cf->bucket_in_memory, cf->head.next_bucket - cf->head.first_bucket); flush_bucket (cf, -1); if (cf->dirty) { + logf (LOG_LOG, "dirty. write header"); mf_write (cf->hash_mf, 0, 0, sizeof(cf->head), &cf->head); write_head (cf); } @@ -486,6 +507,7 @@ int cf_close (CFile cf) xfree (cf->parray); xfree (cf->iobuf); xfree (cf); + logf (LOG_LOG, "cf_close %s", cf->rmf->name); return 0; }