From bc1fc7bc062889d184f91a501156c6698011fefb Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Fri, 8 Dec 1995 16:21:13 +0000 Subject: [PATCH] Work on commit/update. --- bfile/bfile.c | 75 +++++++++++++++++++++++++++++++++++++++++++++------------ bfile/cfile.c | 10 +++++--- bfile/mfile.c | 8 ++++-- 3 files changed, 73 insertions(+), 20 deletions(-) diff --git a/bfile/bfile.c b/bfile/bfile.c index 46c4d76..85b01bb 100644 --- a/bfile/bfile.c +++ b/bfile/bfile.c @@ -4,7 +4,10 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: bfile.c,v $ - * Revision 1.15 1995-12-01 16:24:28 adam + * Revision 1.16 1995-12-08 16:21:13 adam + * Work on commit/update. + * + * Revision 1.15 1995/12/01 16:24:28 adam * Commit files use separate meta file area. * * Revision 1.14 1995/12/01 11:37:21 adam @@ -51,6 +54,7 @@ #include #include #include +#include #include #include @@ -58,17 +62,22 @@ static MFile_area commit_area = NULL; -void bf_cache (void) +void bf_cache (int enableFlag) { - if (!commit_area) - if (res_get (common_resource, "commit")) - commit_area = mf_init ("commit"); - else - { - logf (LOG_FATAL, "Commit area must be defined if commit" - "is to be enabled"); - exit (1); - } + if (enableFlag) + { + if (!commit_area) + if (res_get (common_resource, "commit")) + commit_area = mf_init ("commit"); + else + { + logf (LOG_FATAL, "Commit area must be defined if commit" + "is to be enabled"); + exit (1); + } + } + else + commit_area = NULL; } int bf_close (BFile bf) @@ -90,10 +99,10 @@ BFile bf_open (const char *name, int block_size, int wflag) int first_time; logf (LOG_LOG, "cf,mf_open %s", name); + tmp->mf = mf_open (0, name, block_size, 0); tmp->cf = cf_open (tmp->mf, commit_area, name, block_size, wflag, &first_time); - if (first_time) { outf = fopen ("cache", "a"); @@ -131,7 +140,20 @@ int bf_write (BFile bf, int no, int offset, int num, const void *buf) return mf_write (bf->mf, no, offset, num, buf); } -void bf_commit (void) +int bf_commitExists (void) +{ + FILE *inf; + + inf = fopen ("cache", "r"); + if (inf) + { + fclose (inf); + return 1; + } + return 0; +} + +void bf_commitExec (void) { FILE *inf; int block_size; @@ -143,8 +165,8 @@ void bf_commit (void) assert (commit_area); if (!(inf = fopen ("cache", "r"))) { - logf (LOG_FATAL|LOG_ERRNO, "cannot open commit %s", "cache"); - exit (1); + logf (LOG_LOG, "No commit file"); + return ; } while (fscanf (inf, "%s %d", path, &block_size) == 2) { @@ -158,3 +180,26 @@ void bf_commit (void) } fclose (inf); } + +void bf_commitClean (void) +{ + FILE *inf; + int block_size; + char path[256]; + MFile mf; + CFile cf; + + assert (commit_area); + if (!(inf = fopen ("cache", "r"))) + return ; + while (fscanf (inf, "%s %d", path, &block_size) == 2) + { + mf = mf_open (0, path, block_size, 0); + cf = cf_open (mf, commit_area, path, block_size, 1, NULL); + + cf_close (cf); + mf_close (mf); + } + fclose (inf); + unlink ("cache"); +} diff --git a/bfile/cfile.c b/bfile/cfile.c index cfcd6da..284de86 100644 --- a/bfile/cfile.c +++ b/bfile/cfile.c @@ -4,7 +4,10 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: cfile.c,v $ - * Revision 1.4 1995-12-01 16:24:28 adam + * Revision 1.5 1995-12-08 16:21:14 adam + * Work on commit/update. + * + * Revision 1.4 1995/12/01 16:24:28 adam * Commit files use separate meta file area. * * Revision 1.3 1995/12/01 11:37:22 adam @@ -82,9 +85,10 @@ CFile cf_open (MFile mf, MFile_area area, const char *fname, logf (LOG_FATAL|LOG_ERRNO, "Failed to open %s", path); exit (1); } - if (!mf_read (cf->hash_mf, 0, 0, sizeof(cf->head), &cf->head)) + if (!firstp || !mf_read (cf->hash_mf, 0, 0, sizeof(cf->head), &cf->head)) { - *firstp = 1; + if (firstp) + *firstp = 1; cf->head.block_size = block_size; cf->head.hash_size = 401; hash_bytes = cf->head.hash_size * sizeof(int); diff --git a/bfile/mfile.c b/bfile/mfile.c index 7c397b6..11ee0a6 100644 --- a/bfile/mfile.c +++ b/bfile/mfile.c @@ -4,7 +4,10 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: mfile.c,v $ - * Revision 1.14 1995-12-05 13:12:37 quinn + * Revision 1.15 1995-12-08 16:21:14 adam + * Work on commit/update. + * + * Revision 1.14 1995/12/05 13:12:37 quinn * Added * * Revision 1.13 1995/11/30 17:00:50 adam @@ -171,7 +174,8 @@ MFile_area mf_init(const char *name) logf (LOG_DEBUG, "mf_init(%s)", name); for (mp = open_areas; mp; mp = mp->next) if (!strcmp(name, mp->name)) - abort(); + return mp; + ma = xmalloc(sizeof(MFile_area_struct)); strcpy(ma->name, name); ma->next = open_areas; open_areas = ma; -- 1.7.10.4