From ab4e94c49e93db47e2615a0e4ed53ad889c8ddd1 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Thu, 3 Apr 2008 05:07:35 +0000 Subject: [PATCH] Merged r939:940 from trunk: Fix PHYSFS_openAppend() on Unix. --- CHANGELOG | 1 + platform/posix.c | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index ee4e46e..d3c3eeb 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -4,6 +4,7 @@ -- stuff in the stable-1.0 branch, backported from 2.0.0 dev branch, etc --- +04032008 - Fixed PHYSFS_openAppend() to work as documented on Unix. 03122008 - Removed a FIXME. 03112008 - Fixed wrong array index in Windows platform layer (thanks, James!). 03082008 - Fixed compiler warnings in Windows platform layer (thanks, Dennis!). diff --git a/platform/posix.c b/platform/posix.c index 5530b9a..eab40a6 100644 --- a/platform/posix.c +++ b/platform/posix.c @@ -344,13 +344,26 @@ int __PHYSFS_platformMkDir(const char *path) static void *doOpen(const char *filename, int mode) { + const int appending = (mode & O_APPEND); int fd; int *retval; errno = 0; + /* O_APPEND doesn't actually behave as we'd like. */ + mode &= ~O_APPEND; + fd = open(filename, mode, S_IRUSR | S_IWUSR); BAIL_IF_MACRO(fd < 0, strerror(errno), NULL); + if (appending) + { + if (lseek(fd, 0, SEEK_END) < 0) + { + close(fd); + BAIL_MACRO(strerror(errno), NULL); + } /* if */ + } /* if */ + retval = (int *) malloc(sizeof (int)); if (retval == NULL) {