diff options
| author | Mark Adler <madler@alumni.caltech.edu> | 2011-09-09 23:06:52 -0700 |
|---|---|---|
| committer | Mark Adler <madler@alumni.caltech.edu> | 2011-09-09 23:06:52 -0700 |
| commit | 64b2e892035cf6ea98800c54dce0d63730d50272 (patch) | |
| tree | e3b569f87e413eaef4a13469acfd4224b2a63d3a /example.c | |
| parent | 4ca984fb447ac57120c394cf2fbba23837ed31c2 (diff) | |
| download | zlib-64b2e892035cf6ea98800c54dce0d63730d50272.tar.gz zlib-64b2e892035cf6ea98800c54dce0d63730d50272.tar.bz2 zlib-64b2e892035cf6ea98800c54dce0d63730d50272.zip | |
zlib 0.9v0.9
Diffstat (limited to '')
| -rw-r--r-- | example.c | 81 |
1 files changed, 79 insertions, 2 deletions
| @@ -3,7 +3,7 @@ | |||
| 3 | * For conditions of distribution and use, see copyright notice in zlib.h | 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | */ | 4 | */ |
| 5 | 5 | ||
| 6 | /* $Id: example.c,v 1.6 1995/04/29 16:53:46 jloup Exp $ */ | 6 | /* $Id: example.c,v 1.7 1995/05/01 16:57:22 jloup Exp $ */ |
| 7 | 7 | ||
| 8 | #include <stdio.h> | 8 | #include <stdio.h> |
| 9 | #include "zlib.h" | 9 | #include "zlib.h" |
| @@ -182,6 +182,81 @@ void test_inflate(compr) | |||
| 182 | } | 182 | } |
| 183 | 183 | ||
| 184 | /* =========================================================================== | 184 | /* =========================================================================== |
| 185 | * Test deflate() with full flush | ||
| 186 | */ | ||
| 187 | void test_flush(compr) | ||
| 188 | Byte compr[]; | ||
| 189 | { | ||
| 190 | z_stream c_stream; /* compression stream */ | ||
| 191 | int err; | ||
| 192 | int len = strlen(hello)+1; | ||
| 193 | |||
| 194 | c_stream.zalloc = (alloc_func)0; | ||
| 195 | c_stream.zfree = (free_func)0; | ||
| 196 | |||
| 197 | err = deflateInit(&c_stream, Z_DEFAULT_COMPRESSION); | ||
| 198 | CHECK_ERR(err, "deflateInit"); | ||
| 199 | |||
| 200 | c_stream.next_in = (Byte*)hello; | ||
| 201 | c_stream.next_out = compr; | ||
| 202 | c_stream.avail_in = 3; | ||
| 203 | c_stream.avail_out = BUFLEN; | ||
| 204 | err = deflate(&c_stream, Z_FULL_FLUSH); | ||
| 205 | CHECK_ERR(err, "deflate"); | ||
| 206 | |||
| 207 | compr[3]++; /* force an error in first compressed block */ | ||
| 208 | c_stream.avail_in = len - 3; | ||
| 209 | |||
| 210 | err = deflate(&c_stream, Z_FINISH); | ||
| 211 | if (err != Z_STREAM_END) { | ||
| 212 | CHECK_ERR(err, "deflate"); | ||
| 213 | } | ||
| 214 | err = deflateEnd(&c_stream); | ||
| 215 | CHECK_ERR(err, "deflateEnd"); | ||
| 216 | } | ||
| 217 | |||
| 218 | /* =========================================================================== | ||
| 219 | * Test inflateSync() | ||
| 220 | */ | ||
| 221 | void test_sync(compr) | ||
| 222 | Byte compr[]; | ||
| 223 | { | ||
| 224 | local Byte uncompr[BUFLEN]; | ||
| 225 | int err; | ||
| 226 | z_stream d_stream; /* decompression stream */ | ||
| 227 | |||
| 228 | strcpy((char*)uncompr, "garbage"); | ||
| 229 | |||
| 230 | d_stream.zalloc = (alloc_func)0; | ||
| 231 | d_stream.zfree = (free_func)0; | ||
| 232 | |||
| 233 | err = inflateInit(&d_stream); | ||
| 234 | CHECK_ERR(err, "inflateInit"); | ||
| 235 | |||
| 236 | d_stream.next_in = compr; | ||
| 237 | d_stream.next_out = uncompr; | ||
| 238 | d_stream.avail_in = 2; /* just read the zlib header */ | ||
| 239 | d_stream.avail_out = sizeof(uncompr); | ||
| 240 | |||
| 241 | inflate(&d_stream, Z_NO_FLUSH); | ||
| 242 | CHECK_ERR(err, "inflate"); | ||
| 243 | |||
| 244 | d_stream.avail_in = BUFLEN-2; /* let inflate read all compressed data */ | ||
| 245 | err = inflateSync(&d_stream); /* skip the damaged part */ | ||
| 246 | CHECK_ERR(err, "inflateSync"); | ||
| 247 | |||
| 248 | err = inflate(&d_stream, Z_FINISH); | ||
| 249 | if (err != Z_DATA_ERROR) { | ||
| 250 | fprintf(stderr, "inflate should report DATA_ERROR\n"); | ||
| 251 | /* Because of incorrect adler32 */ | ||
| 252 | } | ||
| 253 | err = inflateEnd(&d_stream); | ||
| 254 | CHECK_ERR(err, "inflateEnd"); | ||
| 255 | |||
| 256 | printf("after inflateSync(): %s\n", uncompr); | ||
| 257 | } | ||
| 258 | |||
| 259 | /* =========================================================================== | ||
| 185 | * Usage: example [output.gz [input.gz]] | 260 | * Usage: example [output.gz [input.gz]] |
| 186 | */ | 261 | */ |
| 187 | 262 | ||
| @@ -204,8 +279,10 @@ void main(argc, argv) | |||
| 204 | (argc > 2 ? argv[2] : "foo.gz")); | 279 | (argc > 2 ? argv[2] : "foo.gz")); |
| 205 | 280 | ||
| 206 | test_deflate(compr); | 281 | test_deflate(compr); |
| 207 | |||
| 208 | test_inflate(compr); | 282 | test_inflate(compr); |
| 209 | 283 | ||
| 284 | test_flush(compr); | ||
| 285 | test_sync(compr); | ||
| 286 | |||
| 210 | exit(0); | 287 | exit(0); |
| 211 | } | 288 | } |
