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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 }