<div dir="ltr">This is awesome! We've opened an issue to create a feature branch for PhysicsFS 3.0.0 support in Quetoo. Looking forward to giving it a spin!<div><br></div><div>Jay</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Aug 15, 2017 at 2:52 AM, Ryan C. Gordon <span dir="ltr"><<a href="mailto:icculus@icculus.org" target="_blank">icculus@icculus.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
( This work was funded by my Patreon! If you like me working on things like PhysicsFS and other useful pieces of code, consider throwing some money in the pot: <a href="https://patreon.com/icculus" rel="noreferrer" target="_blank">https://patreon.com/icculus</a> )<br>
<br>
So I knuckled down and pushed hard to get the PhysicsFS development branch where I want it for a major-version release.<br>
<br>
Now it's ready to go beta!<br>
<br>
PhysicsFS 2.1.1, which will stabilize into 3.0.0, is ready for you to test. It should be safe for anyone on any official release of PhysicsFS to update: the API has been expanded over time, and functions have been deprecated, but we are still source and binary compatible with programs written against PhysicsFS 1.0.0. In theory, you can drop in a new build and it'll Just Work.<br>
<br>
Please try the latest in revision control with your apps and games and report issues. A lot of code changed pretty quickly, so it's possible obvious things are broken (and easy to fix), so feedback is _extremely_ useful now.<br>
<br>
<br>
WHAT'S NEW:<br>
<br>
It's hard to quantify everything that changed, because an enormous amount of reworking went on behind the scenes, files got renamed a bunch, etc. If you want _specifics_, pull the latest from Mercurial and run "hg log -b default -r 5cabc31eb563:3396e6dd19fb" to get every commit involved, but I'll summarize the best things here:<br>
<br>
- PhysicsFS now is super-easy to build. You can usually just drop all the C files into your project and compile it with everything else without any magic configuration step. The CMake file is still there and useful for packaging, etc, but it's 100% optional.<br>
<br>
- ZIP files can now use the newer zip64 format.<br>
<br>
- ZIP files may be password-protected. As the PkWare specs specify, each file in the .zip may have a different password, so you call PHYSFS_openRead(a, "file_that_i_want.txt$PASSWORD<wbr>") to make it work. Note that this is a wildly insecure way to protect your app's data, both in how you'd have to manage passwords and that "traditional" PkWare crypto is not really hardened anyhow. But if you have a basic password-protected archive, PhysicsFS can get into it now!<br>
<br>
- 7zip support has been rewritten and improved.<br>
<br>
- ISO9660 archives are now supported.<br>
<br>
- VDF (Gothic/Gothic2) archives are now supported.<br>
<br>
- SLB (Independence War) archives are now supported.<br>
<br>
- Everything behind the scenes now uses an abstract i/o interface (PHYSFS_Io) instead of talking directly to files, and this interface is available to applications. This allows you to mount anything as an archive that you can wrap in a PHYSFS_Io, through the new PHYSFS_mountIo() function. The obvious and most useful implementations are already implemented for you behind the scenes on top of PHYSFS_Io: PHYSFS_mountMemory() to mount an archive that's in a block of RAM, and PHYSFS_mountHandle() to mount from a PHYSFS_File*...that is to say: you now have an interface to do archives inside archives.<br>
<br>
- The abstract interface that PhysicsFS uses to talk to archives (PHYSFS_Archiver) is now public, so apps can implement their own archivers and register them into the system. If you have a custom archive format for your app, you can plug it into PhysicsFS at runtime without modifying PhysicsFS itself.<br>
<br>
- There's now a PHYSFS_getPrefDir() to figure out where it is safe to write files on a given platform. This is usually a per-user, per-application space, and should be used instead of PHYSFS_getUserDir(). It might report something under ~/Library/Application Support on a Mac, somewhere under AppData for Windows, or ~/.local/share on Linux, etc.<br>
<br>
- There's now a PHYSFS_unmount() to match 2.0.0's PHYSFS_mount().<br>
<br>
- There's now a PHYSFS_utf8FromUtf16(), so stop using PHYSFS_utf8FromUcs2().   :)<br>
<br>
- There's now PHYSFS_utf8stricmp() for case-insensitive UTF-8 string comparison, in case you need to compare filenames.<br>
<br>
- Enumerating files can now report errors, instead of quietly dropping files when there were problems. Enumeration callbacks can now return results too ("keep going", "stop enumerating, no error I just got what I needed", "something went wrong, stop and return an error to the app").<br>
<br>
- There is now a PHYSFS_stat() call that returns metadata on a specific file as a whole instead of using PHYSFS_isDirectory(), PHYSFS_getLastModTime(), etc separately).<br>
<br>
- There's now a PHYSFS_readBytes() function that operates more like Unix read()...the older PHYSFS_read() operates more like ANSI C's fread(), but had undefined behavior if it reads half an object. There is also an equivalent PHYSFS_writeBytes().<br>
<br>
- Errors are now reported by numeric codes your app can process (there's a function to turn them into human readable strings). Apps can set the per-thread error code now, too, which is useful if you're writing an PHYSFS_Archiver or PHYSFS_Io.<br>
<br>
- The OS/2 port has Unicode support now.<br>
<br>
- The Windows port now uses UTF-16 for Unicode instead of UCS-2, and dropped the ANSI fallbacks (so among other hurdles, you'll need to bring your own UNICOWS.DLL if you want Win95 support still).<br>
<br>
- Lots of improvements, redesigns, bug fixes, corner cases, and optimizations.<br>
<br>
- There's now a buildbot that makes sure this builds across two dozen different targets on every commit: <a href="https://physfs-buildbot.icculus.org/waterfall" rel="noreferrer" target="_blank">https://physfs-buildbot.icculu<wbr>s.org/waterfall</a><br>
<br>
- New platforms: iOS, Android, Emscripten, WinRT (UWP, Windows Phone, Windows Store), Win64, QNX, Solaris, Hurd, Debian/kFreeBSD, ArcaOS, probably others.<br>
<br>
- Dropped platforms: BeOS (Haiku is still supported), Windows CE (Windows Phone is supported), Windows 95/98/ME (WinXP and later are supported) MacOS Classic (macOS and iOS are supported). Even these might work with minor patches if there's an urgent demand.<br>
<br>
- Probably many other things.<br>
<br>
That's all: please enjoy! And please test and report back!<br>
<br>
Thanks,<br>
--ryan.<br>
<br>
______________________________<wbr>_________________<br>
physfs mailing list<br>
<a href="mailto:physfs@icculus.org" target="_blank">physfs@icculus.org</a><br>
<a href="http://icculus.org/mailman/listinfo/physfs" rel="noreferrer" target="_blank">http://icculus.org/mailman/lis<wbr>tinfo/physfs</a></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">Jay Dolan<div>508-415-1866</div></div></div>
</div>