Stuff that needs to be done and wishlist: These are in no particular order. Some might be dupes, some might be done already. UNICODE: - BeOS: uses UTF-8 internally in the OS, so that's already done. - PocketPC: uses UCS-2 internally in the OS, and we're currently converting to and from ASCII. Need to change this out. - Windows: Can use Unicode, but might only allow "codepages" ... Use GetProcAddress() to find Unicode entry points on WinNT-based systems, otherwise try to use a sane codepage. - Mac Classic: apparently supports _something_, but I might just write it off as a loss. - OS/2: Codepages. No full Unicode in the filesystem, but we can probably make a conversion effort. - Linux: uses UTF-8 internally, so that's already done. - Mac OS X: uses UTF-8 in the Unix layer, and is smart enough to convert internally when needed. - DIR: just pass UTF-8 strings through to platform layer. - GRP: No Unicode (only 12 bytes for filename, 8.3 format). Legacy format. - HOG: No Unicode (only 12 bytes for filename, 8.3 format). Legacy format. - LZMA: Uses UTF-8 internally, so we're good to go. - MIX: only stores filename HASHES...this driver is going away. - MVL: No Unicode (only 12 bytes for filename, 8.3 format). Legacy format. - QPAK: Only has 56 bytes for a path, but we can just treat these as UTF-8 and be done with it. - WAD: No Unicode (only 8 bytes for filename). Legacy format. - ZIP: Uses UTF-8 internally, so it's good to go. Stuff: - Other archivers: perhaps tar(.gz|.bz2), RPM, ARJ, etc. These are less important, since streaming archives aren't of much value to games (which is why zipfiles are king: random access), but it could have uses for, say, an installer/updater. - Stack allocate in stripAppleBundle() (platform/unix.c) instead of calloc(). - Reduce malloc() pressure all over the place. We fragment memory like mad. - macclassic.c : "/* (Hmm. Default behaviour is broken in the base library. :) ) */" - Platforms to port to: Amiga (needs platform driver), DOS4GW (platform driver). - profile string list interpolation. - We have two different ways to find dir entries in zip.c. - Do symlinks in zip archiver work when they point to dirs? - Enable more warnings? - Use __cdecl in physfs.h? - Look for FIXMEs (many marked with "!!!" in comments). - Probably other stuff. Requests and recommendations are welcome. - Cygwin should use unix/posix and not win32 platform code. - Expose the archiver registration mechanism to the outside world. - Find some way to relax or remove the security model for external tools. - Non-blocking I/O - mmap() in posix.c - OSX shouldn't use ~/.app for userdir. - fscanf and fprintf support in extras dir. - Why do we call it openArchive and dirClose? - Sanity check byte order at runtime. - Memory locking? - Find a better name than dvoid and fvoid. - Can win32.c and pocketpc.c get merged? - There's so much cut-and-paste between archivers...can this be reduced? - General code audit. - Multiple write dirs with mount points? - Deprecate PHYSFS_setSaneConfig and move it to extras? - Why is physfsrwops.c cut-and-pasted into the ruby bindings? - Replace code from SDL... - MIX grabs all archives that no other archivers claim. - MIX enumerates files as hash values. - Should file enumeration return an error or set error state? - Ryanify pocketpc.c ... - Update internal zlib? - Need "getmountpoint" command in test_physfs.c ... - Look for calloc() calls that aren't going through the allocation hooks. - maybe other stuff. - Is -Wall enabled? - Make mutexes recursive, so callbacks can call into the API. - Archivers need abstracted i/o to read from memory or files (archives in archives?) // end of TODO ...