X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=bfile%2Fcfile.c;h=a6390c2179edc4383dcfd9a09a4224444c32269d;hb=0373ce8620c5c9254a8e3fedc3ac7894cfdc7a60;hp=284de863acf25f793dfae8a4ed4b70adc15d014f;hpb=bc1fc7bc062889d184f91a501156c6698011fefb;p=idzebra-moved-to-github.git diff --git a/bfile/cfile.c b/bfile/cfile.c index 284de86..a6390c2 100644 --- a/bfile/cfile.c +++ b/bfile/cfile.c @@ -4,7 +4,18 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: cfile.c,v $ - * Revision 1.5 1995-12-08 16:21:14 adam + * Revision 1.8 1995-12-15 12:36:52 adam + * Moved hash file information to union. + * Renamed commit files. + * + * Revision 1.7 1995/12/15 10:35:07 adam + * Changed names of commit files. + * + * Revision 1.6 1995/12/11 09:03:53 adam + * New function: cf_unlink. + * New member of commit file head: state (0) deleted, (1) hash file. + * + * Revision 1.5 1995/12/08 16:21:14 adam * Work on commit/update. * * Revision 1.4 1995/12/01 16:24:28 adam @@ -31,7 +42,7 @@ static int write_head (CFile cf) { - int left = cf->head.hash_size * sizeof(int); + int left = cf->head.u.hash.hash_size * sizeof(int); int bno = 1; const char *tab = (char*) cf->array; @@ -48,7 +59,7 @@ static int write_head (CFile cf) static int read_head (CFile cf) { - int left = cf->head.hash_size * sizeof(int); + int left = cf->head.u.hash.hash_size * sizeof(int); int bno = 1; char *tab = (char*) cf->array; @@ -73,32 +84,34 @@ CFile cf_open (MFile mf, MFile_area area, const char *fname, int hash_bytes; cf->rmf = mf; - sprintf (path, "%s.b", fname); + sprintf (path, "%s-b", fname); if (!(cf->block_mf = mf_open (area, path, block_size, wflag))) { logf (LOG_FATAL|LOG_ERRNO, "Failed to open %s", path); exit (1); } - sprintf (path, "%s.h", fname); + sprintf (path, "%s-i", fname); if (!(cf->hash_mf = mf_open (area, path, HASH_BSIZE, wflag))) { logf (LOG_FATAL|LOG_ERRNO, "Failed to open %s", path); exit (1); } - if (!firstp || !mf_read (cf->hash_mf, 0, 0, sizeof(cf->head), &cf->head)) + assert (firstp); + if (!mf_read (cf->hash_mf, 0, 0, sizeof(cf->head), &cf->head) || + !cf->head.state) { - if (firstp) - *firstp = 1; - cf->head.block_size = block_size; - cf->head.hash_size = 401; - hash_bytes = cf->head.hash_size * sizeof(int); - cf->head.next_bucket = + *firstp = 1; + cf->head.state = 1; + cf->head.u.hash.block_size = block_size; + cf->head.u.hash.hash_size = 401; + hash_bytes = cf->head.u.hash.hash_size * sizeof(int); + cf->head.u.hash.next_bucket = (hash_bytes+sizeof(cf->head))/HASH_BSIZE + 2; - cf->head.next_block = 1; + cf->head.u.hash.next_block = 1; if (wflag) mf_write (cf->hash_mf, 0, 0, sizeof(cf->head), &cf->head); cf->array = xmalloc (hash_bytes); - for (i = 0; ihead.hash_size; i++) + for (i = 0; ihead.u.hash.hash_size; i++) cf->array[i] = 0; if (wflag) write_head (cf); @@ -106,28 +119,28 @@ CFile cf_open (MFile mf, MFile_area area, const char *fname, else { *firstp = 0; - assert (cf->head.block_size == block_size); - assert (cf->head.hash_size > 2 && cf->head.hash_size < 200000); - hash_bytes = cf->head.hash_size * sizeof(int); - assert (cf->head.next_bucket > 0); + assert (cf->head.u.hash.block_size == block_size); + assert (cf->head.u.hash.hash_size > 2); + hash_bytes = cf->head.u.hash.hash_size * sizeof(int); + assert (cf->head.u.hash.next_bucket > 0); cf->array = xmalloc (hash_bytes); read_head (cf); } - cf->parray = xmalloc (cf->head.hash_size * sizeof(*cf->parray)); - for (i = 0; ihead.hash_size; i++) + cf->parray = xmalloc (cf->head.u.hash.hash_size * sizeof(*cf->parray)); + for (i = 0; ihead.u.hash.hash_size; i++) cf->parray[i] = NULL; cf->bucket_lru_front = cf->bucket_lru_back = NULL; cf->bucket_in_memory = 0; cf->max_bucket_in_memory = 400; cf->dirty = 0; - cf->iobuf = xmalloc (cf->head.block_size); - memset (cf->iobuf, 0, cf->head.block_size); + cf->iobuf = xmalloc (cf->head.u.hash.block_size); + memset (cf->iobuf, 0, cf->head.u.hash.block_size); return cf; } static int cf_hash (CFile cf, int no) { - return (no>>3) % cf->head.hash_size; + return (no>>3) % cf->head.u.hash.hash_size; } static void release_bucket (CFile cf, struct CFile_hash_bucket *p) @@ -215,7 +228,7 @@ static struct CFile_hash_bucket *new_bucket (CFile cf, int *block_no, int hno) struct CFile_hash_bucket *p; int i; - *block_no = cf->head.next_bucket++; + *block_no = cf->head.u.hash.next_bucket++; p = alloc_bucket (cf, *block_no, hno); for (i = 0; iparray[hno]; int *bucketpp = &cf->array[hno]; int i; - int vno = (cf->head.next_block)++; + int vno = (cf->head.u.hash.next_block)++; for (hb = cf->parray[hno]; hb; hb = hb->h_next) if (!hb->ph.vno[HASH_BUCKET-1])