X-Git-Url: http://sru.miketaylor.org.uk/?a=blobdiff_plain;f=bfile%2Fmfile.c;h=7d81a98eeb785b5788c94cd3c169212e3d5aa6cb;hb=fe8a4ac0e92103284e9888f0c13c141f4711d9a3;hp=e3beb1f5582cb0fd757fc942a75d30a55b9082c5;hpb=fa9ed9d37eadc2092f773ccff49c5b6c8b879a9a;p=idzebra-moved-to-github.git diff --git a/bfile/mfile.c b/bfile/mfile.c index e3beb1f..7d81a98 100644 --- a/bfile/mfile.c +++ b/bfile/mfile.c @@ -4,7 +4,19 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: mfile.c,v $ - * Revision 1.12 1995-11-24 17:26:11 quinn + * Revision 1.16 1995-12-12 15:57:57 adam + * Implemented mf_unlink. cf_unlink uses mf_unlink. + * + * 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 +67,7 @@ #include #include #include +#include #include #include @@ -126,6 +139,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 +177,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 +369,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) { @@ -461,7 +480,10 @@ int mf_write(MFile mf, int no, int offset, int num, const void *buf) */ int mf_unlink(MFile mf) { - abort(); + int i; + + for (i = 0; i < mf->no_files; i++) + unlink (mf->files[i].path); return 0; }