[physfs] Does PHYSFS_close really return 0 on error?
Ryan C. Gordon
icculus at icculus.org
Sun Sep 30 00:24:59 EDT 2007
> So, I have a function that wraps the open/close functions and keeps a tally
> of succesful opens and closes (according to the return values for those
> functions. 0 = failure for closing a file.) The tally is always equal! For
> each successfully opened file there is one corresponding succesful file
> closing. I have a little thing to output an error message if the return
> value of PHYFS_close(file) is 0, but it *never* shows up! This seems to
> indicate that there should really be no files open inside the .zip, and yet
> the call to remove it from the search path fails because there are.
Is the code available anywhere? It's worth checking for silly things like:
if (PHYSFS_close(x) == 0); // whoops, that semicolon is bad!
opened_files--; // always subtracts, no matter the retval...
It could be a bug in PhysicsFS, of course, but it's hard to say from
here. It isn't something that's been reported before, as far as I know.
> p.s. And the solution does not include having my files named differently.
> That's not an option (I'm not the one who named the files, and they must
> remain as they are)
You can certainly use it that way, but if that's done to work around a
PhysicsFS limitation, you can try PHYSFS_mount() in the 1.1 branch, so
you can have multiple archives with the same file names that don't overlap:
So if a.zip has file.txt, and so does b.zip, you might "mount" them at
"/one" and "/two" respectively, and then open files with
PHYSFS_openRead("/one/file.txt") and PHYSFS_openRead("/two/file.txt").
...whatever works best for your needs, of course.
More information about the physfs