mirror of
https://github.com/LisherSong/ps5-web-file-manager.git
synced 2026-10-06 07:00:28 +02:00
A split ZIP is several files that only form an archive together. Until now a `.zip.001` was rejected as an unsupported format and a `.z01`/`.partN.zip` member could not be resolved, so these downloads were unusable. Three naming conventions are recognised, from any member of the set: name.zip.001, name.zip.002, ... byte split (7-Zip) name.part1.zip, name.part2.zip byte split (WinRAR) name.z01, ..., name.zip zip split disks (Info-ZIP / PKZIP) The parts are served through a new stream that makes them look like one archive, so nothing is copied to disk first (a 160 GiB set would otherwise need a second 160 GiB scratch copy): - src/zipx_volstream.c implements an mz_stream over the ordered part list. Byte splits keep absolute offsets; zip split disks carry offsets relative to the disk an entry starts on, so that mode honours MZ_STREAM_PROP_DISK_NUMBER the way mz_zip_entry_seek_local_header drives it and starts on the last volume, where the central directory lives. - src/zipx_volume.c groups the set, verifies the numbering is complete and reports exactly which volume is missing. - zip_extract.c tries the layout implied by the naming first and the other one as a fallback, so tools that disagree about offset bases still work. - extract.c dispatches volume members to the engines and, when the caller asked for the source to be deleted, removes every volume instead of leaving orphaned parts behind. Error messages are specific on purpose: an incomplete set reports the missing file name (e.g. "gap.zip.002 is missing"), a lone first volume says the remaining volumes are missing, `.rar.001` sets explain the rename that makes them work, and 7z volumes say 7z is not supported yet. Tests: tests/make_split_fixtures.py builds all three layouts (the disk set is written with per-disk offsets exactly as APPNOTE 4.4.11 describes) plus two broken sets; test_zip_extract.c extracts each layout from a different member and byte-compares the nested binary entries. 108 ZIP + 27 RAR checks, 0 failures.