1 /* COPYRIGHT: See COPYING in the top level directory
2 * PROJECT: ReactOS system libraries
3 * PURPOSE: Compression and decompression functions
4 * FILE: lib/rtl/compress.c
5 * PROGRAMER: Eric Kohl (ekohl@rz-online.de)
8 /* INCLUDES *****************************************************************/
15 /* MACROS *******************************************************************/
17 #define COMPRESSION_FORMAT_MASK 0x00FF
18 #define COMPRESSION_ENGINE_MASK 0xFF00
23 /* FUNCTIONS ****************************************************************/
27 RtlpCompressBufferLZNT1(USHORT Engine
,
28 PUCHAR UncompressedBuffer
,
29 ULONG UncompressedBufferSize
,
30 PUCHAR CompressedBuffer
,
31 ULONG CompressedBufferSize
,
32 ULONG UncompressedChunkSize
,
33 PULONG FinalCompressedSize
,
36 return(STATUS_NOT_IMPLEMENTED
);
41 RtlpWorkSpaceSizeLZNT1(USHORT Engine
,
42 PULONG BufferAndWorkSpaceSize
,
43 PULONG FragmentWorkSpaceSize
)
45 if (Engine
== COMPRESSION_ENGINE_STANDARD
)
47 *BufferAndWorkSpaceSize
= 0x8010;
48 *FragmentWorkSpaceSize
= 0x1000;
49 return(STATUS_SUCCESS
);
51 else if (Engine
== COMPRESSION_ENGINE_MAXIMUM
)
53 *BufferAndWorkSpaceSize
= 0x10;
54 *FragmentWorkSpaceSize
= 0x1000;
55 return(STATUS_SUCCESS
);
58 return(STATUS_NOT_SUPPORTED
);
66 RtlCompressBuffer(IN USHORT CompressionFormatAndEngine
,
67 IN PUCHAR UncompressedBuffer
,
68 IN ULONG UncompressedBufferSize
,
69 OUT PUCHAR CompressedBuffer
,
70 IN ULONG CompressedBufferSize
,
71 IN ULONG UncompressedChunkSize
,
72 OUT PULONG FinalCompressedSize
,
75 USHORT Format
= CompressionFormatAndEngine
& COMPRESSION_FORMAT_MASK
;
76 USHORT Engine
= CompressionFormatAndEngine
& COMPRESSION_ENGINE_MASK
;
78 if ((Format
== COMPRESSION_FORMAT_NONE
) ||
79 (Format
== COMPRESSION_FORMAT_DEFAULT
))
80 return(STATUS_INVALID_PARAMETER
);
82 if (Format
== COMPRESSION_FORMAT_LZNT1
)
83 return(RtlpCompressBufferLZNT1(Engine
,
85 UncompressedBufferSize
,
88 UncompressedChunkSize
,
92 return(STATUS_UNSUPPORTED_COMPRESSION
);
100 RtlCompressChunks(IN PUCHAR UncompressedBuffer
,
101 IN ULONG UncompressedBufferSize
,
102 OUT PUCHAR CompressedBuffer
,
103 IN ULONG CompressedBufferSize
,
104 IN OUT PCOMPRESSED_DATA_INFO CompressedDataInfo
,
105 IN ULONG CompressedDataInfoLength
,
108 return(STATUS_NOT_IMPLEMENTED
);
116 RtlDecompressBuffer(IN USHORT CompressionFormat
,
117 OUT PUCHAR UncompressedBuffer
,
118 IN ULONG UncompressedBufferSize
,
119 IN PUCHAR CompressedBuffer
,
120 IN ULONG CompressedBufferSize
,
121 OUT PULONG FinalUncompressedSize
)
123 return(STATUS_NOT_IMPLEMENTED
);
131 RtlDecompressChunks(OUT PUCHAR UncompressedBuffer
,
132 IN ULONG UncompressedBufferSize
,
133 IN PUCHAR CompressedBuffer
,
134 IN ULONG CompressedBufferSize
,
135 IN PUCHAR CompressedTail
,
136 IN ULONG CompressedTailSize
,
137 IN PCOMPRESSED_DATA_INFO CompressedDataInfo
)
139 return(STATUS_NOT_IMPLEMENTED
);
147 RtlDecompressFragment(IN USHORT CompressionFormat
,
148 OUT PUCHAR UncompressedFragment
,
149 IN ULONG UncompressedFragmentSize
,
150 IN PUCHAR CompressedBuffer
,
151 IN ULONG CompressedBufferSize
,
152 IN ULONG FragmentOffset
,
153 OUT PULONG FinalUncompressedSize
,
156 return(STATUS_NOT_IMPLEMENTED
);
164 RtlDescribeChunk(IN USHORT CompressionFormat
,
165 IN OUT PUCHAR
*CompressedBuffer
,
166 IN PUCHAR EndOfCompressedBufferPlus1
,
167 OUT PUCHAR
*ChunkBuffer
,
168 OUT PULONG ChunkSize
)
170 return(STATUS_NOT_IMPLEMENTED
);
178 RtlGetCompressionWorkSpaceSize(IN USHORT CompressionFormatAndEngine
,
179 OUT PULONG CompressBufferAndWorkSpaceSize
,
180 OUT PULONG CompressFragmentWorkSpaceSize
)
182 USHORT Format
= CompressionFormatAndEngine
& COMPRESSION_FORMAT_MASK
;
183 USHORT Engine
= CompressionFormatAndEngine
& COMPRESSION_ENGINE_MASK
;
185 if ((Format
== COMPRESSION_FORMAT_NONE
) ||
186 (Format
== COMPRESSION_FORMAT_DEFAULT
))
187 return(STATUS_INVALID_PARAMETER
);
189 if (Format
== COMPRESSION_FORMAT_LZNT1
)
190 return(RtlpWorkSpaceSizeLZNT1(Engine
,
191 CompressBufferAndWorkSpaceSize
,
192 CompressFragmentWorkSpaceSize
));
194 return(STATUS_UNSUPPORTED_COMPRESSION
);
203 RtlReserveChunk(IN USHORT CompressionFormat
,
204 IN OUT PUCHAR
*CompressedBuffer
,
205 IN PUCHAR EndOfCompressedBufferPlus1
,
206 OUT PUCHAR
*ChunkBuffer
,
209 return(STATUS_NOT_IMPLEMENTED
);