Vibhav Pant (@vibhavp) commented about dlls/opcservices/compress.c:
- compress_write(archive, archive->files[i] + 1, archive->files[i]->name_length); - dir_end.directory_size += archive->files[i]->name_length + sizeof(*archive->files[i]); + struct zip64_end_of_central_directory_locator locator; + struct zip64_end_of_central_directory eocd64; + uint64_t eocd64_offset = archive->position; + struct zip64_extra_field extra_field; + + for (i = 0; i < archive->file_count; ++i) + { + const struct zip_file *file = archive->files[i]; + + cdh.signature = ZIP32_CDFH; + cdh.version = ZIP64_VERSION; + cdh.min_version = ZIP64_VERSION; + cdh.flags = USE_DATA_DESCRIPTOR; + cdh.method = 8; /* Z_DEFLATED */ When using `OPC_COMPRESSION_NONE`, `method` is set to 0 in native. We should also set the bits to denote the compression speed, as described by the [PKZIP appnote](https://pkwaredownloads.blob.core.windows.net/pkware-general/Documentation/A...) (4.4.4 general purpose bit flag):
Bit 2 Bit 1 \ 0 0 Normal (-en) compression option was used.
0 1 Maximum (-exx/-ex) compression option was used.
1 0 Fast (-ef) compression option was used.
1 1 Super Fast (-es) compression option was used.
Native also does the same, as these fields are needed to implement`IOpcPart::GetCompressionOptions` while reading packages. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/8879#note_114530