From: Junio C Hamano Date: Tue, 1 Sep 2015 23:31:24 +0000 (-0700) Subject: Merge branch 'rs/archive-zip-many' X-Git-Tag: v2.6.0-rc0~8 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/565f575791f34e9e0f8d45c4762e5ec4c44cc993 Merge branch 'rs/archive-zip-many' "git archive" did not use zip64 extension when creating an archive with more than 64k entries, which nobody should need, right ;-)? * rs/archive-zip-many: archive-zip: support more than 65535 entries archive-zip: use a local variable to store the creator version t5004: test ZIP archives with many entries --- 565f575791f34e9e0f8d45c4762e5ec4c44cc993 diff --cc archive-zip.c index ae3d67f9d3,480360d0aa..9db47357b0 --- a/archive-zip.c +++ b/archive-zip.c @@@ -444,16 -530,19 +530,19 @@@ static void write_zip_trailer(const uns copy_le32(trailer.magic, 0x06054b50); copy_le16(trailer.disk, 0); copy_le16(trailer.directory_start_disk, 0); - copy_le16(trailer.entries_on_this_disk, zip_dir_entries); - copy_le16(trailer.entries, zip_dir_entries); + copy_le16_clamp(trailer.entries_on_this_disk, zip_dir_entries, + &clamped); + copy_le16_clamp(trailer.entries, zip_dir_entries, &clamped); copy_le32(trailer.size, zip_dir_offset); copy_le32(trailer.offset, zip_offset); - copy_le16(trailer.comment_length, sha1 ? 40 : 0); + copy_le16(trailer.comment_length, sha1 ? GIT_SHA1_HEXSZ : 0); write_or_die(1, zip_dir, zip_dir_offset); + if (clamped) + write_zip64_trailer(); write_or_die(1, &trailer, ZIP_DIR_TRAILER_SIZE); if (sha1) - write_or_die(1, sha1_to_hex(sha1), 40); + write_or_die(1, sha1_to_hex(sha1), GIT_SHA1_HEXSZ); } static void dos_time(time_t *time, int *dos_date, int *dos_time)