From: Vibhav Pant vibhavp@gmail.com
--- dlls/opcservices/compress.c | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-)
diff --git a/dlls/opcservices/compress.c b/dlls/opcservices/compress.c index 10d746d1994..55513be64c3 100644 --- a/dlls/opcservices/compress.c +++ b/dlls/opcservices/compress.c @@ -96,6 +96,11 @@ struct central_directory_end
enum entry_flags { + DEFLATE_NORMAL = 0x0, + DEFLATE_MAX = 0x2, + DEFLATE_FAST = 0x4, + DEFLATE_SUPERFAST = 0x6, + DEFLATE_LEVEL_MASK = 0x6, USE_DATA_DESCRIPTOR = 0x8, };
@@ -291,8 +296,34 @@ HRESULT compress_add_file(struct zip_archive *archive, const WCHAR *path, /* Local header */ local_header.signature = LOCAL_HEADER_SIGNATURE; local_header.version = VERSION; - local_header.flags = USE_DATA_DESCRIPTOR; - local_header.method = 8; /* Z_DEFLATED */ + if (options == OPC_COMPRESSION_NONE) + { + local_header.method = 0; + local_header.flags = 0; + } + else + { + local_header.method = 8; /* Z_DEFLATED */ + switch (options) + { + case OPC_COMPRESSION_MAXIMUM: + local_header.flags = DEFLATE_MAX; + break; + case OPC_COMPRESSION_FAST: + local_header.flags = DEFLATE_FAST; + break; + case OPC_COMPRESSION_SUPERFAST: + local_header.flags = DEFLATE_SUPERFAST; + break; + default: + WARN("Unsupported compression options %d.\n", options); + case OPC_COMPRESSION_NORMAL: + local_header.flags = DEFLATE_NORMAL; + break; + } + } + + local_header.flags |= USE_DATA_DESCRIPTOR; local_header.mtime = archive->mtime; local_header.crc32 = 0; local_header.compressed_size = 0;