Mercurial > hg > dmlib
annotate tests/testdmzlib.c @ 1064:a6c5be712b53
Add dmzlib / zlib test utility.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Mon, 02 Mar 2015 01:49:14 +0200 |
parents | |
children | 2e997dd888b9 |
rev | line source |
---|---|
1064
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1 #include "dmlib.h" |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
2 #include "dmzlib.h" |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
3 #include "dmfile.h" |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
4 #include "dmargs.h" |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
5 #include <zlib.h> |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
6 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
7 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
8 #define SET_TMPBUF_SIZE (16 * 1024) |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
9 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
10 char *optInFilename = NULL, |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
11 *optOutFilename = NULL; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
12 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
13 int optCompressLevel = Z_BEST_COMPRESSION; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
14 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
15 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
16 static const DMOptArg optList[] = |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
17 { |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
18 { 0, '?', "help", "Show this help", OPT_NONE }, |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
19 { 1, 'q', "quiet", "Decrease verbosity", OPT_NONE }, |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
20 }; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
21 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
22 static const int optListN = sizeof(optList) / sizeof(optList[0]); |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
23 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
24 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
25 void argShowHelp() |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
26 { |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
27 dmPrintBanner(stdout, dmProgName, "[options] [input filename] [output filename]"); |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
28 dmArgsPrintHelp(stdout, optList, optListN, 0); |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
29 } |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
30 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
31 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
32 BOOL argHandleOpt(const int optN, char *optArg, char *currArg) |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
33 { |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
34 (void) currArg; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
35 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
36 switch (optN) |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
37 { |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
38 case 0: |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
39 argShowHelp(); |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
40 exit(0); |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
41 break; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
42 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
43 case 1: |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
44 dmVerbosity = 0; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
45 break; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
46 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
47 case 10: |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
48 optCompressLevel = atoi(optArg); |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
49 if (optCompressLevel < 1 || optCompressLevel > 9) |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
50 { |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
51 dmErrorMsg("Invalid compression level argument '%s', must be 1 .. 9.\n", optArg); |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
52 return FALSE; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
53 } |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
54 break; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
55 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
56 default: |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
57 return FALSE; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
58 } |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
59 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
60 return TRUE; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
61 } |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
62 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
63 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
64 BOOL argHandleFile(char *currArg) |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
65 { |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
66 if (optInFilename == NULL) |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
67 optInFilename = currArg; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
68 else |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
69 if (optOutFilename == NULL) |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
70 optOutFilename = currArg; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
71 else |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
72 { |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
73 dmErrorMsg("Excess filenames specified.\n"); |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
74 return FALSE; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
75 } |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
76 return TRUE; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
77 } |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
78 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
79 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
80 int dmTestDMZlib(FILE *inFile, FILE *outFile, size_t *inSize, size_t *outSize) |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
81 { |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
82 Uint8 *inBuffer = NULL, *outBuffer = NULL; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
83 DMZLibContext ctx; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
84 int ret; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
85 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
86 if ((ret = dmReadDataFile(inFile, "-", &inBuffer, inSize)) != DMERR_OK) |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
87 { |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
88 dmErrorMsg("Failed to read file.\n"); |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
89 goto out; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
90 } |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
91 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
92 if ((outBuffer = dmMalloc(SET_TMPBUF_SIZE)) == NULL) |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
93 { |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
94 ret = dmError(DMERR_MALLOC, |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
95 "Malloc failed.\n"); |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
96 goto out; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
97 } |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
98 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
99 // Initialize decompression structures |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
100 ctx.zbuffer = inBuffer; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
101 ctx.zbufferEnd = inBuffer + *inSize; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
102 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
103 ctx.zout = ctx.zoutStart = outBuffer; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
104 ctx.zoutEnd = outBuffer + SET_TMPBUF_SIZE; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
105 ctx.expandable = TRUE; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
106 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
107 // Attempt decompression |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
108 if ((ret = dmZLibParseHeader(&ctx, TRUE)) != DMERR_OK) |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
109 { |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
110 dmErrorMsg("Error parsing ZLIB header: %d, %s\n", ret, dmErrorStr(ret)); |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
111 goto out; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
112 } |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
113 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
114 if ((ret = dmZLibDecode(&ctx)) != DMERR_OK) |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
115 { |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
116 dmErrorMsg("Error in ZLIB decompress: %d, %s\n", ret, dmErrorStr(ret)); |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
117 goto out; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
118 } |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
119 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
120 outBuffer = ctx.zoutStart; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
121 *outSize = ctx.zout - ctx.zoutStart; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
122 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
123 if (fwrite(outBuffer, sizeof(Uint8), *outSize, outFile) != *outSize) |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
124 { |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
125 ret = dmError(DMERR_FWRITE, "File write error.\n"); |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
126 goto out; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
127 } |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
128 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
129 out: |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
130 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
131 dmFree(inBuffer); |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
132 dmFree(outBuffer); |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
133 return ret; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
134 } |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
135 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
136 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
137 int dmTestZlib(FILE *inFile, FILE *outFile, size_t *inSize, size_t *outSize, BOOL compress, int level) |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
138 { |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
139 Uint8 *inBuffer = NULL, *outBuffer = NULL; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
140 int zret, zinit = FALSE; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
141 int ret = DMERR_OK; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
142 z_stream zstr; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
143 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
144 dmMsg(0, "Operating mode: %s\n", |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
145 compress ? "compress" : "decompress"); |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
146 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
147 if ((inBuffer = malloc(SET_TMPBUF_SIZE)) == NULL || |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
148 (outBuffer = malloc(SET_TMPBUF_SIZE)) == NULL) |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
149 { |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
150 ret = dmError(DMERR_MALLOC, "Malloc failed.\n"); |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
151 goto out; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
152 } |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
153 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
154 memset(&zstr, 0, sizeof(zstr)); |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
155 if (compress) |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
156 zret = deflateInit(&zstr, level); |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
157 else |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
158 zret = inflateInit(&zstr); |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
159 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
160 if (zret != Z_OK) |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
161 { |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
162 ret = dmError(DMERR_INIT_FAIL, "Zlib init fail.\n"); |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
163 goto out; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
164 } |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
165 zinit = TRUE; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
166 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
167 // Initialize compression streams |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
168 zret = Z_OK; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
169 *outSize = 0; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
170 while (!feof(inFile) && zret == Z_OK) |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
171 { |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
172 zstr.avail_in = fread(inBuffer, sizeof(Uint8), SET_TMPBUF_SIZE, inFile); |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
173 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
174 zstr.next_in = inBuffer; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
175 zstr.next_out = outBuffer; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
176 zstr.avail_out = SET_TMPBUF_SIZE; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
177 zstr.total_out = 0; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
178 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
179 if (compress) |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
180 zret = deflate(&zstr, Z_FULL_FLUSH); |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
181 else |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
182 zret = inflate(&zstr, Z_FULL_FLUSH); |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
183 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
184 if (zret == Z_OK && zstr.total_out > 0) |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
185 { |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
186 outSize += zstr.total_out; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
187 if (fwrite(outBuffer, sizeof(Uint8), zstr.total_out, outFile) != zstr.total_out) |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
188 { |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
189 ret = dmError(DMERR_FWRITE, |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
190 "File write error.\n"); |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
191 goto out; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
192 } |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
193 } |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
194 } |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
195 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
196 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
197 switch (zret) |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
198 { |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
199 case Z_OK: |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
200 break; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
201 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
202 case Z_ERRNO: |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
203 dmErrorMsg("Error: errno\n"); |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
204 break; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
205 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
206 case Z_STREAM_END: |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
207 dmErrorMsg("Stream end.\n"); |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
208 break; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
209 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
210 default: |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
211 ret = dmError(DMERR_COMPRESSION, |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
212 "Error: %d, %s\n", zret, zError(zret)); |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
213 } |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
214 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
215 out: |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
216 *inSize = zstr.total_in; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
217 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
218 if (zinit) |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
219 { |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
220 if (compress) |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
221 deflateEnd(&zstr); |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
222 else |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
223 inflateEnd(&zstr); |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
224 } |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
225 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
226 dmFree(inBuffer); |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
227 dmFree(outBuffer); |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
228 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
229 return ret; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
230 } |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
231 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
232 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
233 int main(int argc, char *argv[]) |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
234 { |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
235 FILE *inFile = NULL, *outFile = NULL; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
236 size_t inSize, outSize; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
237 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
238 dmInitProg("testdmzlib", "zlib/dmzlib test", NULL, NULL, NULL); |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
239 dmVerbosity = 1; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
240 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
241 if (!dmArgsProcess(argc, argv, optList, optListN, |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
242 argHandleOpt, argHandleFile, OPTH_BAILOUT)) |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
243 exit(1); |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
244 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
245 // Input and output files |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
246 inFile = stdin; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
247 outFile = stdout; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
248 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
249 dmMsg(0, "In: %d, out %d bytes.\n", inSize, outSize); |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
250 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
251 // Cleanup |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
252 if (outFile != NULL) |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
253 fclose(outFile); |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
254 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
255 if (inFile != NULL) |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
256 fclose(inFile); |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
257 |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
258 return 0; |
a6c5be712b53
Add dmzlib / zlib test utility.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
259 } |