diff --git a/CHANGELOG.txt b/CHANGELOG.txt index d4c28ce..64f133e 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -2,6 +2,7 @@ * CHANGELOG. */ +04032008 - Fixed PHYSFS_openAppend() to work as documented on Unix. 03122008 - Fixed aliasing bug in Windows platform layer (thanks, Dennis!). 03102008 - Changed some text files from ISO-8859-1 to UTF-8. Replaced all the translations with UTF-8 encoded equivalents. diff --git a/platform/posix.c b/platform/posix.c index 0051255..2a93328 100644 --- a/platform/posix.c +++ b/platform/posix.c @@ -236,13 +236,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 *) allocator.Malloc(sizeof (int)); if (retval == NULL) {