Upstream-Status: Backport [https://hg.icculus.org/icculus/physfs/rev/a29fef4a20fd] # HG changeset patch # User Ryan C. Gordon # Date 1526514891 14400 # Node ID a29fef4a20fd79ead82998c91dc4828ed5061cb5 # Parent db8f944df5c56f0244229813203fb5b24e8d9968 PHYSFS_setWriteDir() shouldn't create an empty file if the dir doesn't exist. (transplanted from 2653b3bc19c9ba7d1e6bf53566719e4e30935382) diff -r db8f944df5c5 -r a29fef4a20fd src/physfs.c --- a/src/physfs.c Thu Apr 19 10:06:38 2018 -0400 +++ b/src/physfs.c Wed May 16 19:54:51 2018 -0400 @@ -879,13 +879,20 @@ if (io == NULL) { + /* file doesn't exist, etc? Just fail out. */ + PHYSFS_Stat statbuf; + BAIL_IF_ERRPASS(!__PHYSFS_platformStat(d, &statbuf, 1), NULL); + /* DIR gets first shot (unlike the rest, it doesn't deal with files). */ - retval = tryOpenDir(io, &__PHYSFS_Archiver_DIR, d, forWriting, &claimed); - if (retval || claimed) - return retval; + if (statbuf.filetype == PHYSFS_FILETYPE_DIRECTORY) + { + retval = tryOpenDir(io, &__PHYSFS_Archiver_DIR, d, forWriting, &claimed); + if (retval || claimed) + return retval; + } /* if */ io = __PHYSFS_createNativeIo(d, forWriting ? 'w' : 'r'); - BAIL_IF_ERRPASS(!io, 0); + BAIL_IF_ERRPASS(!io, NULL); created_io = 1; } /* if */