diff --git a/src/files.c b/src/files.c index a55616382..ad9c62ef6 100644 --- a/src/files.c +++ b/src/files.c @@ -660,8 +660,9 @@ create_levelfile(int lev, char errbuf[]) Sprintf(errbuf, "Cannot create file \"%s\" for level %d (errno %d).", gl.lock, lev, errno); -#if defined(MSDOS) - setmode(nhfp->fd, O_BINARY); +#if defined(MSDOS) || defined(WIN32) + if (nhfp->fd >= 0) + (void) setmode(nhfp->fd, O_BINARY); #endif } nhfp = viable_nhfile(nhfp); @@ -705,8 +706,9 @@ open_levelfile(int lev, char errbuf[]) Sprintf(errbuf, "Cannot open file \"%s\" for level %d (errno %d).", gl.lock, lev, errno); -#if defined(MSDOS) - setmode(nhfp->fd, O_BINARY); +#if defined(MSDOS) || defined(WIN32) + if (nhfp->fd >= 0) + (void) setmode(nhfp->fd, O_BINARY); #endif } nhfp = viable_nhfile(nhfp); @@ -883,8 +885,9 @@ create_bonesfile(d_level *lev, char **bonesid, char errbuf[]) #endif /* ?MICRO || WIN32 */ if (nhfp->fd < 0) failed = errno; -#if defined(MSDOS) - setmode(nhfp->fd, O_BINARY); +#if defined(MSDOS) || defined(WIN32) + if (nhfp->fd >= 0) + (void) setmode(nhfp->fd, O_BINARY); #endif } if (failed && errbuf) /* failure explanation */ @@ -976,8 +979,9 @@ open_bonesfile(d_level *lev, char **bonesid) #else nhfp->fd = open(fq_bones, O_RDONLY | O_BINARY, 0); #endif -#if defined(MSDOS) - setmode(nhfp->fd, O_BINARY); +#if defined(MSDOS) || defined(WIN32) + if (nhfp->fd >= 0) + (void) setmode(nhfp->fd, O_BINARY); #endif } } @@ -1188,8 +1192,8 @@ create_savefile(void) #endif #endif /* MICRO || WIN32 */ #if defined(MSDOS) || defined(WIN32) - if (nhfp->fd >= 0) - (void) setmode(nhfp->fd, O_BINARY); + if (nhfp->fd >= 0) + (void) setmode(nhfp->fd, O_BINARY); #endif } } @@ -2989,6 +2993,9 @@ recover_savefile(void) if (savewrite_failure) goto cleanup; + if (snhfp->structlevel) + bufoff(snhfp->fd); + /* TODO: this is not a single byte, so a big-endian byte swap * might be necessary here, if anyone is concerned about big-endian */ Sfo_int(snhfp, &pltmpsiz, "plname-size"); @@ -3041,6 +3048,8 @@ recover_savefile(void) } } } + if (snhfp->structlevel) + bufon(snhfp->fd); close_nhfile(snhfp); /* * We have a successful savefile!