Home | History | Annotate | Download | only in minizip

Lines Matching defs:zi

818     zip64_internal* zi;
849 zi = (zip64_internal*)ALLOC(sizeof(zip64_internal));
850 if (zi==NULL)
876 free(zi);
881 *zi = ziinit;
882 return (zipFile)zi;
920 local int Write_LocalFileHeader(zip64_internal* zi, const char* filename, uInt size_extrafield_local, const void* extrafield_local) {
926 err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)LOCALHEADERMAGIC, 4);
930 if(zi->ci.zip64)
931 err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)45,2);/* version needed to extract */
933 err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)20,2);/* version needed to extract */
937 err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.flag,2);
940 err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.method,2);
943 err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.dosDate,4);
947 err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* crc 32, unknown */
950 if(zi->ci.zip64)
951 err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xFFFFFFFF,4); /* compressed size, unknown */
953 err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* compressed size, unknown */
957 if(zi->ci.zip64)
958 err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xFFFFFFFF,4); /* uncompressed size, unknown */
960 err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* uncompressed size, unknown */
964 err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_filename,2);
966 if(zi->ci.zip64)
972 err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_extrafield,2);
976 if (ZWRITE64(zi->z_filefunc,zi->filestream,filename,size_filename)!=size_filename)
982 if (ZWRITE64(zi->z_filefunc, zi->filestream, extrafield_local, size_extrafield_local) != size_extrafield_local)
987 if ((err==ZIP_OK) && (zi->ci.zip64))
996 zi->ci.pos_zip64extrainfo = ZTELL64(zi->z_filefunc,zi->filestream);
998 err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)HeaderID,2);
999 err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)DataSize,2);
1001 err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)UncompressedSize,8);
1002 err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)CompressedSize,8);
1023 zip64_internal* zi;
1057 zi = (zip64_internal*)file;
1059 if (zi->in_opened_file_inzip == 1)
1077 zi->ci.dosDate = 0;
1081 zi->ci.dosDate = zipfi->dosDate;
1083 zi->ci.dosDate = zip64local_TmzDateToDosDate(&zipfi->tmz_date);
1086 zi->ci.flag = flagBase;
1088 zi->ci.flag |= 2;
1090 zi->ci.flag |= 4;
1092 zi->ci.flag |= 6;
1094 zi->ci.flag |= 1;
1096 zi->ci.crc32 = 0;
1097 zi->ci.method = method;
1098 zi->ci.encrypt = 0;
1099 zi->ci.stream_initialised = 0;
1100 zi->ci.pos_in_buffered_data = 0;
1101 zi->ci.raw = raw;
1102 zi->ci.pos_local_header = ZTELL64(zi->z_filefunc,zi->filestream);
1104 zi->ci.size_centralheader = SIZECENTRALHEADER + size_filename + size_extrafield_global + size_comment;
1105 zi->ci.size_centralExtraFree = 32; // Extra space we have reserved in case we need to add ZIP64 extra info data
1107 zi->ci.central_header = (char*)ALLOC((uInt)zi->ci.size_centralheader + zi->ci.size_centralExtraFree);
1109 zi->ci.size_centralExtra = size_extrafield_global;
1110 zip64local_putValue_inmemory(zi->ci.central_header,(uLong)CENTRALHEADERMAGIC,4);
1112 zip64local_putValue_inmemory(zi->ci.central_header+4,(uLong)versionMadeBy,2);
1113 zip64local_putValue_inmemory(zi->ci.central_header+6,(uLong)20,2);
1114 zip64local_putValue_inmemory(zi->ci.central_header+8,(uLong)zi->ci.flag,2);
1115 zip64local_putValue_inmemory(zi->ci.central_header+10,(uLong)zi->ci.method,2);
1116 zip64local_putValue_inmemory(zi->ci.central_header+12,(uLong)zi->ci.dosDate,4);
1117 zip64local_putValue_inmemory(zi->ci.central_header+16,(uLong)0,4); /*crc*/
1118 zip64local_putValue_inmemory(zi->ci.central_header+20,(uLong)0,4); /*compr size*/
1119 zip64local_putValue_inmemory(zi->ci.central_header+24,(uLong)0,4); /*uncompr size*/
1120 zip64local_putValue_inmemory(zi->ci.central_header+28,(uLong)size_filename,2);
1121 zip64local_putValue_inmemory(zi->ci.central_header+30,(uLong)size_extrafield_global,2);
1122 zip64local_putValue_inmemory(zi->ci.central_header+32,(uLong)size_comment,2);
1123 zip64local_putValue_inmemory(zi->ci.central_header+34,(uLong)0,2); /*disk nm start*/
1126 zip64local_putValue_inmemory(zi->ci.central_header+36,(uLong)0,2);
1128 zip64local_putValue_inmemory(zi->ci.central_header+36,(uLong)zipfi->internal_fa,2);
1131 zip64local_putValue_inmemory(zi->ci.central_header+38,(uLong)0,4);
1133 zip64local_putValue_inmemory(zi->ci.central_header+38,(uLong)zipfi->external_fa,4);
1135 if(zi->ci.pos_local_header >= 0xffffffff)
1136 zip64local_putValue_inmemory(zi->ci.central_header+42,(uLong)0xffffffff,4);
1138 zip64local_putValue_inmemory(zi->ci.central_header+42,(uLong)zi->ci.pos_local_header - zi->add_position_when_writing_offset,4);
1141 *(zi->ci.central_header+SIZECENTRALHEADER+i) = *(filename+i);
1144 *(zi->ci.central_header+SIZECENTRALHEADER+size_filename+i) =
1148 *(zi->ci.central_header+SIZECENTRALHEADER+size_filename+
1150 if (zi->ci.central_header == NULL)
1153 zi->ci.zip64 = zip64;
1154 zi->ci.totalCompressedData = 0;
1155 zi->ci.totalUncompressedData = 0;
1156 zi->ci.pos_zip64extrainfo = 0;
1158 err = Write_LocalFileHeader(zi, filename, size_extrafield_local, extrafield_local);
1161 zi->ci.bstream.avail_in = (uInt)0;
1162 zi->ci.bstream.avail_out = (uInt)Z_BUFSIZE;
1163 zi->ci.bstream.next_out = (char*)zi->ci.buffered_data;
1164 zi->ci.bstream.total_in_hi32 = 0;
1165 zi->ci.bstream.total_in_lo32 = 0;
1166 zi->ci.bstream.total_out_hi32 = 0;
1167 zi->ci.bstream.total_out_lo32 = 0;
1170 zi->ci.stream.avail_in = (uInt)0;
1171 zi->ci.stream.avail_out = (uInt)Z_BUFSIZE;
1172 zi->ci.stream.next_out = zi->ci.buffered_data;
1173 zi->ci.stream.total_in = 0;
1174 zi->ci.stream.total_out = 0;
1175 zi->ci.stream.data_type = Z_BINARY;
1178 if ((err==ZIP_OK) && (zi->ci.method == Z_DEFLATED || zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw))
1180 if ((err==ZIP_OK) && (zi->ci.method == Z_DEFLATED) && (!zi->ci.raw))
1183 if(zi->ci.method == Z_DEFLATED)
1185 zi->ci.stream.zalloc = (alloc_func)0;
1186 zi->ci.stream.zfree = (free_func)0;
1187 zi->ci.stream.opaque = (voidpf)0;
1192 err = deflateInit2(&zi->ci.stream, level, Z_DEFLATED, windowBits, memLevel, strategy);
1195 zi->ci.stream_initialised = Z_DEFLATED;
1197 else if(zi->ci.method == Z_BZIP2ED)
1201 zi->ci.bstream.bzalloc = 0;
1202 zi->ci.bstream.bzfree = 0;
1203 zi->ci.bstream.opaque = (voidpf)0;
1205 err = BZ2_bzCompressInit(&zi->ci.bstream, level, 0,35);
1207 zi->ci.stream_initialised = Z_BZIP2ED;
1214 zi->ci.crypt_header_size = 0;
1219 zi->ci.encrypt = 1;
1220 zi->ci.pcrc_32_tab = get_crc_table();
1221 /*init_keys(password,zi->ci.keys,zi->ci.pcrc_32_tab);*/
1223 sizeHead=crypthead(password,bufHead,RAND_HEAD_LEN,zi->ci.keys,zi->ci.pcrc_32_tab,crcForCrypting);
1224 zi->ci.crypt_header_size = sizeHead;
1226 if (ZWRITE64(zi->z_filefunc,zi->filestream,bufHead,sizeHead) != sizeHead)
1232 zi->in_opened_file_inzip = 1;
1327 local int zip64FlushWriteBuffer(zip64_internal* zi) {
1330 if (zi->ci.encrypt != 0)
1335 for (i=0;i<zi->ci.pos_in_buffered_data;i++)
1336 zi->ci.buffered_data[i] = zencode(zi->ci.keys, zi->ci.pcrc_32_tab, zi->ci.buffered_data[i],t);
1340 if (ZWRITE64(zi->z_filefunc,zi->filestream,zi->ci.buffered_data,zi->ci.pos_in_buffered_data) != zi->ci.pos_in_buffered_data)
1343 zi->ci.totalCompressedData += zi->ci.pos_in_buffered_data;
1346 if(zi->ci.method == Z_BZIP2ED)
1348 zi->ci.totalUncompressedData += zi->ci.bstream.total_in_lo32;
1349 zi->ci.bstream.total_in_lo32 = 0;
1350 zi->ci.bstream.total_in_hi32 = 0;
1355 zi->ci.totalUncompressedData += zi->ci.stream.total_in;
1356 zi->ci.stream.total_in = 0;
1360 zi->ci.pos_in_buffered_data = 0;
1366 zip64_internal* zi;
1371 zi = (zip64_internal*)file;
1373 if (zi->in_opened_file_inzip == 0)
1376 zi->ci.crc32 = crc32(zi->ci.crc32,buf,(uInt)len);
1379 if(zi->ci.method == Z_BZIP2ED && (!zi->ci.raw))
1381 zi->ci.bstream.next_in = (void*)buf;
1382 zi->ci.bstream.avail_in = len;
1385 while ((err==BZ_RUN_OK) && (zi->ci.bstream.avail_in>0))
1387 if (zi->ci.bstream.avail_out == 0)
1389 if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO)
1391 zi->ci.bstream.avail_out = (uInt)Z_BUFSIZE;
1392 zi->ci.bstream.next_out = (char*)zi->ci.buffered_data;
1399 if ((zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw))
1401 uLong uTotalOutBefore_lo = zi->ci.bstream.total_out_lo32;
1402 // uLong uTotalOutBefore_hi = zi->ci.bstream.total_out_hi32;
1403 err=BZ2_bzCompress(&zi->ci.bstream, BZ_RUN);
1405 zi->ci.pos_in_buffered_data += (uInt)(zi->ci.bstream.total_out_lo32 - uTotalOutBefore_lo) ;
1415 zi->ci.stream.next_in = (Bytef*)(uintptr_t)buf;
1416 zi->ci.stream.avail_in = len;
1418 while ((err==ZIP_OK) && (zi->ci.stream.avail_in>0))
1420 if (zi->ci.stream.avail_out == 0)
1422 if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO)
1424 zi->ci.stream.avail_out = (uInt)Z_BUFSIZE;
1425 zi->ci.stream.next_out = zi->ci.buffered_data;
1432 if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw))
1434 uLong uTotalOutBefore = zi->ci.stream.total_out;
1435 err=deflate(&zi->ci.stream, Z_NO_FLUSH);
1437 zi->ci.pos_in_buffered_data += (uInt)(zi->ci.stream.total_out - uTotalOutBefore) ;
1442 if (zi->ci.stream.avail_in < zi->ci.stream.avail_out)
1443 copy_this = zi->ci.stream.avail_in;
1445 copy_this = zi->ci.stream.avail_out;
1448 *(((char*)zi->ci.stream.next_out)+i) =
1449 *(((const char*)zi->ci.stream.next_in)+i);
1451 zi->ci.stream.avail_in -= copy_this;
1452 zi->ci.stream.avail_out-= copy_this;
1453 zi->ci.stream.next_in+= copy_this;
1454 zi->ci.stream.next_out+= copy_this;
1455 zi->ci.stream.total_in+= copy_this;
1456 zi->ci.stream.total_out+= copy_this;
1457 zi->ci.pos_in_buffered_data += copy_this;
1471 zip64_internal* zi;
1479 zi = (zip64_internal*)file;
1481 if (zi->in_opened_file_inzip == 0)
1483 zi->ci.stream.avail_in = 0;
1485 if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw))
1490 if (zi->ci.stream.avail_out == 0)
1492 if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO)
1494 zi->ci.stream.avail_out = (uInt)Z_BUFSIZE;
1495 zi->ci.stream.next_out = zi->ci.buffered_data;
1497 uTotalOutBefore = zi->ci.stream.total_out;
1498 err=deflate(&zi->ci.stream, Z_FINISH);
1499 zi->ci.pos_in_buffered_data += (uInt)(zi->ci.stream.total_out - uTotalOutBefore) ;
1502 else if ((zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw))
1509 if (zi->ci.bstream.avail_out == 0)
1511 if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO)
1513 zi->ci.bstream.avail_out = (uInt)Z_BUFSIZE;
1514 zi->ci.bstream.next_out = (char*)zi->ci.buffered_data;
1516 uTotalOutBefore = zi->ci.bstream.total_out_lo32;
1517 err=BZ2_bzCompress(&zi->ci.bstream, BZ_FINISH);
1521 zi->ci.pos_in_buffered_data += (uInt)(zi->ci.bstream.total_out_lo32 - uTotalOutBefore);
1532 if ((zi->ci.pos_in_buffered_data>0) && (err==ZIP_OK))
1534 if (zip64FlushWriteBuffer(zi)==ZIP_ERRNO)
1538 if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw))
1540 int tmp_err = deflateEnd(&zi->ci.stream);
1543 zi->ci.stream_initialised = 0;
1546 else if((zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw))
1548 int tmperr = BZ2_bzCompressEnd(&zi->ci.bstream);
1551 zi->ci.stream_initialised = 0;
1555 if (!zi->ci.raw)
1557 crc32 = (uLong)zi->ci.crc32;
1558 uncompressed_size = zi->ci.totalUncompressedData;
1560 compressed_size = zi->ci.totalCompressedData;
1563 compressed_size += zi->ci.crypt_header_size;
1567 if(compressed_size >= 0xffffffff || uncompressed_size >= 0xffffffff || zi->ci.pos_local_header >= 0xffffffff)
1570 zip64local_putValue_inmemory(zi->ci.central_header+4,(uLong)45,2);
1572 zip64local_putValue_inmemory(zi->ci.central_header+6,(uLong)45,2);
1576 zip64local_putValue_inmemory(zi->ci.central_header+16,crc32,4); /*crc*/
1580 zip64local_putValue_inmemory(zi->ci.central_header+20, invalidValue,4); /*compr size*/
1582 zip64local_putValue_inmemory(zi->ci.central_header+20, compressed_size,4); /*compr size*/
1585 if (zi->ci.stream.data_type == Z_ASCII)
1586 zip64local_putValue_inmemory(zi->ci.central_header+36,(uLong)Z_ASCII,2);
1589 zip64local_putValue_inmemory(zi->ci.central_header+24, invalidValue,4); /*uncompr size*/
1591 zip64local_putValue_inmemory(zi->ci.central_header+24, uncompressed_size,4); /*uncompr size*/
1602 if(zi->ci.pos_local_header >= 0xffffffff)
1609 if((uLong)(datasize + 4) > zi->ci.size_centralExtraFree)
1615 p = zi->ci.central_header + zi->ci.size_centralheader;
1635 if(zi->ci.pos_local_header >= 0xffffffff)
1637 zip64local_putValue_inmemory(p, zi->ci.pos_local_header, 8);
1644 zi->ci.size_centralExtraFree -= datasize + 4;
1645 zi->ci.size_centralheader += datasize + 4;
1648 zi->ci.size_centralExtra += datasize + 4;
1649 zip64local_putValue_inmemory(zi->ci.central_header+30,(uLong)zi->ci.size_centralExtra,2);
1653 err = add_data_in_datablock(&zi->central_dir, zi->ci.central_header, (uLong)zi->ci.size_centralheader);
1655 free(zi->ci.central_header);
1661 ZPOS64_T cur_pos_inzip = ZTELL64(zi->z_filefunc,zi->filestream);
1663 if (ZSEEK64(zi->z_filefunc,zi->filestream, zi->ci.pos_local_header + 14,ZLIB_FILEFUNC_SEEK_SET)!=0)
1667 err = zip64local_putValue(&zi->z_filefunc,zi->filestream,crc32,4); /* crc 32, unknown */
1671 if(zi->ci.pos_zip64extrainfo > 0)
1674 if (ZSEEK64(zi->z_filefunc,zi->filestream, zi->ci.pos_zip64extrainfo + 4,ZLIB_FILEFUNC_SEEK_SET)!=0)
1678 err = zip64local_putValue(&zi->z_filefunc, zi->filestream, uncompressed_size, 8);
1681 err = zip64local_putValue(&zi->z_filefunc, zi->filestream, compressed_size, 8);
1689 err = zip64local_putValue(&zi->z_filefunc,zi->filestream,compressed_size,4);
1692 err = zip64local_putValue(&zi->z_filefunc,zi->filestream,uncompressed_size,4);
1695 if (ZSEEK64(zi->z_filefunc,zi->filestream, cur_pos_inzip,ZLIB_FILEFUNC_SEEK_SET)!=0)
1699 zi->number_entry ++;
1700 zi->in_opened_file_inzip = 0;
1709 local int Write_Zip64EndOfCentralDirectoryLocator(zip64_internal* zi, ZPOS64_T zip64eocd_pos_inzip) {
1711 ZPOS64_T pos = zip64eocd_pos_inzip - zi->add_position_when_writing_offset;
1713 err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ZIP64ENDLOCHEADERMAGIC,4);
1717 err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4);
1721 err = zip64local_putValue(&zi->z_filefunc,zi->filestream, pos,8);
1725 err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)1,4);
1730 local int Write_Zip64EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip) {
1735 err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ZIP64ENDHEADERMAGIC,4);
1738 err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(ZPOS64_T)Zip64DataSize,8); // why ZPOS64_T of this ?
1741 err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)45,2);
1744 err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)45,2);
1747 err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4);
1750 err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4);
1753 err = zip64local_putValue(&zi->z_filefunc, zi->filestream, zi->number_entry, 8);
1756 err = zip64local_putValue(&zi->z_filefunc, zi->filestream, zi->number_entry, 8);
1759 err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(ZPOS64_T)size_centraldir,8);
1763 ZPOS64_T pos = centraldir_pos_inzip - zi->add_position_when_writing_offset;
1764 err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (ZPOS64_T)pos,8);
1769 local int Write_EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip) {
1773 err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ENDHEADERMAGIC,4);
1776 err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,2);
1779 err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,2);
1784 if(zi->number_entry >= 0xFFFF)
1785 err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xffff,2); // use value in ZIP64 record
1787 err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->number_entry,2);
1793 if(zi->number_entry >= 0xFFFF)
1794 err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xffff,2); // use value in ZIP64 record
1796 err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->number_entry,2);
1800 err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_centraldir,4);
1804 ZPOS64_T pos = centraldir_pos_inzip - zi->add_position_when_writing_offset;
1807 err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (uLong)0xffffffff,4);
1810 err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (uLong)(centraldir_pos_inzip - zi->add_position_when_writing_offset),4);
1816 local int Write_GlobalComment(zip64_internal* zi, const char* global_comment) {
1823 err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_global_comment,2);
1827 if (ZWRITE64(zi->z_filefunc,zi->filestream, global_comment, size_global_comment) != size_global_comment)
1834 zip64_internal* zi;
1843 zi = (zip64_internal*)file;
1845 if (zi->in_opened_file_inzip == 1)
1852 global_comment = zi->globalcomment;
1855 centraldir_pos_inzip = ZTELL64(zi->z_filefunc,zi->filestream);
1859 linkedlist_datablock_internal* ldi = zi->central_dir.first_block;
1864 if (ZWRITE64(zi->z_filefunc,zi->filestream, ldi->data, ldi->filled_in_this_block) != ldi->filled_in_this_block)
1872 free_linkedlist(&(zi->central_dir));
1874 pos = centraldir_pos_inzip - zi->add_position_when_writing_offset;
1875 if(pos >= 0xffffffff || zi->number_entry >= 0xFFFF)
1877 ZPOS64_T Zip64EOCDpos = ZTELL64(zi->z_filefunc,zi->filestream);
1878 Write_Zip64EndOfCentralDirectoryRecord(zi, size_centraldir, centraldir_pos_inzip);
1880 Write_Zip64EndOfCentralDirectoryLocator(zi, Zip64EOCDpos);
1884 err = Write_EndOfCentralDirectoryRecord(zi, size_centraldir, centraldir_pos_inzip);
1887 err = Write_GlobalComment(zi, global_comment);
1889 if (ZCLOSE64(zi->z_filefunc,zi->filestream) != 0)
1894 free(zi->globalcomment);
1896 free(zi);