From: Junio C Hamano Date: Fri, 4 Sep 2015 02:18:01 +0000 (-0700) Subject: Merge branch 'rs/archive-zip-many' into maint X-Git-Tag: v2.5.2~6 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1c820392282466b50f650d484a3560087a7fe686;p=git Merge branch 'rs/archive-zip-many' into maint "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 --- 1c820392282466b50f650d484a3560087a7fe686 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)