summaryrefslogtreecommitdiffstats
path: root/phantasia
diff options
context:
space:
mode:
authordholland <dholland@NetBSD.org>2009-05-25 08:33:57 +0000
committerdholland <dholland@NetBSD.org>2009-05-25 08:33:57 +0000
commit51f33549bfb1594cd9ddc085b4f8ef124582516e (patch)
treef05b4bcd7f5309345402d55e25bcc10b51a3326a /phantasia
parent1bd61fb54c34405648439ff594fd701b27dbc4fa (diff)
downloadbsdgames-darwin-51f33549bfb1594cd9ddc085b4f8ef124582516e.tar.gz
bsdgames-darwin-51f33549bfb1594cd9ddc085b4f8ef124582516e.tar.zst
bsdgames-darwin-51f33549bfb1594cd9ddc085b4f8ef124582516e.zip
Clean up scorefile handling.
This was writing time_t to disk. Worse, the time_t member was at an unaligned offset in the structure in question, so after the time_t change the structure layout depended on compiler-inserted structure padding. This gives three legacy formats: one with 32-bit time, one with 64-bit time, and one with 64-bit time and 4 bytes of structure padding. And of course the file didn't have a header or version coding or anything. The new code writes a structure of well-defined size that should not receive unexpected padding, and gives the file a header and version number. It reads that format and any of the three legacy formats, figuring out which one it's dealing with by inspecting the file contents. For good measure, it also now handles opposite-endian files, doesn't bail out unceremoniously unless necessary, and won't croak if the file is corrupt and e.g. contains unterminated strings. (Was it worth going to this length? Maybe not. But it didn't seem right to just leave it, and it's not clear where to stop halfway.)
Diffstat (limited to 'phantasia')
0 files changed, 0 insertions, 0 deletions