* 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
#include <sys/types.h>
#include <fcntl.h>
+#ifdef WINDOWS
+#include <io.h>
+#else
#include <unistd.h>
-#include <dirent.h>
+#endif
+#include <direntz.h>
+#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <assert.h>
#include <errno.h>
-#include <alexutil.h>
+#include <zebrautl.h>
#include <mfile.h>
static MFile_area_struct *open_areas = 0;
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;
(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++;
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;
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);
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)