Lines Matching refs:zip

122 struct zip {  struct
193 static struct archive_string_conv *get_sconv(struct archive_write *, struct zip *); argument
203 cd_alloc(struct zip *zip, size_t length) in cd_alloc() argument
207 if (zip->central_directory == NULL in cd_alloc()
208 || (zip->central_directory_last->p + length in cd_alloc()
209 > zip->central_directory_last->buff + zip->central_directory_last->buff_size)) { in cd_alloc()
221 if (zip->central_directory == NULL) { in cd_alloc()
222 zip->central_directory in cd_alloc()
223 = zip->central_directory_last in cd_alloc()
226 zip->central_directory_last->next = segment; in cd_alloc()
227 zip->central_directory_last = segment; in cd_alloc()
231 p = zip->central_directory_last->p; in cd_alloc()
232 zip->central_directory_last->p += length; in cd_alloc()
233 zip->central_directory_bytes += length; in cd_alloc()
256 struct zip *zip = a->format_data; in archive_write_zip_options() local
270 zip->requested_compression = COMPRESSION_DEFLATE; in archive_write_zip_options()
277 zip->requested_compression = COMPRESSION_STORE; in archive_write_zip_options()
287 zip->requested_compression = COMPRESSION_STORE; in archive_write_zip_options()
291 zip->requested_compression = COMPRESSION_DEFLATE; in archive_write_zip_options()
292 zip->deflate_compression_level = val[0] - '0'; in archive_write_zip_options()
301 zip->encryption_type = ENCRYPTION_NONE; in archive_write_zip_options()
307 zip->encryption_type = ENCRYPTION_TRADITIONAL; in archive_write_zip_options()
317 zip->encryption_type = ENCRYPTION_WINZIP_AES128; in archive_write_zip_options()
327 zip->encryption_type = ENCRYPTION_WINZIP_AES256; in archive_write_zip_options()
342 zip->flags &= ~ ZIP_FLAG_EXPERIMENT_xl; in archive_write_zip_options()
344 zip->flags |= ZIP_FLAG_EXPERIMENT_xl; in archive_write_zip_options()
353 zip->crc32func = real_crc32; in archive_write_zip_options()
355 zip->crc32func = fake_crc32; in archive_write_zip_options()
367 zip->opt_sconv = archive_string_conversion_to_charset( in archive_write_zip_options()
369 if (zip->opt_sconv != NULL) in archive_write_zip_options()
383 zip->flags |= ZIP_FLAG_FORCE_ZIP64; in archive_write_zip_options()
384 zip->flags &= ~ZIP_FLAG_AVOID_ZIP64; in archive_write_zip_options()
386 zip->flags &= ~ZIP_FLAG_FORCE_ZIP64; in archive_write_zip_options()
387 zip->flags |= ZIP_FLAG_AVOID_ZIP64; in archive_write_zip_options()
414 struct zip *zip = a->format_data; in archive_write_zip_set_compression_deflate() local
415 zip->requested_compression = COMPRESSION_DEFLATE; in archive_write_zip_set_compression_deflate()
430 struct zip *zip = a->format_data; in archive_write_zip_set_compression_store() local
442 zip->requested_compression = COMPRESSION_STORE; in archive_write_zip_set_compression_store()
452 struct zip *zip; in archive_write_set_format_zip() local
461 zip = (struct zip *) calloc(1, sizeof(*zip)); in archive_write_set_format_zip()
462 if (zip == NULL) { in archive_write_set_format_zip()
469 zip->requested_compression = COMPRESSION_UNSPECIFIED; in archive_write_set_format_zip()
471 zip->deflate_compression_level = Z_DEFAULT_COMPRESSION; in archive_write_set_format_zip()
473 zip->crc32func = real_crc32; in archive_write_set_format_zip()
476 zip->len_buf = 65536; in archive_write_set_format_zip()
477 zip->buf = malloc(zip->len_buf); in archive_write_set_format_zip()
478 if (zip->buf == NULL) { in archive_write_set_format_zip()
479 free(zip); in archive_write_set_format_zip()
485 a->format_data = zip; in archive_write_set_format_zip()
516 struct zip *zip = a->format_data; in archive_write_zip_header() local
522 struct archive_string_conv *sconv = get_sconv(a, zip); in archive_write_zip_header()
536 if (zip->flags & ZIP_FLAG_AVOID_ZIP64) { in archive_write_zip_header()
545 if (zip->written_bytes > ZIP_4GB_MAX) { in archive_write_zip_header()
558 zip->entry_offset = zip->written_bytes; in archive_write_zip_header()
559 zip->entry_uncompressed_limit = INT64_MAX; in archive_write_zip_header()
560 zip->entry_compressed_size = 0; in archive_write_zip_header()
561 zip->entry_uncompressed_size = 0; in archive_write_zip_header()
562 zip->entry_compressed_written = 0; in archive_write_zip_header()
563 zip->entry_uncompressed_written = 0; in archive_write_zip_header()
564 zip->entry_flags = 0; in archive_write_zip_header()
565 zip->entry_uses_zip64 = 0; in archive_write_zip_header()
566 zip->entry_crc32 = zip->crc32func(0, NULL, 0); in archive_write_zip_header()
567 zip->entry_encryption = 0; in archive_write_zip_header()
568 archive_entry_free(zip->entry); in archive_write_zip_header()
569 zip->entry = NULL; in archive_write_zip_header()
571 if (zip->cctx_valid) in archive_write_zip_header()
572 archive_encrypto_aes_ctr_release(&zip->cctx); in archive_write_zip_header()
573 if (zip->hctx_valid) in archive_write_zip_header()
574 archive_hmac_sha1_cleanup(&zip->hctx); in archive_write_zip_header()
575 zip->tctx_valid = zip->cctx_valid = zip->hctx_valid = 0; in archive_write_zip_header()
580 switch (zip->encryption_type) { in archive_write_zip_header()
584 zip->entry_flags |= ZIP_ENTRY_FLAG_ENCRYPTED; in archive_write_zip_header()
585 zip->entry_encryption = zip->encryption_type; in archive_write_zip_header()
597 zip->entry = __la_win_entry_in_posix_pathseparator(entry); in archive_write_zip_header()
598 if (zip->entry == entry) in archive_write_zip_header()
599 zip->entry = archive_entry_clone(entry); in archive_write_zip_header()
601 zip->entry = archive_entry_clone(entry); in archive_write_zip_header()
603 if (zip->entry == NULL) { in archive_write_zip_header()
627 archive_entry_set_pathname(zip->entry, p); in archive_write_zip_header()
644 archive_entry_set_symlink(zip->entry, p); in archive_write_zip_header()
649 if (!is_all_ascii(archive_entry_pathname(zip->entry))) { in archive_write_zip_header()
650 if (zip->opt_sconv != NULL) { in archive_write_zip_header()
652 zip->opt_sconv), "UTF-8") == 0) in archive_write_zip_header()
653 zip->entry_flags |= ZIP_ENTRY_FLAG_UTF8_NAME; in archive_write_zip_header()
656 zip->entry_flags |= ZIP_ENTRY_FLAG_UTF8_NAME; in archive_write_zip_header()
660 filename_length = path_length(zip->entry); in archive_write_zip_header()
664 slink = archive_entry_symlink(zip->entry); in archive_write_zip_header()
669 zip->entry_uncompressed_limit = slink_size; in archive_write_zip_header()
670 zip->entry_compressed_size = slink_size; in archive_write_zip_header()
671 zip->entry_uncompressed_size = slink_size; in archive_write_zip_header()
672 zip->entry_crc32 = zip->crc32func(zip->entry_crc32, in archive_write_zip_header()
674 zip->entry_compression = COMPRESSION_STORE; in archive_write_zip_header()
677 zip->entry_compression = COMPRESSION_STORE; in archive_write_zip_header()
678 zip->entry_uncompressed_limit = 0; in archive_write_zip_header()
680 } else if (archive_entry_size_is_set(zip->entry)) { in archive_write_zip_header()
681 int64_t size = archive_entry_size(zip->entry); in archive_write_zip_header()
684 zip->entry_uncompressed_limit = size; in archive_write_zip_header()
685 zip->entry_compression = zip->requested_compression; in archive_write_zip_header()
686 if (zip->entry_compression == COMPRESSION_UNSPECIFIED) { in archive_write_zip_header()
687 zip->entry_compression = COMPRESSION_DEFAULT; in archive_write_zip_header()
689 if (zip->entry_compression == COMPRESSION_STORE) { in archive_write_zip_header()
690 zip->entry_compressed_size = size; in archive_write_zip_header()
691 zip->entry_uncompressed_size = size; in archive_write_zip_header()
694 zip->entry_uncompressed_size = size; in archive_write_zip_header()
698 if (zip->entry_flags & ZIP_ENTRY_FLAG_ENCRYPTED) { in archive_write_zip_header()
699 switch (zip->entry_encryption) { in archive_write_zip_header()
718 if (zip->entry_compression == COMPRESSION_STORE) in archive_write_zip_header()
719 zip->entry_compressed_size += additional_size; in archive_write_zip_header()
732 if ((zip->flags & ZIP_FLAG_FORCE_ZIP64) in archive_write_zip_header()
733 || (zip->entry_uncompressed_size + additional_size > ZIP_4GB_MAX) in archive_write_zip_header()
734 || (zip->entry_uncompressed_size > ZIP_4GB_MAX_UNCOMPRESSED in archive_write_zip_header()
735 && zip->entry_compression != COMPRESSION_STORE)) { in archive_write_zip_header()
736 zip->entry_uses_zip64 = 1; in archive_write_zip_header()
741 zip->entry_flags |= ZIP_ENTRY_FLAG_LENGTH_AT_END; in archive_write_zip_header()
748 zip->entry_compression = COMPRESSION_DEFAULT; in archive_write_zip_header()
749 zip->entry_flags |= ZIP_ENTRY_FLAG_LENGTH_AT_END; in archive_write_zip_header()
750 if ((zip->flags & ZIP_FLAG_AVOID_ZIP64) == 0) { in archive_write_zip_header()
751 zip->entry_uses_zip64 = 1; in archive_write_zip_header()
753 } else if (zip->entry_compression == COMPRESSION_STORE) { in archive_write_zip_header()
759 if (zip->entry_flags & ZIP_ENTRY_FLAG_ENCRYPTED) { in archive_write_zip_header()
760 switch (zip->entry_encryption) { in archive_write_zip_header()
778 archive_le16enc(local_header + 6, zip->entry_flags); in archive_write_zip_header()
779 if (zip->entry_encryption == ENCRYPTION_WINZIP_AES128 in archive_write_zip_header()
780 || zip->entry_encryption == ENCRYPTION_WINZIP_AES256) in archive_write_zip_header()
783 archive_le16enc(local_header + 8, zip->entry_compression); in archive_write_zip_header()
785 dos_time(archive_entry_mtime(zip->entry))); in archive_write_zip_header()
786 archive_le32enc(local_header + 14, zip->entry_crc32); in archive_write_zip_header()
787 if (zip->entry_uses_zip64) { in archive_write_zip_header()
796 archive_le32enc(local_header + 18, (uint32_t)zip->entry_compressed_size); in archive_write_zip_header()
797 archive_le32enc(local_header + 22, (uint32_t)zip->entry_uncompressed_size); in archive_write_zip_header()
801 if (zip->entry_encryption == ENCRYPTION_TRADITIONAL) { in archive_write_zip_header()
802 if (zip->entry_flags & ZIP_ENTRY_FLAG_LENGTH_AT_END) in archive_write_zip_header()
803 zip->trad_chkdat = local_header[11]; in archive_write_zip_header()
805 zip->trad_chkdat = local_header[17]; in archive_write_zip_header()
809 zip->file_header = cd_alloc(zip, 46); in archive_write_zip_header()
811 ++zip->central_directory_entries; in archive_write_zip_header()
812 memset(zip->file_header, 0, 46); in archive_write_zip_header()
813 memcpy(zip->file_header, "PK\001\002", 4); in archive_write_zip_header()
815 archive_le16enc(zip->file_header + 4, 3 * 256 + version_needed); in archive_write_zip_header()
816 archive_le16enc(zip->file_header + 6, version_needed); in archive_write_zip_header()
817 archive_le16enc(zip->file_header + 8, zip->entry_flags); in archive_write_zip_header()
818 if (zip->entry_encryption == ENCRYPTION_WINZIP_AES128 in archive_write_zip_header()
819 || zip->entry_encryption == ENCRYPTION_WINZIP_AES256) in archive_write_zip_header()
820 archive_le16enc(zip->file_header + 10, WINZIP_AES_ENCRYPTION); in archive_write_zip_header()
822 archive_le16enc(zip->file_header + 10, zip->entry_compression); in archive_write_zip_header()
823 archive_le32enc(zip->file_header + 12, in archive_write_zip_header()
824 dos_time(archive_entry_mtime(zip->entry))); in archive_write_zip_header()
825 archive_le16enc(zip->file_header + 28, (uint16_t)filename_length); in archive_write_zip_header()
827 archive_le32enc(zip->file_header + 38, in archive_write_zip_header()
828 ((uint32_t)archive_entry_mode(zip->entry)) << 16); in archive_write_zip_header()
829 e = cd_alloc(zip, filename_length); in archive_write_zip_header()
831 copy_path(zip->entry, e); in archive_write_zip_header()
878 if ((zip->entry_flags & ZIP_ENTRY_FLAG_ENCRYPTED) in archive_write_zip_header()
879 && (zip->entry_encryption == ENCRYPTION_WINZIP_AES128 in archive_write_zip_header()
880 || zip->entry_encryption == ENCRYPTION_WINZIP_AES256)) { in archive_write_zip_header()
889 if (archive_entry_size_is_set(zip->entry) in archive_write_zip_header()
890 && archive_entry_size(zip->entry) < 20) { in archive_write_zip_header()
892 zip->aes_vendor = AES_VENDOR_AE_2;/* no CRC. */ in archive_write_zip_header()
894 zip->aes_vendor = AES_VENDOR_AE_1; in archive_write_zip_header()
897 *e++ = (zip->entry_encryption == ENCRYPTION_WINZIP_AES128)?1:3; in archive_write_zip_header()
899 archive_le16enc(e, zip->entry_compression); in archive_write_zip_header()
904 zip->file_header_extra_offset = zip->central_directory_bytes; in archive_write_zip_header()
905 cd_extra = cd_alloc(zip, e - local_extra); in archive_write_zip_header()
917 if (zip->entry_uses_zip64) { in archive_write_zip_header()
921 archive_le64enc(e, zip->entry_uncompressed_size); in archive_write_zip_header()
923 archive_le64enc(e, zip->entry_compressed_size); in archive_write_zip_header()
928 if (zip->flags & ZIP_FLAG_EXPERIMENT_xl) { in archive_write_zip_header()
947 ((uint32_t)archive_entry_mode(zip->entry)) << 16); in archive_write_zip_header()
962 zip->written_bytes += 30; in archive_write_zip_header()
964 ret = write_path(zip->entry, a); in archive_write_zip_header()
967 zip->written_bytes += ret; in archive_write_zip_header()
972 zip->written_bytes += e - local_extra; in archive_write_zip_header()
979 zip->entry_compressed_written += slink_size; in archive_write_zip_header()
980 zip->entry_uncompressed_written += slink_size; in archive_write_zip_header()
981 zip->written_bytes += slink_size; in archive_write_zip_header()
985 if (zip->entry_compression == COMPRESSION_DEFLATE) { in archive_write_zip_header()
986 zip->stream.zalloc = Z_NULL; in archive_write_zip_header()
987 zip->stream.zfree = Z_NULL; in archive_write_zip_header()
988 zip->stream.opaque = Z_NULL; in archive_write_zip_header()
989 zip->stream.next_out = zip->buf; in archive_write_zip_header()
990 zip->stream.avail_out = (uInt)zip->len_buf; in archive_write_zip_header()
991 if (deflateInit2(&zip->stream, zip->deflate_compression_level, in archive_write_zip_header()
1007 struct zip *zip = a->format_data; in archive_write_zip_data() local
1009 if ((int64_t)s > zip->entry_uncompressed_limit) in archive_write_zip_data()
1010 s = (size_t)zip->entry_uncompressed_limit; in archive_write_zip_data()
1011 zip->entry_uncompressed_written += s; in archive_write_zip_data()
1015 if (zip->entry_flags & ZIP_ENTRY_FLAG_ENCRYPTED) { in archive_write_zip_data()
1016 switch (zip->entry_encryption) { in archive_write_zip_data()
1019 if (!zip->tctx_valid) { in archive_write_zip_data()
1023 zip->tctx_valid = 1; in archive_write_zip_data()
1028 if (!zip->cctx_valid) { in archive_write_zip_data()
1032 zip->cctx_valid = zip->hctx_valid = 1; in archive_write_zip_data()
1041 switch (zip->entry_compression) { in archive_write_zip_data()
1043 if (zip->tctx_valid || zip->cctx_valid) { in archive_write_zip_data()
1050 if (zip->tctx_valid) { in archive_write_zip_data()
1051 l = trad_enc_encrypt_update(&zip->tctx, in archive_write_zip_data()
1053 zip->buf, zip->len_buf); in archive_write_zip_data()
1055 l = zip->len_buf; in archive_write_zip_data()
1057 &zip->cctx, in archive_write_zip_data()
1058 rb, re - rb, zip->buf, &l); in archive_write_zip_data()
1065 archive_hmac_sha1_update(&zip->hctx, in archive_write_zip_data()
1066 zip->buf, l); in archive_write_zip_data()
1068 ret = __archive_write_output(a, zip->buf, l); in archive_write_zip_data()
1071 zip->entry_compressed_written += l; in archive_write_zip_data()
1072 zip->written_bytes += l; in archive_write_zip_data()
1079 zip->written_bytes += s; in archive_write_zip_data()
1080 zip->entry_compressed_written += s; in archive_write_zip_data()
1085 zip->stream.next_in = (unsigned char*)(uintptr_t)buff; in archive_write_zip_data()
1086 zip->stream.avail_in = (uInt)s; in archive_write_zip_data()
1088 ret = deflate(&zip->stream, Z_NO_FLUSH); in archive_write_zip_data()
1091 if (zip->stream.avail_out == 0) { in archive_write_zip_data()
1092 if (zip->tctx_valid) { in archive_write_zip_data()
1093 trad_enc_encrypt_update(&zip->tctx, in archive_write_zip_data()
1094 zip->buf, zip->len_buf, in archive_write_zip_data()
1095 zip->buf, zip->len_buf); in archive_write_zip_data()
1096 } else if (zip->cctx_valid) { in archive_write_zip_data()
1097 size_t outl = zip->len_buf; in archive_write_zip_data()
1099 &zip->cctx, in archive_write_zip_data()
1100 zip->buf, zip->len_buf, in archive_write_zip_data()
1101 zip->buf, &outl); in archive_write_zip_data()
1108 archive_hmac_sha1_update(&zip->hctx, in archive_write_zip_data()
1109 zip->buf, zip->len_buf); in archive_write_zip_data()
1111 ret = __archive_write_output(a, zip->buf, in archive_write_zip_data()
1112 zip->len_buf); in archive_write_zip_data()
1115 zip->entry_compressed_written += zip->len_buf; in archive_write_zip_data()
1116 zip->written_bytes += zip->len_buf; in archive_write_zip_data()
1117 zip->stream.next_out = zip->buf; in archive_write_zip_data()
1118 zip->stream.avail_out = (uInt)zip->len_buf; in archive_write_zip_data()
1120 } while (zip->stream.avail_in != 0); in archive_write_zip_data()
1131 zip->entry_uncompressed_limit -= s; in archive_write_zip_data()
1132 if (!zip->cctx_valid || zip->aes_vendor != AES_VENDOR_AE_2) in archive_write_zip_data()
1133 zip->entry_crc32 = in archive_write_zip_data()
1134 zip->crc32func(zip->entry_crc32, buff, (unsigned)s); in archive_write_zip_data()
1142 struct zip *zip = a->format_data; in archive_write_zip_finish_entry() local
1146 if (zip->entry_compression == COMPRESSION_DEFLATE) { in archive_write_zip_finish_entry()
1150 ret = deflate(&zip->stream, Z_FINISH); in archive_write_zip_finish_entry()
1153 remainder = zip->len_buf - zip->stream.avail_out; in archive_write_zip_finish_entry()
1154 if (zip->tctx_valid) { in archive_write_zip_finish_entry()
1155 trad_enc_encrypt_update(&zip->tctx, in archive_write_zip_finish_entry()
1156 zip->buf, remainder, zip->buf, remainder); in archive_write_zip_finish_entry()
1157 } else if (zip->cctx_valid) { in archive_write_zip_finish_entry()
1160 &zip->cctx, zip->buf, remainder, in archive_write_zip_finish_entry()
1161 zip->buf, &outl); in archive_write_zip_finish_entry()
1168 archive_hmac_sha1_update(&zip->hctx, in archive_write_zip_finish_entry()
1169 zip->buf, remainder); in archive_write_zip_finish_entry()
1171 ret = __archive_write_output(a, zip->buf, remainder); in archive_write_zip_finish_entry()
1174 zip->entry_compressed_written += remainder; in archive_write_zip_finish_entry()
1175 zip->written_bytes += remainder; in archive_write_zip_finish_entry()
1176 zip->stream.next_out = zip->buf; in archive_write_zip_finish_entry()
1177 if (zip->stream.avail_out != 0) in archive_write_zip_finish_entry()
1179 zip->stream.avail_out = (uInt)zip->len_buf; in archive_write_zip_finish_entry()
1181 deflateEnd(&zip->stream); in archive_write_zip_finish_entry()
1184 if (zip->hctx_valid) { in archive_write_zip_finish_entry()
1188 archive_hmac_sha1_final(&zip->hctx, hmac, &hmac_len); in archive_write_zip_finish_entry()
1192 zip->entry_compressed_written += AUTH_CODE_SIZE; in archive_write_zip_finish_entry()
1193 zip->written_bytes += AUTH_CODE_SIZE; in archive_write_zip_finish_entry()
1197 if ((zip->entry_flags & ZIP_ENTRY_FLAG_LENGTH_AT_END) != 0) { in archive_write_zip_finish_entry()
1200 if (zip->cctx_valid && zip->aes_vendor == AES_VENDOR_AE_2) in archive_write_zip_finish_entry()
1203 archive_le32enc(d + 4, zip->entry_crc32); in archive_write_zip_finish_entry()
1204 if (zip->entry_uses_zip64) { in archive_write_zip_finish_entry()
1206 (uint64_t)zip->entry_compressed_written); in archive_write_zip_finish_entry()
1208 (uint64_t)zip->entry_uncompressed_written); in archive_write_zip_finish_entry()
1210 zip->written_bytes += 24; in archive_write_zip_finish_entry()
1213 (uint32_t)zip->entry_compressed_written); in archive_write_zip_finish_entry()
1215 (uint32_t)zip->entry_uncompressed_written); in archive_write_zip_finish_entry()
1217 zip->written_bytes += 16; in archive_write_zip_finish_entry()
1224 if (zip->entry_compressed_written > ZIP_4GB_MAX in archive_write_zip_finish_entry()
1225 || zip->entry_uncompressed_written > ZIP_4GB_MAX in archive_write_zip_finish_entry()
1226 || zip->entry_offset > ZIP_4GB_MAX) { in archive_write_zip_finish_entry()
1231 if (zip->entry_uncompressed_written >= ZIP_4GB_MAX) { in archive_write_zip_finish_entry()
1232 archive_le64enc(z, zip->entry_uncompressed_written); in archive_write_zip_finish_entry()
1235 if (zip->entry_compressed_written >= ZIP_4GB_MAX) { in archive_write_zip_finish_entry()
1236 archive_le64enc(z, zip->entry_compressed_written); in archive_write_zip_finish_entry()
1239 if (zip->entry_offset >= ZIP_4GB_MAX) { in archive_write_zip_finish_entry()
1240 archive_le64enc(z, zip->entry_offset); in archive_write_zip_finish_entry()
1244 zd = cd_alloc(zip, z - zip64); in archive_write_zip_finish_entry()
1252 if (archive_le16dec(zip->file_header + 6) < 45) in archive_write_zip_finish_entry()
1253 archive_le16enc(zip->file_header + 6, 45); in archive_write_zip_finish_entry()
1257 if (zip->cctx_valid && zip->aes_vendor == AES_VENDOR_AE_2) in archive_write_zip_finish_entry()
1258 archive_le32enc(zip->file_header + 16, 0);/* no CRC.*/ in archive_write_zip_finish_entry()
1260 archive_le32enc(zip->file_header + 16, zip->entry_crc32); in archive_write_zip_finish_entry()
1261 archive_le32enc(zip->file_header + 20, in archive_write_zip_finish_entry()
1262 (uint32_t)zipmin(zip->entry_compressed_written, in archive_write_zip_finish_entry()
1264 archive_le32enc(zip->file_header + 24, in archive_write_zip_finish_entry()
1265 (uint32_t)zipmin(zip->entry_uncompressed_written, in archive_write_zip_finish_entry()
1267 archive_le16enc(zip->file_header + 30, in archive_write_zip_finish_entry()
1268 (uint16_t)(zip->central_directory_bytes - zip->file_header_extra_offset)); in archive_write_zip_finish_entry()
1269 archive_le32enc(zip->file_header + 42, in archive_write_zip_finish_entry()
1270 (uint32_t)zipmin(zip->entry_offset, in archive_write_zip_finish_entry()
1281 struct zip *zip = a->format_data; in archive_write_zip_close() local
1285 offset_start = zip->written_bytes; in archive_write_zip_close()
1286 segment = zip->central_directory; in archive_write_zip_close()
1292 zip->written_bytes += segment->p - segment->buff; in archive_write_zip_close()
1295 offset_end = zip->written_bytes; in archive_write_zip_close()
1300 || zip->central_directory_entries > 0xffffUL in archive_write_zip_close()
1301 || (zip->flags & ZIP_FLAG_FORCE_ZIP64)) { in archive_write_zip_close()
1309 archive_le64enc(buff + 24, zip->central_directory_entries); in archive_write_zip_close()
1310 archive_le64enc(buff + 32, zip->central_directory_entries); in archive_write_zip_close()
1316 zip->written_bytes += 56; in archive_write_zip_close()
1327 zip->written_bytes += 20; in archive_write_zip_close()
1335 zip->central_directory_entries)); in archive_write_zip_close()
1337 zip->central_directory_entries)); in archive_write_zip_close()
1345 zip->written_bytes += 22; in archive_write_zip_close()
1352 struct zip *zip; in archive_write_zip_free() local
1355 zip = a->format_data; in archive_write_zip_free()
1356 while (zip->central_directory != NULL) { in archive_write_zip_free()
1357 segment = zip->central_directory; in archive_write_zip_free()
1358 zip->central_directory = segment->next; in archive_write_zip_free()
1362 free(zip->buf); in archive_write_zip_free()
1363 archive_entry_free(zip->entry); in archive_write_zip_free()
1364 if (zip->cctx_valid) in archive_write_zip_free()
1365 archive_encrypto_aes_ctr_release(&zip->cctx); in archive_write_zip_free()
1366 if (zip->hctx_valid) in archive_write_zip_free()
1367 archive_hmac_sha1_cleanup(&zip->hctx); in archive_write_zip_free()
1370 free(zip); in archive_write_zip_free()
1493 get_sconv(struct archive_write *a, struct zip *zip) in get_sconv() argument
1495 if (zip->opt_sconv != NULL) in get_sconv()
1496 return (zip->opt_sconv); in get_sconv()
1498 if (!zip->init_default_conversion) { in get_sconv()
1499 zip->sconv_default = in get_sconv()
1501 zip->init_default_conversion = 1; in get_sconv()
1503 return (zip->sconv_default); in get_sconv()
1572 struct zip *zip = a->format_data; in init_traditional_pkware_encryption() local
1589 trad_enc_init(&zip->tctx, passphrase, strlen(passphrase)); in init_traditional_pkware_encryption()
1592 key[TRAD_HEADER_SIZE-1] = zip->trad_chkdat; in init_traditional_pkware_encryption()
1593 trad_enc_encrypt_update(&zip->tctx, key, TRAD_HEADER_SIZE, in init_traditional_pkware_encryption()
1599 zip->written_bytes += TRAD_HEADER_SIZE; in init_traditional_pkware_encryption()
1600 zip->entry_compressed_written += TRAD_HEADER_SIZE; in init_traditional_pkware_encryption()
1607 struct zip *zip = a->format_data; in init_winzip_aes_encryption() local
1620 if (zip->entry_encryption == ENCRYPTION_WINZIP_AES128) { in init_winzip_aes_encryption()
1636 ret = archive_encrypto_aes_ctr_init(&zip->cctx, derived_key, key_len); in init_winzip_aes_encryption()
1642 ret = archive_hmac_sha1_init(&zip->hctx, derived_key + key_len, in init_winzip_aes_encryption()
1645 archive_encrypto_aes_ctr_release(&zip->cctx); in init_winzip_aes_encryption()
1659 zip->written_bytes += salt_len + 2; in init_winzip_aes_encryption()
1660 zip->entry_compressed_written += salt_len + 2; in init_winzip_aes_encryption()