7 int ReadFileMemory(const char* filename
,long* plFileSize
,void** pFilePtr
)
12 stream
=fopen(filename
, "rb");
16 fseek(stream
,0,SEEK_END
);
18 *plFileSize
=ftell(stream
);
19 fseek(stream
,0,SEEK_SET
);
20 ptr
=malloc((*plFileSize
)+1);
25 if (fread(ptr
, 1, *plFileSize
,stream
) != (*plFileSize
))
33 int main(int argc
, char *argv
[])
35 int BlockSizeCompress
=0x8000;
36 int BlockSizeUncompress
=0x8000;
37 int cprLevel
=Z_DEFAULT_COMPRESSION
;
39 unsigned char* FilePtr
;
41 long lBufferSizeUncpr
;
42 long lCompressedSize
=0;
43 unsigned char* CprPtr
;
44 unsigned char* UncprPtr
;
45 long lSizeCpr
,lSizeUncpr
;
50 printf("run TestZlib <File> [BlockSizeCompress] [BlockSizeUncompress] [compres. level]\n");
54 if (ReadFileMemory(argv
[1],&lFileSize
,&FilePtr
)==0)
56 printf("error reading %s\n",argv
[1]);
59 else printf("file %s read, %u bytes\n",argv
[1],lFileSize
);
62 BlockSizeCompress
=atol(argv
[2]);
65 BlockSizeUncompress
=atol(argv
[3]);
68 cprLevel
=(int)atol(argv
[4]);
70 lBufferSizeCpr
= lFileSize
+ (lFileSize
/0x10) + 0x200;
71 lBufferSizeUncpr
= lBufferSizeCpr
;
73 CprPtr
=(unsigned char*)malloc(lBufferSizeCpr
+ BlockSizeCompress
);
74 UncprPtr
=(unsigned char*)malloc(lBufferSizeUncpr
+ BlockSizeUncompress
);
76 dwGetTick
=GetTickCount();
80 long lOrigToDo
= lFileSize
;
83 memset(&zcpr
,0,sizeof(z_stream
));
84 deflateInit(&zcpr
,cprLevel
);
86 zcpr
.next_in
= FilePtr
;
87 zcpr
.next_out
= CprPtr
;
92 long all_read_before
= zcpr
.total_in
;
93 zcpr
.avail_in
= min(lOrigToDo
,BlockSizeCompress
);
94 zcpr
.avail_out
= BlockSizeCompress
;
95 ret
=deflate(&zcpr
,(zcpr
.avail_in
==lOrigToDo
) ? Z_FINISH
: Z_SYNC_FLUSH
);
96 lOrigDone
+= (zcpr
.total_in
-all_read_before
);
97 lOrigToDo
-= (zcpr
.total_in
-all_read_before
);
101 lSizeCpr
=zcpr
.total_out
;
103 dwGetTick
=GetTickCount()-dwGetTick
;
104 printf("total compress size = %u, in %u step\n",lSizeCpr
,step
);
105 printf("time = %u msec = %f sec\n\n",dwGetTick
,dwGetTick
/(double)1000.);
108 dwGetTick
=GetTickCount();
112 long lOrigToDo
= lSizeCpr
;
115 memset(&zcpr
,0,sizeof(z_stream
));
118 zcpr
.next_in
= CprPtr
;
119 zcpr
.next_out
= UncprPtr
;
124 long all_read_before
= zcpr
.total_in
;
125 zcpr
.avail_in
= min(lOrigToDo
,BlockSizeUncompress
);
126 zcpr
.avail_out
= BlockSizeUncompress
;
127 ret
=inflate(&zcpr
,Z_SYNC_FLUSH
);
128 lOrigDone
+= (zcpr
.total_in
-all_read_before
);
129 lOrigToDo
-= (zcpr
.total_in
-all_read_before
);
133 lSizeUncpr
=zcpr
.total_out
;
135 dwGetTick
=GetTickCount()-dwGetTick
;
136 printf("total uncompress size = %u, in %u step\n",lSizeUncpr
,step
);
137 printf("time = %u msec = %f sec\n\n",dwGetTick
,dwGetTick
/(double)1000.);
140 if (lSizeUncpr
==lFileSize
)
142 if (memcmp(FilePtr
,UncprPtr
,lFileSize
)==0)
143 printf("compare ok\n");