X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=bfile%2Fmfile.c;h=11ee0a620acd04310774e7597cde7ca464096fb9;hb=facded78072e8ebbe652a6cc94b529fad014b184;hp=e3beb1f5582cb0fd757fc942a75d30a55b9082c5;hpb=fa9ed9d37eadc2092f773ccff49c5b6c8b879a9a;p=idzebra-moved-to-github.git diff --git a/bfile/mfile.c b/bfile/mfile.c index e3beb1f..11ee0a6 100644 --- a/bfile/mfile.c +++ b/bfile/mfile.c @@ -4,7 +4,16 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: mfile.c,v $ - * Revision 1.12 1995-11-24 17:26:11 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 + * Several bug fixes. Commit system runs now. + * + * Revision 1.12 1995/11/24 17:26:11 quinn * Mostly about making some ISAM stuff in the config file optional. * * Revision 1.11 1995/11/13 09:32:43 quinn @@ -55,6 +64,7 @@ #include #include #include +#include #include #include @@ -126,6 +136,8 @@ static int file_position(MFile mf, int pos, int offset) if (mf->files[c].fd < 0 && (mf->files[c].fd = open(mf->files[c].path, mf->wr ? O_RDWR|O_CREAT : O_RDONLY, 0666)) < 0) { + if (!mf->wr && errno == ENOENT && off == 0) + return -2; logf (LOG_FATAL|LOG_ERRNO, "Failed to open %s", mf->files[c].path); return -1; } @@ -162,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; @@ -353,8 +366,11 @@ int mf_read(MFile mf, int no, int offset, int num, void *buf) { int rd, toread; - if (file_position(mf, no, offset) < 0) - exit(1); + if ((rd = file_position(mf, no, offset)) < 0) + if (rd == -2) + return 0; + else + exit(1); toread = num ? num : mf->blocksize; if ((rd = read(mf->files[mf->cur_file].fd, buf, toread)) < 0) {