PhysicsFS 1.1.1 development branch release...

Ryan C. Gordon icculus at
Tue Apr 3 01:28:39 EDT 2007

So it's been a long time, but now that some of my long-term contracts 
have finished up, I explicitly allocated time to work on a few of my 
open source among these is PhysicsFS, which hasn't seen a 
new release in quite some time, despite a pretty big TODO list.

Please note that the 1.1 branch is still a work in progress, and all new 
features (and several old ones) are likely to be buggy at this time. 
APIs from the stable branch will not change, but all APIs from 1.1 are 
still subject to change, addition, and removal. Use with caution.

  Source code download:

  Grabbing development branch from Subversion:
    svn co svn:// physfs

Notable changes in 1.1.1:

- New CMake-based build system. The autotools mess is gone, as are all 
the specialized project files for various toolchains. We now maintain 
one text file that describes the project, and use CMake 
( to generate real project files from 
produces standard Makefiles for most Unixes and BeOS, but also project 
files for KDevelop, Xcode, Visual Studio 6/7/8, Watcom, Borland, and 
other build tools on Windows and Mac OS X. If your platform or build 
tool isn't supported, energy is better spent on enhancing CMake than 
creating another project file for PhysicsFS. OS/2 still uses a batch 
file to build for now, but everything else is either using CMake or will 
be dropped.

- New archiver: lzma support (7zip archives), thanks to Dennis Schridde.

- Unicode support! All PhysicsFS APIs that deal with strings now expect 
them to be UTF-8 encoded, and will convert behind the scenes as 
appropriate, so eventually your UTF-8 encoded Japanese characters will 
become 2-byte WCHAR strings when looking for filenames on a Windows NTFS 
disc, etc. Windows will try to use the appropriate codepage on 
Win95/98/ME, and use the actual Unicode entry points on NT/XP/Vista, 
CFStrings on Mac OS X, etc. The platform layers in PhysicsFS for all 
supported OSes are now Unicode clean, except OS/2 (to be considered). 
There are new PhysicsFS APIs to provide conversion between some common 
character encodings.

- New API: PHYSFS_isInit(), to determine if the library is ready for use 
when you don't have access to the results of a previous PHYSFS_init() call.

- New API: PHYSFS_symbolicLinksPermitted(), to determine this state when 
you don't control the calls to PHYSFS_permitSymbolicLinks().

- Symlinks are now supported on Windows Vista: PHYSFS_isSymbolicLink() 
and PHYSFS_permitSymbolicLinks() work with the native filesystem as 
expected in the new Windows version without losing binary compatibility 
with older Windows releases.

- Public headers no longer use size_t, so they work without any system 
headers pre-included.

- Internal mutexes are now recursive on all platforms, which means it's 
now safe to call most PHYSFS_* functions from inside an enumeration 
callback (including performing more enumerations from inside an 

- Added unarchiver program as an example application, which actually 
does enumerations from inside enumerations.  :)

- Added initial shot at a wxWidgets-based test program, to supersede 
test_physfs.c ... still a work in progress.

- Mac OS classic support has been dropped. It could be readded if CMake 
is enhanced to support CodeWarrior or MPW, and the code moves from 
FSSpec to FSRef functions for Unicode support. Mac OS 8/9 support will 
remain in the stable 1.0 branch, and Mac OS X is still, of course, fully 
supported everywhere.

- MIX archiver has been dropped. It couldn't supply filenames (just hash 
strings that represent filenames), and it had a tendency to take all 
files that weren't accepted by other archivers. The source can be 
retrieved from Subversion if someone wants/needs it.

- Mac OS X now has its own Carbon-based code, split out from unix.c, 
which helps with functionality like Unicode and recursive mutexes...the 
bits in posix.c are still used on OS X, though.

- OS/2 now builds with Innotek GCC and klibc instead of EMX (although 
can probably still work with EMX).

- Most systems can make do with PHYSFS_init(NULL) now (but still should 
have argv[0] for cases where they can't!). This includes Linux and 
systems that present a Linux-like /proc filesystem with /proc/self/exe ...

- Compiles on BeOS again (was broken in 1.1.0).

- Added documentation for new, previously-undocumented APIs from 1.1.0.

- On GCC 4 and later, will build with -fvisibility=hidden, so the only 
symbols exported from the library are the public APIs. This makes the 
library smaller and faster when built as a shared library, not to 
mention prevents namespace pollution.

- Reduced malloc pressure a little more (see __PHYSFS_smallAlloc() in 
physfs_internal.h). More to come.

- Other bug fixes, cleanups, refactoring, and improvements. A LOT of 
internal code has can check the Subversion repository 
history for specific details.

Please report bugs! There are still more development branch features to 
add, but the process of stabilizing the codebase should start 
immediately. If there are features you want/need, please do mention 
them...some may be on the TODO list already, but other requests are very 


More information about the physfs mailing list