http://bugs.winehq.org/show_bug.cgi?id=7690
------- Additional Comments From focht@gmx.net 2007-16-03 15:41 ------- Hello,
by looking at the patch i think completely ignoring "compression type" by doing CopyFile() in all cases might lead to undefined behaviour (e.g. compressed files getting copied -> install succeeds but leaving applications in unusable state)
Compression support could be implemented as follows (pseudo code):
--- snip pseudo code ---
DWORD __stdcall SetupDecompressOrCopyFileW(PCWSTR SourceFileName,PCWSTR TargetFileName,PUINT CompressionType) { UINT comp_type = 0;
if( CompressionType == NULL) { if(!SetupGetFileCompressionInfo( ..., &comp_type)) return some_error; } else { comp_type = *CompressionType; }
SetFileAttributes( target, FILE_ATTRIBUTE_NORMAL); DeleteFile( target);
if( comp_type == FILE_COMPRESSION_NONE) { if(!MoveFile( source, target)) { // might be different volume GetFileTime( source, ...); if( CopyFile( source, target)) SetFileTime( target, ...); } } else if( comp_type == FILE_COMPRESSION_WINLZA) LZCopy( source, target); else if( comp_type == FILE_COMPRESSION_MSZIP || comp_type == FILE_COMPRESSION_NTCAB) FDICopy( source, target ....); else return some_error_code;
--- snip pseudo code ---
Regards