ReactOS 0.4.15-dev-7201-g2de6e75
CMSZipCodec Class Reference

#include <mszip.h>

Inheritance diagram for CMSZipCodec:
Collaboration diagram for CMSZipCodec:

Public Member Functions

 CMSZipCodec ()
 
virtual ~CMSZipCodec ()
 
virtual ULONG Compress (void *OutputBuffer, void *InputBuffer, ULONG InputLength, PULONG OutputLength) override
 
virtual ULONG Uncompress (void *OutputBuffer, void *InputBuffer, ULONG InputLength, PULONG OutputLength) override
 
- Public Member Functions inherited from CCABCodec
 CCABCodec ()
 
virtual ~CCABCodec ()
 
virtual ULONG Compress (void *OutputBuffer, void *InputBuffer, ULONG InputLength, PULONG OutputLength)=0
 
virtual ULONG Uncompress (void *OutputBuffer, void *InputBuffer, ULONG InputLength, PULONG OutputLength)=0
 

Private Attributes

int Status
 
z_stream ZStream
 

Detailed Description

Definition at line 18 of file mszip.h.

Constructor & Destructor Documentation

◆ CMSZipCodec()

CMSZipCodec::CMSZipCodec ( )

Definition at line 36 of file mszip.cxx.

40{
44}
voidpf MSZipAlloc(voidpf opaque, uInt items, uInt size)
Definition: cabinet.c:311
void MSZipFree(voidpf opaque, voidpf address)
Definition: cabinet.c:317
z_stream ZStream
Definition: mszip.h:37
void FAR * voidpf
Definition: zlib.h:42
alloc_func zalloc
Definition: zlib.h:70
free_func zfree
Definition: zlib.h:71
voidpf opaque
Definition: zlib.h:72

◆ ~CMSZipCodec()

CMSZipCodec::~CMSZipCodec ( )
virtual

Definition at line 47 of file mszip.cxx.

51{
52}

Member Function Documentation

◆ Compress()

ULONG CMSZipCodec::Compress ( void OutputBuffer,
void InputBuffer,
ULONG  InputLength,
PULONG  OutputLength 
)
overridevirtual

Implements CCABCodec.

Definition at line 55 of file mszip.cxx.

67{
68 PUSHORT Magic;
69
70 DPRINT(MAX_TRACE, ("InputLength (%u).\n", (UINT)InputLength));
71
72 Magic = (PUSHORT)OutputBuffer;
73 *Magic = MSZIP_MAGIC;
74
75 ZStream.next_in = (unsigned char*)InputBuffer;
76 ZStream.avail_in = InputLength;
77 ZStream.next_out = ((unsigned char *)OutputBuffer + 2);
79
80 /* WindowBits is passed < 0 to tell that there is no zlib header */
84 -MAX_WBITS,
85 8, /* memLevel */
87 if (Status != Z_OK)
88 {
89 DPRINT(MIN_TRACE, ("deflateInit() returned (%d).\n", Status));
90 return CS_NOMEMORY;
91 }
92
94 if ((Status != Z_OK) && (Status != Z_STREAM_END))
95 {
96 DPRINT(MIN_TRACE, ("deflate() returned (%d) (%s).\n", Status, ZStream.msg));
97 if (Status == Z_MEM_ERROR)
98 return CS_NOMEMORY;
99 return CS_BADSTREAM;
100 }
101
102 *OutputLength = ZStream.total_out + 2;
103
105 if (Status != Z_OK)
106 {
107 DPRINT(MIN_TRACE, ("deflateEnd() returned (%d).\n", Status));
108 return CS_BADSTREAM;
109 }
110
111 return CS_SUCCESS;
112}
#define MIN_TRACE
Definition: debug.h:14
#define MAX_TRACE
Definition: debug.h:16
#define CS_NOMEMORY
Definition: cabinet.h:42
#define CS_SUCCESS
Definition: cabinet.h:41
#define CS_BADSTREAM
Definition: cabinet.h:43
#define CAB_BLOCKSIZE
Definition: cabinet.c:49
#define Z_DEFLATED
Definition: zlib.h:146
#define Z_DEFAULT_STRATEGY
Definition: zlib.h:137
#define Z_STREAM_END
Definition: zlib.h:115
#define Z_FINISH
Definition: zlib.h:109
#define Z_OK
Definition: zlib.h:114
int deflate(z_streamp strm, int flush) DECLSPEC_HIDDEN
Definition: deflate.c:815
#define MAX_WBITS
Definition: zlib.h:151
int deflateEnd(z_streamp strm) DECLSPEC_HIDDEN
Definition: deflate.c:1130
#define Z_MEM_ERROR
Definition: zlib.h:120
#define Z_DEFAULT_COMPRESSION
Definition: zlib.h:130
Status
Definition: gdiplustypes.h:25
unsigned int UINT
Definition: ndis.h:50
#define deflateInit2(strm, level, method, windowBits, memLevel, strategy)
Definition: zlib.h:1814
#define MSZIP_MAGIC
Definition: mszip.h:13
#define DPRINT
Definition: sndvol32.h:71
uInt avail_in
Definition: zlib.h:60
z_const Bytef * next_in
Definition: zlib.h:59
uInt avail_out
Definition: zlib.h:64
Bytef * next_out
Definition: zlib.h:63
z_const char * msg
Definition: zlib.h:67
uLong total_out
Definition: zlib.h:65
uint16_t * PUSHORT
Definition: typedefs.h:56
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR OutputBuffer
Definition: wdfiotarget.h:863
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR InputBuffer
Definition: wdfiotarget.h:953

◆ Uncompress()

ULONG CMSZipCodec::Uncompress ( void OutputBuffer,
void InputBuffer,
ULONG  InputLength,
PULONG  OutputLength 
)
overridevirtual

Implements CCABCodec.

Definition at line 115 of file mszip.cxx.

127{
128 USHORT Magic;
129
130 DPRINT(MAX_TRACE, ("InputLength (%u).\n", (UINT)InputLength));
131
132 Magic = *((PUSHORT)InputBuffer);
133
134 if (Magic != MSZIP_MAGIC)
135 {
136 DPRINT(MID_TRACE, ("Bad MSZIP block header magic (0x%X)\n", Magic));
137 return CS_BADSTREAM;
138 }
139
140 ZStream.next_in = ((unsigned char*)InputBuffer + 2);
141 ZStream.avail_in = InputLength - 2;
142 ZStream.next_out = (unsigned char*)OutputBuffer;
144
145 /* WindowBits is passed < 0 to tell that there is no zlib header.
146 * Note that in this case inflate *requires* an extra "dummy" byte
147 * after the compressed stream in order to complete decompression and
148 * return Z_STREAM_END.
149 */
151 if (Status != Z_OK)
152 {
153 DPRINT(MIN_TRACE, ("inflateInit2() returned (%d).\n", Status));
154 return CS_BADSTREAM;
155 }
156
157 while ((ZStream.total_out < CAB_BLOCKSIZE + 12) &&
158 (ZStream.total_in < InputLength - 2))
159 {
161 if (Status == Z_STREAM_END) break;
162 if (Status != Z_OK)
163 {
164 DPRINT(MIN_TRACE, ("inflate() returned (%d) (%s).\n", Status, ZStream.msg));
165 if (Status == Z_MEM_ERROR)
166 return CS_NOMEMORY;
167 return CS_BADSTREAM;
168 }
169 }
170
171 *OutputLength = ZStream.total_out;
172
174 if (Status != Z_OK)
175 {
176 DPRINT(MIN_TRACE, ("inflateEnd() returned (%d).\n", Status));
177 return CS_BADSTREAM;
178 }
179 return CS_SUCCESS;
180}
#define MID_TRACE
Definition: debug.h:15
int inflate(z_streamp strm, int flush)
Definition: inflate.c:1257
int inflateEnd(z_streamp strm)
Definition: inflate.c:1910
#define Z_NO_FLUSH
Definition: zlib.h:105
unsigned short USHORT
Definition: pedump.c:61
#define inflateInit2(strm, windowBits)
Definition: zlib.h:1817
uLong total_in
Definition: zlib.h:61

Member Data Documentation

◆ Status

int CMSZipCodec::Status
private

Definition at line 36 of file mszip.h.

◆ ZStream

z_stream CMSZipCodec::ZStream
private

Definition at line 37 of file mszip.h.

Referenced by CMSZipCodec(), Compress(), and Uncompress().


The documentation for this class was generated from the following files: