1
1
using System ;
2
2
using System . IO ;
3
3
using System . Text ;
4
- using SabreTools . Compression . MSZIP ;
4
+ using SabreTools . Compression . Quantum ;
5
5
using SabreTools . IO . Extensions ;
6
6
using SabreTools . Models . MicrosoftCabinet ;
7
7
using static SabreTools . Models . MicrosoftCabinet . Constants ;
@@ -13,11 +13,12 @@ public static class Program
13
13
public static void Main ( string [ ] args )
14
14
{
15
15
// No implementation, used for experimentation
16
+ READMSZIPTEST ( ) ;
16
17
}
17
18
18
19
private static void READMSZIPTEST ( )
19
20
{
20
- using var fs = File . OpenRead ( "INFILE.cab " ) ;
21
+ using var fs = File . OpenRead ( "/mnt/b/BurnOutSharp Testing Files/FileType/Microsoft CAB/Quantum/WORDWEB_10.CAB " ) ;
21
22
var cab = Deserialize ( fs ) ;
22
23
if ( cab == null || cab . Folders == null || cab . Files == null )
23
24
return ;
@@ -28,15 +29,18 @@ private static void READMSZIPTEST()
28
29
if ( folder ? . DataBlocks == null || folder . DataBlocks . Length == 0 )
29
30
continue ;
30
31
31
- var decomp = Decompressor . Create ( ) ;
32
+ uint windowBits = ( uint ) ( ( ( ushort ) folder . CompressionType >> 8 ) & 0x1f ) ;
32
33
33
34
var ms = new MemoryStream ( ) ;
34
35
foreach ( var db in folder . DataBlocks )
35
36
{
36
37
if ( db ? . CompressedData == null )
37
38
continue ;
38
39
39
- decomp . CopyTo ( db . CompressedData , ms ) ;
40
+ var decomp = Decompressor . Create ( db . CompressedData , windowBits ) ;
41
+ byte [ ] data = decomp . Process ( ) ;
42
+ ms . Write ( data ) ;
43
+ ms . Flush ( ) ;
40
44
}
41
45
42
46
if ( cab ? . Files == null || cab . Files . Length == 0 )
@@ -50,7 +54,7 @@ private static void READMSZIPTEST()
50
54
byte [ ] fileData = new byte [ file . FileSize ] ;
51
55
Array . Copy ( ms . ToArray ( ) , file . FolderStartOffset , fileData , 0 , file . FileSize ) ;
52
56
53
- using var of = File . OpenWrite ( Path . Combine ( "OUTDIR " , file . Name ) ) ;
57
+ using var of = File . OpenWrite ( Path . Combine ( "/mnt/b/BurnOutSharp Testing Files/FileType/Microsoft CAB/Quantum/WORDWEB_10/ " , file . Name ) ) ;
54
58
of . Write ( fileData ) ;
55
59
of . Flush ( ) ;
56
60
}
@@ -220,7 +224,7 @@ private static CFFOLDER ParseFolder(Stream data, CFHEADER header)
220
224
221
225
folder . CabStartOffset = data . ReadUInt32 ( ) ;
222
226
folder . DataCount = data . ReadUInt16 ( ) ;
223
- folder . CompressionType = ( CompressionType ) data . ReadUInt16 ( ) & CompressionType . MASK_TYPE ;
227
+ folder . CompressionType = ( CompressionType ) data . ReadUInt16 ( ) ;
224
228
225
229
if ( header . FolderReservedSize > 0 )
226
230
folder . ReservedData = data . ReadBytes ( header . FolderReservedSize ) ;
0 commit comments