PhysicsFS is a library to provide abstract access to various archives.
It is intended for use in video games, and the design was somewhat
inspired by Quake 3's file subsystem. The programmer defines a "write
directory" on the physical filesystem. No file writing done through the
PhysicsFS API can leave that write directory, for security. For example,
an embedded scripting language cannot write outside of this path if it
uses PhysFS for all of its I/O, which means that untrusted scripts can
run more safely. Symbolic links can be disabled as well, for added
safety. For file reading, the programmer lists directories and archives
that form a "search path". Once the search path is defined, it becomes
a single, transparent hierarchical filesystem. This makes for easy
access to ZIP files in the same way as you access a file directly on
the disk, and it makes it easy to ship a new archive that will override
a previous archive on a per-file basis. Finally, PhysicsFS gives you
platform-abstracted means to determine if CD-ROMs are available, the
user's home directory, where in the real filesystem your program is
running, etc.
To explain better, you have two zipfiles, one has these files:
music/intro.mid
graphics/splashscreen.bmp
mainconfig.cfg
...the other's got these:
music/hero.mid
maps/desert.map
...and, finally, in your game's real directory:
maps/city.map
graphics/gun.bmp
When you create the search path in PhysicsFS with those three
components, and ask for what's in the "music" directory, you are told:
intro.mid
hero.mid
...in the maps directory:
desert.map
city.map
...in the graphics directory:
splashscreen.bmp
gun.bmp
...and, finally, in the root (toplevel) directory:
maps
music
graphics
mainconfig.cfg
The programmer does not know and does not care where each of these
files came from, and what sort of archive (if any) is storing them.
But if they need to know, they can find out through the PhysicsFS API.
Furthermore, they can take comfort in knowing that those untrusted
scripts we mentioned earlier can't access any other files than these.
The file entries "." and ".." are explicitly forbidden in PhysicsFS.
PhysicsFS is written in portable C, runs on dozens of platforms, and is
easy to add to your project by just adding a handful of C files and one
header directly to your build process.
What works:
Support for .ZIP files (PkZip/Info-ZIP/WinZip compatible).
version 1.1+: support for .7z files (7zip/lzma).
version 3.0+: support for .iso files (CD-ROM image files).
version 3.0+: support for .vdf files (Gothic/Gothic II).
version 3.0+: support for .slb files (Independence War).