X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=bfile%2Fmfile.c;h=a87ac69c0b87449c94b2beee955f614cb057137b;hb=5f8ba9f35bd3c9aeafe26613021f2edd141b8611;hp=8443799752b5eb9597406ec032b66c7e0f57ba66;hpb=2771f5feddda09bed04d609683bf95df053924a4;p=idzebra-moved-to-github.git diff --git a/bfile/mfile.c b/bfile/mfile.c index 8443799..a87ac69 100644 --- a/bfile/mfile.c +++ b/bfile/mfile.c @@ -4,7 +4,22 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: mfile.c,v $ - * Revision 1.18 1996-04-09 06:47:30 adam + * Revision 1.23 1997-09-09 13:37:53 adam + * Partial port to WIN95/NT. + * + * Revision 1.22 1997/09/04 13:56:39 adam + * Added O_BINARY to open calls. + * + * Revision 1.21 1996/10/29 13:56:18 adam + * Include of zebrautl.h instead of alexutil.h. + * + * Revision 1.20 1996/05/14 12:10:16 quinn + * Bad areadef scan + * + * Revision 1.19 1996/05/01 07:16:30 quinn + * Fixed ancient bug. + * + * Revision 1.18 1996/04/09 06:47:30 adam * Function scan_areadef doesn't use sscanf (%n fails on this Linux). * * Revision 1.17 1996/03/20 13:29:11 quinn @@ -68,14 +83,19 @@ #include #include +#ifdef WINDOWS +#include +#else #include -#include +#endif +#include +#include #include #include #include #include -#include +#include #include static MFile_area_struct *open_areas = 0; @@ -131,7 +151,7 @@ static int scan_areadef(MFile_area ma, const char *name) else if (*ad == '+') ad++; size = 0; - if (*ad <= '0' || *ad >= '9') + if (*ad < '0' || *ad > '9') { logf (LOG_FATAL, "Missing size after path: %s", ad0); return -1; @@ -169,7 +189,7 @@ static int file_position(MFile mf, int pos, int offset) (c < mf->no_files -1 && pos > mf->files[c].top)) { c = 0; - while (mf->files[c].top >= 0 && mf->files[c].top < pos) + while (c + 1 < mf->no_files && mf->files[c].top < pos) { off += mf->files[c].blocks; c++; @@ -179,7 +199,7 @@ static int file_position(MFile mf, int pos, int offset) else off = c ? (mf->files[c-1].top + 1) : 0; 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) + mf->wr ? (O_BINARY|O_RDWR|O_CREAT) : (O_BINARY|O_RDONLY), 0666)) < 0) { if (!mf->wr && errno == ENOENT && off == 0) return -2; @@ -277,7 +297,7 @@ MFile_area mf_init(const char *name) sprintf(tmpnam, "%s/%s", dirp->name, dent->d_name); part_f->path = xstrdup(tmpnam); /* get size */ - if ((fd = open(part_f->path, O_RDONLY)) < 0) + if ((fd = open(part_f->path, O_BINARY|O_RDONLY)) < 0) { logf (LOG_FATAL|LOG_ERRNO, "Failed to access %s", dent->d_name); @@ -376,7 +396,7 @@ MFile mf_open(MFile_area ma, const char *name, int block_size, int wflag) for (i = 0; i < new->no_files; i++) { new->files[i].blocks = new->files[i].bytes / new->blocksize; - if (i == new->no_files) + if (i == new->no_files - 1) new->files[i].top = -1; else new->files[i].top = i ? (new->files[i-1].top + new->files[i].blocks)