You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/dev-games/physfs/files/physfs-3.0.1-setwritedir.patch

41 lines
1.4 KiB

Upstream-Status: Backport
[https://hg.icculus.org/icculus/physfs/rev/a29fef4a20fd]
# HG changeset patch
# User Ryan C. Gordon <icculus@icculus.org>
# 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 */